Compare commits

..

2893 Commits

Author SHA1 Message Date
dependabot[bot]
a73ce9cf0c chore(deps): bump i18next from 25.6.0 to 25.6.1 in /frontend
Bumps [i18next](https://github.com/i18next/i18next) from 25.6.0 to 25.6.1.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v25.6.0...v25.6.1)

---
updated-dependencies:
- dependency-name: i18next
  dependency-version: 25.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-07 15:18:52 +00:00
Manish Madan
fbf7cf874b chore(dependabot): add react-widget npm dependency updates (#2146) 2025-11-07 17:17:46 +02:00
Manish Madan
ba7278b80f Merge pull request #2140 from arc53/dependabot/npm_and_yarn/frontend/husky-9.1.7
chore(deps-dev): bump husky from 8.0.3 to 9.1.7 in /frontend
2025-11-07 03:02:52 +05:30
ManishMadan2882
9d649de6f9 chore(eslint): migrate to ESLint 9 flat config format
- Add eslint.config.js with ESLint 9 flat config format
- Remove deprecated .eslintrc.cjs file
- Remove deprecated .eslintignore file (replaced by ignores in config)
- Maintain all existing ESLint rules and configurations
- Ensure compatibility with Husky 9.1.7
2025-11-07 02:59:51 +05:30
dependabot[bot]
7929afbf58 chore(deps-dev): bump husky from 8.0.3 to 9.1.7 in /frontend
Bumps [husky](https://github.com/typicode/husky) from 8.0.3 to 9.1.7.
- [Release notes](https://github.com/typicode/husky/releases)
- [Commits](https://github.com/typicode/husky/compare/v8.0.3...v9.1.7)

---
updated-dependencies:
- dependency-name: husky
  dependency-version: 9.1.7
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-06 21:27:39 +00:00
Manish Madan
ceaf942e70 Merge pull request #2139 from arc53/dependabot/npm_and_yarn/frontend/eslint-9.39.1
chore(deps-dev): bump eslint from 8.57.1 to 9.39.1 in /frontend
2025-11-07 02:33:32 +05:30
dependabot[bot]
f355601a44 chore(deps-dev): bump eslint from 8.57.1 to 9.39.1 in /frontend
Bumps [eslint](https://github.com/eslint/eslint) from 8.57.1 to 9.39.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v8.57.1...v9.39.1)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.39.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-06 20:00:14 +00:00
Manish Madan
4ff99a1e86 Merge pull request #2138 from arc53/dependabot/npm_and_yarn/frontend/reduxjs/toolkit-2.10.1
chore(deps): bump @reduxjs/toolkit from 2.9.2 to 2.10.1 in /frontend
2025-11-07 01:28:58 +05:30
dependabot[bot]
129084ba92 chore(deps): bump @reduxjs/toolkit from 2.9.2 to 2.10.1 in /frontend
Bumps [@reduxjs/toolkit](https://github.com/reduxjs/redux-toolkit) from 2.9.2 to 2.10.1.
- [Release notes](https://github.com/reduxjs/redux-toolkit/releases)
- [Commits](https://github.com/reduxjs/redux-toolkit/compare/v2.9.2...v2.10.1)

---
updated-dependencies:
- dependency-name: "@reduxjs/toolkit"
  dependency-version: 2.10.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-06 19:56:28 +00:00
Manish Madan
2288df1293 Merge pull request #2141 from arc53/dependabot/npm_and_yarn/frontend/vite-7.2.0
chore(deps-dev): bump vite from 7.1.12 to 7.2.0 in /frontend
2025-11-07 01:05:29 +05:30
Manish Madan
d9dfac55e7 Merge pull request #2134 from arc53/dependabot/npm_and_yarn/frontend/types/mermaid-9.2.0
chore(deps-dev): bump @types/mermaid from 9.1.0 to 9.2.0 in /frontend
2025-11-06 17:46:59 +05:30
Nick
404cf4b7c7 Update quickstart.mdx (#2142)
Added missing **
2025-11-06 12:37:27 +02:00
dependabot[bot]
f1c1fc123b chore(deps-dev): bump vite from 7.1.12 to 7.2.0 in /frontend
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.1.12 to 7.2.0.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.2.0/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-05 20:08:29 +00:00
ManishMadan2882
9f19c7ee4c Remove deprecated @types/mermaid dependency - mermaid provides its own types 2025-11-05 20:43:47 +05:30
dependabot[bot]
155e74eca1 chore(deps-dev): bump @types/mermaid from 9.1.0 to 9.2.0 in /frontend
Bumps [@types/mermaid](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mermaid) from 9.1.0 to 9.2.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/mermaid)

---
updated-dependencies:
- dependency-name: "@types/mermaid"
  dependency-version: 9.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-05 15:10:19 +00:00
Manish Madan
ea2dc4dbcb Merge pull request #2133 from arc53/dependabot/npm_and_yarn/frontend/react-i18next-16.2.4
chore(deps): bump react-i18next from 15.7.4 to 16.2.4 in /frontend
2025-11-05 20:23:15 +05:30
dependabot[bot]
616edc97de chore(deps): bump react-i18next from 15.7.4 to 16.2.4 in /frontend
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 15.7.4 to 16.2.4.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v15.7.4...v16.2.4)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-version: 16.2.4
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-05 14:48:28 +00:00
Manish Madan
b017e99c79 Merge pull request #2132 from arc53/dependabot/npm_and_yarn/frontend/eslint-plugin-n-17.23.1
chore(deps-dev): bump eslint-plugin-n from 16.6.2 to 17.23.1 in /frontend
2025-11-05 20:14:18 +05:30
dependabot[bot]
f698e9d3e1 chore(deps-dev): bump eslint-plugin-n in /frontend
Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 16.6.2 to 17.23.1.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Changelog](https://github.com/eslint-community/eslint-plugin-n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/16.6.2...v17.23.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-n
  dependency-version: 17.23.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-05 14:35:17 +00:00
Manish Madan
d366502850 Merge pull request #2131 from arc53/dependabot/npm_and_yarn/frontend/typescript-eslint/parser-8.46.3
chore(deps-dev): bump @typescript-eslint/parser from 6.21.0 to 8.46.3 in /frontend
2025-11-05 20:03:59 +05:30
ManishMadan2882
3d6757c170 (chore:lint) relax rules, build fix 2025-11-05 20:02:01 +05:30
Manish Madan
cb8302add8 Fixes shared conversation on cloud version (#2135)
* (fix:shared) conv as id, not dbref

* (chore) script to migrate dbref to id

* (chore): ruff fix

---------

Co-authored-by: GH Action - Upstream Sync <action@github.com>
2025-11-05 16:08:10 +02:00
dependabot[bot]
9d266e9fad chore(deps-dev): bump @typescript-eslint/parser in /frontend
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 6.21.0 to 8.46.3.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.46.3/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.46.3
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-05 13:45:18 +00:00
Manish Madan
ae94c9d31e Merge pull request #2130 from arc53/dependabot/npm_and_yarn/frontend/vite-7.1.12
chore(deps-dev): bump vite from 6.4.1 to 7.1.12 in /frontend
2025-11-05 19:13:59 +05:30
ManishMadan2882
83ab232dcd (chore:fe) pkg lock 2025-11-05 19:12:20 +05:30
dependabot[bot]
eea85772a3 chore(deps-dev): bump vite from 6.4.1 to 7.1.12 in /frontend
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.4.1 to 7.1.12.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v7.1.12/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.1.12/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.1.12
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-05 19:10:27 +05:30
Alex
0fe7e223cc fix: update Discord invite link across documentation and navigation 2025-11-04 09:27:22 +00:00
Heisenberg Vader
3789d2eb03 Updated the technique for handling multiple file uploads from the user (#2126)
* Fixed multiple file uploads to be sent through a single request to backend for further processing and storing

* Fixed multiple file uploads to be sent through a single request to backend for further processing and storing

* Fixed multiple file uploads to be sent through a single request to backend for further processing and storing

* Made duplicate multiple keyword fixes

* Added back drag and drop functionality and it keeps the multiple file uploads
2025-11-04 01:12:35 +02:00
Manish Madan
d54469532e fix: adjust ESLint rules to warnings for strict type checking (#2129)
- Changed @typescript-eslint/no-explicit-any from error to warning
- Changed @typescript-eslint/no-unused-vars from error to warning
- Allows codebase to pass linting while maintaining code quality checks
- These rules can be gradually enforced as code is refactored
- Verified with npm run build - successful
2025-11-04 01:09:39 +02:00
Manish Madan
9884e51836 Merge pull request #2122 from arc53/dependabot/npm_and_yarn/frontend/prettier-plugin-tailwindcss-0.7.1
chore(deps-dev): bump prettier-plugin-tailwindcss from 0.6.13 to 0.7.1 in /frontend
2025-11-03 19:31:30 +05:30
Alex
6626723180 feat: enhance prompt variable handling and add system variable options in prompts modal (#2128) 2025-11-03 15:54:13 +02:00
Manish Madan
0c251e066b Merge pull request #2124 from arc53/dependabot/npm_and_yarn/frontend/eslint-plugin-n-17.23.1
chore(deps-dev): bump eslint-plugin-n from 15.7.0 to 17.23.1 in /frontend
2025-11-03 19:22:22 +05:30
dependabot[bot]
0957034bfa chore(deps-dev): bump prettier-plugin-tailwindcss in /frontend
Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.6.13 to 0.7.1.
- [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.6.13...v0.7.1)

---
updated-dependencies:
- dependency-name: prettier-plugin-tailwindcss
  dependency-version: 0.7.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-03 13:49:34 +00:00
ManishMadan2882
44521cd893 fix: resolve peer dependency conflict with eslint-plugin-n
- Downgrade eslint-plugin-n from ^17.23.1 to ^16.6.2
- Ensure compatibility with eslint-config-standard-with-typescript@43.0.1
- eslint-config-standard-with-typescript requires eslint-plugin-n@^15.0.0 || ^16.0.0
- Verified with successful npm install and vite build
2025-11-03 19:19:02 +05:30
dependabot[bot]
b17f846730 chore(deps-dev): bump eslint-plugin-n in /frontend
Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 15.7.0 to 17.23.1.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Changelog](https://github.com/eslint-community/eslint-plugin-n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/15.7.0...v17.23.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-n
  dependency-version: 17.23.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-03 13:45:27 +00:00
Manish Madan
6dd32fd4ca Merge pull request #2111 from arc53/dependabot/npm_and_yarn/frontend/mermaid-11.12.1
chore(deps): bump mermaid from 11.12.0 to 11.12.1 in /frontend
2025-11-03 19:14:00 +05:30
dependabot[bot]
b17b1c70b5 chore(deps): bump mermaid from 11.12.0 to 11.12.1 in /frontend
Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 11.12.0 to 11.12.1.
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.12.0...mermaid@11.12.1)

---
updated-dependencies:
- dependency-name: mermaid
  dependency-version: 11.12.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-03 19:07:58 +05:30
Manish Madan
3f5b31fb5f Merge pull request #2084 from arc53/dependabot/npm_and_yarn/frontend/typescript-eslint/eslint-plugin-8.46.2
chore(deps-dev): bump @typescript-eslint/eslint-plugin from 5.51.0 to 8.46.2 in /frontend
2025-11-03 18:51:23 +05:30
ManishMadan2882
06bda6bd55 fix: resolve peer dependency conflicts in eslint and typescript-eslint packages
- Update @typescript-eslint/eslint-plugin from ^8.46.2 to ^6.21.0
- Update @typescript-eslint/parser from ^5.62.0 to ^6.21.0
- Update eslint-config-standard-with-typescript from ^34.0.0 to ^43.0.1
- Ensure all dependencies are compatible without requiring --legacy-peer-deps
- Verified with successful npm install and vite build
2025-11-03 18:47:34 +05:30
Christine Belzie
7dd97821a8 feat: Installing vale(redo) (#2104)
* docs: setup Vale

Signed-off-by: Christine Belzie <shecoder30@gmail.com>

* adding more content

* chore: add Vale configuration and custom dictionary

* chore: clean up spelling configuration and remove unused vocabularies

* fix: correct file path format for Vale linter configuration

---------

Signed-off-by: Christine Belzie <shecoder30@gmail.com>
Co-authored-by: Alex <a@tushynski.me>
2025-10-31 18:00:09 +02:00
Harshit Ranjan
695191d888 added error saving vector store (#2081)
* added error saving vector store

* fixed code formating

* added tests for embedding pipeline
2025-10-31 16:29:35 +02:00
dependabot[bot]
1dbcef24c7 chore(deps-dev): bump @typescript-eslint/eslint-plugin in /frontend
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.51.0 to 8.46.2.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.46.2/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.46.2
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-31 14:04:19 +00:00
Manish Madan
e086c79da0 Merge pull request #1933 from arc53/dependabot/npm_and_yarn/frontend/npm_and_yarn-d56b2ef021
chore(deps): bump mermaid from 11.6.0 to 11.10.0 in /frontend in the npm_and_yarn group
2025-10-31 19:32:57 +05:30
dependabot[bot]
6ae8d34b27 chore(deps): bump mermaid in /frontend in the npm_and_yarn group
Bumps the npm_and_yarn group in /frontend with 1 update: [mermaid](https://github.com/mermaid-js/mermaid).

Updates `mermaid` from 11.6.0 to 11.10.0
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.6.0...mermaid@11.10.0)

---
updated-dependencies:
- dependency-name: mermaid
  dependency-version: 11.10.0
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-31 19:27:31 +05:30
Manish Madan
2e23e547d3 Merge pull request #1916 from arc53/dependabot/npm_and_yarn/frontend/eslint-plugin-prettier-5.5.4
build(deps-dev): bump eslint-plugin-prettier from 5.2.1 to 5.5.4 in /frontend
2025-10-31 19:24:38 +05:30
dependabot[bot]
fa11dc9828 build(deps-dev): bump eslint-plugin-prettier in /frontend
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.2.1 to 5.5.4.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.2.1...v5.5.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.5.4
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-31 19:18:44 +05:30
Manish Madan
673fa70bc5 Merge pull request #1903 from arc53/dependabot/npm_and_yarn/frontend/multi-6fb5dc7d23
build(deps): bump react-dom and @types/react-dom in /frontend
2025-10-31 19:16:17 +05:30
dependabot[bot]
a0660a54c1 build(deps): bump react-dom and @types/react-dom in /frontend
Bumps [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) and [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom). These dependencies needed to be updated together.

Updates `react-dom` from 19.1.0 to 19.1.1
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.1.1/packages/react-dom)

Updates `@types/react-dom` from 19.1.6 to 19.1.7
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

---
updated-dependencies:
- dependency-name: react-dom
  dependency-version: 19.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: "@types/react-dom"
  dependency-version: 19.1.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-31 19:10:51 +05:30
Manish Madan
1137bf4280 Merge pull request #1864 from arc53/dependabot/npm_and_yarn/frontend/i18next-browser-languagedetector-8.2.0
build(deps): bump i18next-browser-languagedetector from 8.0.2 to 8.2.0 in /frontend
2025-10-31 19:10:26 +05:30
dependabot[bot]
da41c898d8 build(deps): bump i18next-browser-languagedetector in /frontend
Bumps [i18next-browser-languagedetector](https://github.com/i18next/i18next-browser-languageDetector) from 8.0.2 to 8.2.0.
- [Changelog](https://github.com/i18next/i18next-browser-languageDetector/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-browser-languageDetector/compare/v8.0.2...v8.2.0)

---
updated-dependencies:
- dependency-name: i18next-browser-languagedetector
  dependency-version: 8.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-31 18:59:21 +05:30
Siddhant Rai
21e5c261ef feat: template-based prompt rendering with dynamic namespace injection (#2091)
* feat: template-based prompt rendering with dynamic namespace injection

* refactor: improve template engine initialization with clearer formatting

* refactor: streamline ReActAgent methods and improve content extraction logic

feat: enhance error handling in NamespaceManager and TemplateEngine

fix: update NewAgent component to ensure consistent form data submission

test: modify tests for ReActAgent and prompt renderer to reflect method changes and improve coverage

* feat: tools namespace + three-tier token budget

* refactor: remove unused variable assignment in message building tests

* Enhance prompt customization and tool pre-fetching functionality

* ruff lint fix

* refactor: cleaner error handling and reduce code clutter

---------

Co-authored-by: Alex <a@tushynski.me>
2025-10-31 12:47:44 +00:00
Aqsa Aqeel
a7d61b9d59 feat: implementing the new custom modal design (#2090)
* feat: implementing the new custom modal design

* feat: added tool variable dropdown

* fix: ui fixes and link fixes

* feat: implemented redisgn for edit prompt modal

* (feat:prompts) matching figma

* (fix:prompts) tool vars

* (fix:promptsModal) responsive; disable save on text

---------

Co-authored-by: Aqsa Aqeel <aqsa.aqeel17@example.com>
Co-authored-by: ManishMadan2882 <manishmadan321@gmail.com>
2025-10-31 12:18:13 +02:00
dorkdiaries9
c5fe25c149 Enhance migration script with logging and error handling (#2103)
Added logging for migration steps and error handling.
2025-10-29 01:49:47 +02:00
Manish Madan
6a4cb617f9 Frontend audit: Bug fixes and refinements (#2112)
* (fix:attachements) sep id for redux ops

* (fix:ui) popups, toast, share modal

* (feat:agentsPreview) stable preview, ui fixes

* (fix:ui) light theme icon, sleek scroll

* (chore:i18n) missin keys

* (chore:i18n) missing keys

* (feat:preferrenceSlice) autoclear invalid source from storage

* (fix:general) delete all conv close btn

* (fix:tts) play one at a time

* (fix:tts) gracefully unmount

* (feat:tts) audio LRU cache

* (feat:tts) pointer on hovered area

* (feat:tts) clean text for speach

---------

Co-authored-by: GH Action - Upstream Sync <action@github.com>
2025-10-29 01:47:26 +02:00
Alex
94f70e6de5 refactor(tests): update todo tool tests to use simplified action names and improve key handling 2025-10-28 10:39:35 +00:00
Hanzalah Waheed
ab4ebf9a9d feat: add bg blur for modals (#2110)
* feat: add bg blur for modals

* feat: adjust darkness for lightmode
2025-10-28 12:14:37 +02:00
Nikunj Kohli
9f7945fcf5 [UI/UX] Improve image upload experience — add preview & drag-to-reord… (#2095)
* [UI/UX] Improve image upload experience — add preview & drag-to-reorder in chat section

* chore(chat): remove image previews, keep drag-to-reorder

* chore(chat): prevent attachment drag from triggering upload dropzone

* Revert "chore(chat): prevent attachment drag from triggering upload dropzone"

This reverts commit dd4b96256c.

* (feat:conv) rmv drag-drop on sources

* (feat:msg-input) drop attachments

---------

Co-authored-by: ManishMadan2882 <manishmadan321@gmail.com>
2025-10-27 21:53:18 +02:00
Gayatri K
d8ec3c008c todo tool feature added to tools (#1977)
* todo tool feature added to tools

* removed configs

* fix: require user_id on TodoListTool, normalize timestamps, add tests

* lint and tests fixes

* refactor: support multiple todos per user/tool by indexing with todo_id

* modified todo_id to use auto-increamenting integer instead of UUID

* test-case fixes

* feat: fix todos

---------

Co-authored-by: Alex <a@tushynski.me>
2025-10-27 19:09:32 +02:00
Pavel
2f00691246 Merge pull request #2096 from arc53/hacktoberfest-t-shirt-image
Update HACKTOBERFEST.md with T-shirt image
2025-10-24 13:15:30 +01:00
Pavel
9b2383b074 Update HACKTOBERFEST.md with T-shirt image
Added t-shirt image.
2025-10-24 13:09:23 +01:00
Ritoban Dutta
e4e9910575 fix(ui): use dedicated sidebar open/close icons for better visual feedback of actions (#2088)
* fix(ui): use dedicated icons for sidebar toggle (panel-left-open/close)

* fix: update sidebar toggle icon colors
2025-10-24 00:25:17 +03:00
Nihar
f448e4a615 add configurable provider in settings.py and update ElevenLabs Api (#2065) (#2074) 2025-10-22 19:07:21 +03:00
Manish Madan
c4e8daf50e Frontend audit: refinements (#2083)
* (fix:attachements) sep id for redux ops

* (fix:ui) popups, toast, share modal

* (feat:agentsPreview) stable preview, ui fixes

* (fix:ui) light theme icon, sleek scroll

---------

Co-authored-by: GH Action - Upstream Sync <action@github.com>
2025-10-22 12:12:05 +03:00
Hanzalah Waheed
5aa4ec1b9f fix: cleanup ConversationBubble and fix CopyButton (#2073)
* fix: rm states for hovering. use tailwind classes instead

* fix: use group hover css intead of states

* chore: no point in having separate defaults if cant be customised

* fix: move default bg colors into conditionals
2025-10-18 21:59:15 +03:00
Siddhant Rai
125ce0aad3 test: implement full API test suite with mongomock and centralized fixtures (#2068) 2025-10-17 12:01:14 +03:00
TinTin
ababc9ae04 fix: reduce large margins between list items in answer rendering (#2058) 2025-10-16 13:59:45 +03:00
Alex
62ac90746e fix: improve error handling and loading state in fetchChunks function 2025-10-15 17:33:13 +01:00
Alex
096f6d91a2 fix: handle potential undefined value for selectedDocs in fetchAnswer 2025-10-15 17:12:52 +01:00
jay98
d28ef6b094 Refactor: use async/await in fetchChunks for correct error handling (typescript:S4822) (#2066) 2025-10-15 15:52:55 +03:00
Anurag Yadav
8fb945ab09 feedback button to show after message (#2064) 2025-10-14 18:52:31 +03:00
jay98
835d71727c fix: remove redundant conditional operator for file assignment (#2060) 2025-10-14 17:35:41 +03:00
Ali Arda Fincan
ce32dd2907 Feat: Agent Token or Request Limiting (#2041)
* Update routes.py, added token and request limits to create/update agent operations

* added usage limit check to api endpoints

cannot create agents with usage limit right now that will be implemented

* implemented api limiting as either token limiting or request limiting modes

* minor typo & bug fix
2025-10-13 21:32:46 +03:00
Manish Madan
72bc24a490 Chore: deleted unused files, dead code; minor fixes (#2059)
* (feat:pause-stream) generator exit

* (feat:pause-stream) close request

* (feat:pause-stream) finally close; google anthropic

* (feat:task_status)communicate failure

* (clean:connector) unused routes

* (feat:file-table) missing skeletons

* (chore:fe) purge unused

* (fix:apiKeys) build err

* (chore:settings) clean unused

* merge from main

* (chore:purge) unused fe assets

* (clean:check_docs) unused logic

* (feat:selectedDocs) replace null type

---------

Co-authored-by: GH Action - Upstream Sync <action@github.com>
2025-10-13 19:11:24 +03:00
Siddhant Rai
d6c49bdbf0 test: add agent test coverage and standardize test suite (#2051)
- Add 104 comprehensive tests for agent system
- Integrate agent tests into CI/CD pipeline
- Standardize tests with @pytest.mark.unit markers
- Fix cross-platform path compatibility
- Clean up unused imports and dependencies
2025-10-13 14:43:35 +03:00
beKool.sh
1805292528 Update README.md (#2057) 2025-10-13 13:00:13 +03:00
Nirjas Jakilim
d09ce7e1f7 fixed broken link (#2054) 2025-10-12 15:26:05 +03:00
Marco Ponce
a8d2024791 Windows deployment powershell and renamed LLM_PROVIDER and runtime (#2050)
* Windows deployment powershell and  renamed LLM_PROVIDER and runtime

* added LLM_NAME back

* revert changes on docker-compose-hub.yaml
2025-10-12 15:25:42 +03:00
Manish Madan
f0b954dbfb Upload: communicate failure, minor frontend updates (#2048)
* (feat:pause-stream) generator exit

* (feat:pause-stream) close request

* (feat:pause-stream) finally close; google anthropic

* (feat:task_status)communicate failure

* (clean:connector) unused routes

* (feat:file-table) missing skeletons

* (fix:apiKeys) build err

---------

Co-authored-by: GH Action - Upstream Sync <action@github.com>
2025-10-10 17:34:02 +03:00
Rahul
50bee7c2b0 feat: Add button to cancel LLM response (#1978)
* feat: Add button to cancel LLM response
- Replace text area with cancel button when loading.
- Add useEffect to change elipsis in cancel button text.
- Add new SVG icon for cancel response.
- Button colors match Figma designs.

* fix: Cancel button UI matches new design
- Delete cancel-response svg.
- Change previous cancel button to match the new Figma design.
- Remove console log in handleCancel function.

* fix: Adjust cancel button rounding

* feat: Update UI for send button
- Add SendArrowIcon component, enables dynamic svg color changes
- Replace original icon
- Update colors and hover effects

* (fix:send-button) minor blink in transition

---------

Co-authored-by: Manish Madan <manishmadan321@gmail.com>
2025-10-09 12:01:25 +03:00
Mariam Saeed
e7b15b316e Feat: Notification section (#2033)
* Feature/Notification-section

* fix notification ui and add local storage variable to save the state

* add notification component to app.tsx
2025-10-09 01:26:10 +03:00
Manish Madan
a4507008c1 complete_stream: Stop response streaming (#2031)
* (feat:pause-stream) generator exit

* (feat:pause-stream) close request

* (feat:pause-stream) finally close; google anthropic

---------

Co-authored-by: GH Action - Upstream Sync <action@github.com>
2025-10-08 20:37:30 +03:00
Hanzalah Waheed
c5ba85f929 fix(ui): create a var to check for shared metadata obj (#2040) 2025-10-08 18:18:54 +03:00
Manish Madan
2e636bd67e Merge pull request #1970 from arc53/dependabot/npm_and_yarn/frontend/mermaid-11.12.0
chore(deps): bump mermaid from 11.6.0 to 11.12.0 in /frontend
2025-10-08 20:42:32 +05:30
dependabot[bot]
4a039f1abf chore(deps): bump mermaid from 11.6.0 to 11.12.0 in /frontend
Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 11.6.0 to 11.12.0.
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.6.0...mermaid@11.12.0)

---
updated-dependencies:
- dependency-name: mermaid
  dependency-version: 11.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-08 15:06:36 +00:00
JeevaRamanathan
434d8e2070 fix spinner to match theme (dark/light) in conversation (#2044) 2025-10-08 15:16:44 +03:00
Nihar
160ad2dc79 correct path for storing embeddings model (#2035) 2025-10-07 23:01:39 +03:00
Anshuman Payasi
0ec86c2c71 fix: adjust share modal size and spacing (#2027)
* fix/share-modal-spacing

* fix(share-modal): spacing adjusted for mobile view
2025-10-07 17:11:03 +03:00
Alex
03452ffd9f feat: add GitHub access token support and fix file content fetching logic (#2032) 2025-10-07 16:53:14 +03:00
Siddhant Rai
da6317a242 feat: agent templates and seeding premade agents (#1910)
* feat: agent templates and seeding premade agents

* fix: ensure ObjectId is used for source reference in agent configuration

* fix: improve source handling in DatabaseSeeder and update tool config processing

* feat: add prompt handling in DatabaseSeeder for agent configuration

* Docs premade agents

* link to prescraped docs

* feat: add template agent retrieval and adopt agent functionality

* feat: simplify agent descriptions in premade_agents.yaml  added docs

---------

Co-authored-by: Pavel <pabin@yandex.ru>
Co-authored-by: Alex <a@tushynski.me>
2025-10-07 13:00:14 +03:00
Nihar
8b8e616557 fix: handle missing kwargs in local save_file (#2017)
Previously, the local save_file function didn’t accept kwargs, causing
a crash when passed extra params. Added support to maintain consistency
with AWS version.

Fixes #2009
2025-10-06 23:55:49 +03:00
Marco Ponce
d260f1a1a6 Made changes to how the documentation is represented including the new 5th option when forking and launching DocsGPT on the inviduals device, as well as updated README.md which has miswording issues saying only 4 options, but now includes the 5th option, detailing and giving an explanation for what that option does and documentation provided. (#2020) 2025-10-06 23:50:16 +03:00
Alex
9d452e3b04 feat: enhance MemoryTool and NotesTool with tool_id management and directory renaming tests (#2026) 2025-10-06 23:45:47 +03:00
Alex
e012189672 feat: implement MemoryTool with CRUD operations and integrate with MongoDB 2025-10-06 21:09:22 +01:00
Dhairya Parikh
4c31e9a8b1 Add MongoDB-backed NotesTool with CRUD actions and unit tests (#1982)
* Add MongoDB-backed NotesTool with CRUD actions and unit tests

* NotesTool: enforce single note per user, require decoded_token['sub'] user_id, fix tests

* chore: remove accidentally committed results.txt and ignore it

* fix: remove results.txt, enforce single note per user, add tests

* refactor: update NotesTool actions and tests for clarity and consistency

* refactor: update NotesTool docstring for clarity

* refactor: simplify MCPTool docstring and remove redundant import in test_notes_tool

* lint: fix test

* refactor: remove unused import from test_notes_tool.py

---------

Co-authored-by: Alex <a@tushynski.me>
2025-10-06 19:24:03 +03:00
Alex
7cfc230316 Update README.md 2025-10-06 18:30:47 +03:00
Alex
9605e85f1c Merge pull request #2004 from Lanthoiba2022/AgentImageFix1
Fix #1983: Agent image fallback added
2025-10-06 14:47:26 +01:00
Alex
498e2b772c fix: update save_file method to accept additional keyword arguments; enhance AgentImage component with useEffect for dynamic source updates 2025-10-06 14:41:51 +01:00
Manish Madan
dad897da51 Merge pull request #1997 from arc53/dependabot/npm_and_yarn/frontend/i18next-25.5.3
build(deps): bump i18next from 24.2.0 to 25.5.3 in /frontend
2025-10-06 16:44:15 +05:30
dependabot[bot]
02ad5f062e build(deps): bump i18next from 24.2.0 to 25.5.3 in /frontend
Bumps [i18next](https://github.com/i18next/i18next) from 24.2.0 to 25.5.3.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v24.2.0...v25.5.3)

---
updated-dependencies:
- dependency-name: i18next
  dependency-version: 25.5.3
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-06 11:03:35 +00:00
Manish Madan
4eb9471b4f Merge pull request #2021 from M4cr0Chen/enhance-edit-button-and-response-ui
adjusted edit button padding and response box padding & roundness
2025-10-06 13:13:00 +05:30
Zhenghong Chen
b505d207d7 adjusted edit button padding and response box padding & roundness 2025-10-05 16:34:17 -04:00
Alex
3c954bd07f Merge pull request #2007 from ManishMadan2882/upload-toast
Upload Sources: Tasks are notified with UI toasts
2025-10-05 13:49:11 +01:00
ManishMadan2882
c00b6459dc (fix:upload) set docs 2025-10-05 18:07:21 +05:30
ManishMadan2882
eb4d776784 (feat:upload) wording, icons and rmv clear button 2025-10-05 16:12:58 +05:30
Alex
5d7a890533 Merge pull request #2015 from JeevaRamanathan/fix/twitter-navigation-link
chore: update twitter.com to x.com
2025-10-04 21:50:47 +01:00
JeevaRamanathan
9c6aefef1e chore: update twitter.com to x.com for avoiding redirection
Signed-off-by: JeevaRamanathan <jeevaramanathan.m@infosys.com>
2025-10-05 02:00:57 +05:30
ManishMadan2882
e4554d6c09 Merge branch 'main' of https://github.com/arc53/DocsGPT into upload-toast 2025-10-03 23:26:32 +05:30
ManishMadan2882
c184b63df8 (feat:upload) i18n 2025-10-03 20:32:43 +05:30
ManishMadan2882
6bb4195393 (feat:upload) dismiss, but notify on completion 2025-10-03 19:55:41 +05:30
Alex
7827a4d40d Merge pull request #1960 from jayamrutiya/letmecheck/bug-return-value-not-be-ignored
Fix: replace map with for...of loop to avoid ignoring return value (S2201)
2025-10-03 14:15:39 +01:00
ManishMadan2882
f09fa8231a (feat:upload) new toast UI 2025-10-03 17:08:39 +05:30
Alex
96ff10000d Merge pull request #1999 from hanzalahwaheed/feat/ui-enhancements
Feat: UI enhancements
2025-10-03 10:15:54 +01:00
Alex
9460636867 Merge pull request #2005 from siiddhantt/feat/routes-refactor
refactor: modularize user API routes into domain-driven structure
2025-10-03 10:03:33 +01:00
Siddhant Rai
6c43245295 refactor: organize import statements for clarity and consistency 2025-10-03 12:41:03 +05:30
Pavel
266b6cf638 Fix typo in HACKTOBERFEST.md 2025-10-03 08:09:22 +01:00
Siddhant Rai
70183e234a refactor: break up monolithic routes.py into modular domain structure 2025-10-03 12:30:04 +05:30
Hanzalah Waheed
17b9c359ca fix: use hexcode for purple taupe and rm extra props 2025-10-03 00:22:36 +04:00
Lanthoiba22
045630b8a5 Agent image fallback added 2025-10-02 21:53:38 +05:30
Alex
55ff7dd640 Merge pull request #2003 from arc53/hacktoberfest-rules
Update HACKTOBERFEST.md
2025-10-02 16:58:22 +01:00
Alex
e6d64f71f2 Update HACKTOBERFEST.md 2025-10-02 16:58:01 +01:00
Alex
e72313ebdd Merge pull request #2002 from ManishMadan2882/main
Frontend Lint
2025-10-02 12:35:59 +01:00
ManishMadan2882
65d5bd72cd Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-10-02 16:59:13 +05:30
ManishMadan2882
dc0cbb41f0 (fix:table) remove display name 2025-10-02 16:50:59 +05:30
ManishMadan2882
c4a54a85be (lint) fe 2025-10-02 16:30:08 +05:30
Hanzalah Waheed
5b2738aec9 fix (ui): is_copied true, disable hover state 2025-10-02 13:44:05 +04:00
Hanzalah Waheed
892312fc08 fix: hover bg color change fixed using correct css var 2025-10-02 12:23:17 +04:00
Alex
c2ccf2c72c Merge pull request #2000 from ManishMadan2882/main
Test coverage:  TTS, Security and Storage layers
2025-10-02 00:11:22 +01:00
ManishMadan2882
80aaecb5f0 ruff-fix 2025-10-02 02:48:16 +05:30
ManishMadan2882
946865a335 test:TTS 2025-10-02 02:40:30 +05:30
ManishMadan2882
5de15c8413 (feat:11Labs) just functional part 2025-10-02 02:39:53 +05:30
ManishMadan2882
67268fd35a tests:security 2025-10-02 02:34:05 +05:30
ManishMadan2882
42fc771833 tests:storage 2025-10-02 02:33:12 +05:30
Hanzalah Waheed
444b1a0b65 feat(ui): add transition animation to navigation sidebar 2025-10-01 23:16:24 +04:00
Hanzalah Waheed
814ea1c016 fix(ui): add text-32px for smaller than lg view for agent headings 2025-10-01 21:21:23 +04:00
Alex
4d34dc4234 Merge pull request #1996 from arc53/pr/1988
Pr/1988
2025-10-01 10:29:20 +01:00
Alex
d567399f2b Merge pull request #1995 from siiddhantt/fix/agent-sources
fix: agent sources and other issues
2025-10-01 10:19:47 +01:00
Alex
77f4f8d8b0 (refactor) update launch configurations and remove obsolete tasks.json 2025-10-01 10:17:52 +01:00
Alex
a2d04beaa1 (refactor) remove redundant source validation in CreateAgent 2025-10-01 10:17:26 +01:00
Siddhant Rai
ba49eea23d Refactor agent creation and update logic to improve error handling and default values; enhance logging for better traceability 2025-10-01 13:56:31 +05:30
Alex
82beafc086 Merge pull request #1991 from ManishMadan2882/tester
Tests: coverage for application/llm/* and application/llm/handlers/* ; fix on parsers/test_markdown
2025-09-30 23:19:38 +01:00
ManishMadan2882
7d8ed2d102 ruff-fix 2025-10-01 02:23:53 +05:30
ManishMadan2882
aab8d3a4f1 Merge branch 'tester' of https://github.com/manishmadan2882/docsgpt into tester 2025-10-01 01:58:52 +05:30
Alex
76658d50a0 Update HACKTOBERFEST.md 2025-09-30 21:46:09 +03:00
Alex
88ba22342c Update README with Hacktoberfest details and demo
Added Hacktoberfest information and a demo GIF.
2025-09-30 21:45:55 +03:00
Alex
11a1460af9 Add Hacktoberfest participation details to HACKTOBERFEST.md
This document outlines the participation of DocsGPT in Hacktoberfest, encouraging contributors to submit meaningful pull requests for a chance to win a T-shirt. It includes guidelines for contributions and links to resources.
2025-09-30 21:42:13 +03:00
Alex
2cd4c41316 Merge pull request #1992 from arc53/fix-api-answer-tool-call
fix: api answer tool call event
2025-09-30 14:49:57 +01:00
Alex
b910f308f2 fix: api answer tool call event 2025-09-30 14:42:54 +01:00
ManishMadan2882
763aa73ea4 (tests:llm) llms, handlers 2025-09-30 16:03:02 +05:30
Manish Madan
30c79e92d4 Merge branch 'arc53:main' into tester 2025-09-30 15:52:23 +05:30
ManishMadan2882
402d5e054b (fix:test_markdown) patch tokenizer 2025-09-30 13:35:03 +05:30
Alex
0e211df206 Merge pull request #1988 from ManishMadan2882/tester
Test coverage for parsers
2025-09-29 17:42:27 +01:00
ManishMadan2882
e24a0ac686 (test:parsers) github, reddit 2025-09-29 20:33:05 +05:30
ManishMadan2882
8c91b1c527 (tests:parsers) remote 2025-09-29 19:39:24 +05:30
ManishMadan2882
2b38f80d04 (test:files) epub, image, rst 2025-09-29 17:39:20 +05:30
ManishMadan2882
282bd35f52 (test:files) html, md, json 2025-09-29 17:23:15 +05:30
Alex
cc9b4c2bcb Merge pull request #1964 from siiddhantt/refine/mcp-tool
refactor: oauth + use fastmcp client for handling SSE and different transports in remote mcp
2025-09-26 13:54:40 +01:00
Alex
068ce4970a Merge branch 'refine/mcp-tool' of https://github.com/siiddhantt/DocsGPT into pr/1964 2025-09-26 13:42:34 +01:00
Alex
cf19165ad8 fix(lint): ruff 2025-09-26 13:42:08 +01:00
Alex
68c479f3a5 Merge branch 'main' into refine/mcp-tool 2025-09-26 13:40:12 +01:00
ManishMadan2882
ba496a772b (test) doc parsers coverage 2025-09-26 16:07:12 +05:30
Siddhant Rai
3b27db36f2 feat: Implement OAuth flow for MCP server integration
- Added MCPOAuthManager to handle OAuth authorization.
- Updated MCPServerSave resource to manage OAuth status and callback.
- Introduced new endpoints for OAuth status and callback handling.
- Enhanced user interface to support OAuth authentication type.
- Implemented polling mechanism for OAuth status in MCPServerModal.
- Updated frontend services and endpoints to accommodate new OAuth features.
- Improved error handling and user feedback for OAuth processes.
2025-09-26 02:44:08 +05:30
Alex
f803def69b Merge pull request #1976 from ManishMadan2882/main
OAuth fix for connector
2025-09-25 10:15:13 +01:00
ManishMadan2882
52065e69a4 ruff 2025-09-25 05:05:59 +05:30
ManishMadan2882
50f5e8a955 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-09-25 04:58:05 +05:30
ManishMadan2882
2d0e97b66d (feat:oauth) provider as state, not args 2025-09-25 04:55:25 +05:30
Manish Madan
5f3cc5a392 Merge branch 'arc53:main' into main 2025-09-25 03:50:50 +05:30
ManishMadan2882
ac66d77512 (fix:oauth) handle access denied 2025-09-25 03:45:12 +05:30
Alex
50cf653d4a Merge pull request #1975 from arc53/chunk-fix
fix: chunking
2025-09-24 23:05:41 +01:00
Alex
56256051d2 fix: chunking 2025-09-24 22:59:53 +01:00
ManishMadan2882
c0361ff03d (fix:oauth) user field null 2025-09-25 03:27:16 +05:30
Alex
f153435c08 Merge pull request #1974 from ManishMadan2882/tester
Test app fix
2025-09-24 10:12:29 +01:00
Alex
9aa7f22fa6 Merge pull request #1961 from NewAi25/feature-letmecheck-fix-Identica-Sub-Expression
Added fix in frontend/src/conversation/ConversationMessages.tsx line…
2025-09-24 09:35:12 +01:00
ManishMadan2882
52b7bda5f8 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt into tester 2025-09-24 02:37:20 +05:30
ManishMadan2882
21aefa2778 (fix:tests.application) attr err 2025-09-23 23:43:50 +05:30
Alex
a89ff71c9e Update README.md 2025-09-23 12:48:49 +03:00
Alex
4c275816be Merge pull request #1954 from ManishMadan2882/main
Refinements: Files uploaded via Connectors
2025-09-22 21:54:48 +01:00
ManishMadan2882
f8dfbcfc80 (docs) guide gdrive 2025-09-22 20:20:51 +05:30
ManishMadan2882
d317f6473d (feat:gdrive) upload files only 2025-09-22 20:19:56 +05:30
Siddhant Rai
00b4e133d4 feat: implement OAuth 2.1 integration with custom handlers for fastmcp 2025-09-22 01:31:09 +05:30
ManishMadan2882
b6349e4efb (fix:gdrive) no api keyneded 2025-09-20 19:55:18 +05:30
ManishMadan2882
6ca3d9585c (fix:connector) db entry 2025-09-20 19:52:12 +05:30
ManishMadan2882
5935a0283a (fix:ui)adjust 2025-09-20 19:50:58 +05:30
ManishMadan2882
5400a6ec06 (feat:googlePicker) frontend envars 2025-09-20 00:13:03 +05:30
ManishMadan2882
6574d9cc84 (feat:pickers) ux, code refactor 2025-09-20 00:04:27 +05:30
ManishMadan2882
42b83c5994 (refactor:upload) single schema with validation 2025-09-19 23:55:40 +05:30
ManishMadan2882
896612a5a3 (fix:auth) refresh drive token 2025-09-19 22:57:09 +05:30
ManishMadan2882
0ee875bee4 (fix:gdrive) missing appId in picker 2025-09-18 20:25:20 +05:30
Siddhant Rai
8ce345cd94 feat: refactor MCPTool to use FastMCP client and improve async handling, update transport and authentication configurations 2025-09-17 20:51:32 +05:30
ManishMadan2882
da2f8477e6 (feat:drive) oauth for drive.file scope, picker 2025-09-17 19:37:01 +05:30
jane
82b47b5673 Added fix in frontend/src/conversation/ConversationMessages.tsx line 213 2025-09-16 23:53:06 +05:30
jayamrutiya
7c15a4c7ff Fix: replace map with forEach to avoid ignoring return value (S2201) 2025-09-16 22:11:55 +05:30
Siddhant Rai
3369b910b4 feat: update MCP request ID generation and enhance response handling for event streams 2025-09-16 20:43:04 +05:30
ManishMadan2882
ec0c4c3b84 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-09-16 14:59:18 +05:30
ManishMadan2882
f74e2c9da1 (feat:filepciker) load inside table, ui 2025-09-16 14:50:58 +05:30
Alex
e26ad3c475 Merge pull request #1947 from siiddhantt/feat/remote-mcp
feat: remote mcp
2025-09-15 09:31:36 +01:00
ManishMadan2882
145c3b8ad0 (feat:file picker) table ui 2025-09-15 12:58:45 +05:30
Siddhant Rai
0ff6c6a154 Merge branch 'main' into feat/remote-mcp 2025-09-15 09:53:58 +05:30
Siddhant Rai
641cf5a4c1 feat: skip empty fields in mcp tool call + improve error handling and response 2025-09-11 19:04:10 +05:30
Siddhant Rai
09b9576eef feat: enhance message and schema cleaning for Google AI integration 2025-09-11 17:54:46 +05:30
ManishMadan2882
18b71ca2f2 (feat:upload) cards for upload types 2025-09-11 13:27:55 +05:30
Alex
e0eb7f456e Merge pull request #1930 from Ankit-Matth/feature/multi-select-sources
Added support for Multi select sources
2025-09-10 17:48:02 +01:00
Siddhant Rai
188d118fc0 refactor: remove unused logging import from routes.py 2025-09-10 22:14:31 +05:30
Siddhant Rai
adcdce8d76 fix: handle invalid chunks value in StreamProcessor and ClassicRAG 2025-09-10 22:10:11 +05:30
Siddhant Rai
b865a7aec1 Merge branch 'main' of https://github.com/siiddhantt/DocsGPT into pr/1930 2025-09-10 20:15:20 +05:30
ManishMadan2882
cec8c72b46 (refactor:uploads) YAGNI 2025-09-10 19:19:40 +05:30
Siddhant Rai
b052e32805 feat: enhance MCP tool configuration handling and authentication logic 2025-09-10 14:15:51 +05:30
Siddhant Rai
816f660be3 fix: enhance MCPTool request handling and tool discovery logic 2025-09-10 13:08:14 +05:30
ManishMadan2882
fc8be45d5a (feat:sync) confirmation check 2025-09-09 13:08:38 +05:30
ManishMadan2882
e749c936c9 (refactor:uploads) for new ui 2025-09-09 13:07:26 +05:30
ManishMadan2882
b2b9670a23 (feat:connectors) type as connector:file 2025-09-09 00:00:58 +05:30
Siddhant Rai
2f88890c94 feat: add support for multiple sources in agent configuration and update related components 2025-09-08 22:10:08 +05:30
ManishMadan2882
6366663f03 (refactor:uploads) separate file picker 2025-09-08 19:09:19 +05:30
Manish Madan
20fe7dc6d1 Merge branch 'main' into main 2025-09-08 14:19:32 +05:30
Alex
4b9153069e Merge pull request #1928 from Ankit-Matth/fix/ui-ux-improvements
bugfix(ui): several UI/UX updates and fixes
2025-09-05 13:54:09 +01:00
ManishMadan2882
80406d0753 (feat:drive) debounce search, ui/ux 2025-09-05 13:25:36 +05:30
ManishMadan2882
35f4c11784 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-09-05 11:43:18 +05:30
ManishMadan2882
7896526f19 (feat:load_files) search feature 2025-09-05 10:35:23 +05:30
Alex
f7db22edff Merge pull request #1937 from ManishMadan2882/main
Connectors: Google Drive Ingestion
2025-09-04 12:05:15 +01:00
Siddhant Rai
0e4196f036 fix: remove unused tool labels from localization file 2025-09-04 15:19:58 +05:30
Siddhant Rai
1bf6af6eeb feat: finalize remote mcp 2025-09-04 15:10:12 +05:30
ManishMadan2882
5a9bc6d2bf (feat:connector) infinite scroll file pick 2025-09-04 08:35:41 +05:30
ManishMadan2882
f7f6042579 (feat:connector) paginate files 2025-09-04 07:58:12 +05:30
ManishMadan2882
c4a598f3d3 (lint-fix) ruff 2025-09-03 19:29:34 +05:30
Siddhant Rai
7c23f43c63 feat: Add MCP Server management functionality
- Implemented encryption utility for securely storing sensitive credentials.
- Added MCPServerModal component for managing MCP server configurations.
- Updated AddToolModal to include MCP server management.
- Enhanced localization with new strings for MCP server features.
- Introduced SVG icons for MCP tools in the frontend.
- Created a new settings section for MCP server configurations in the application.
2025-09-03 15:41:59 +05:30
ManishMadan2882
7e2cbdd88c (feat:connector) redirect url as backend overhead 2025-09-03 09:57:13 +05:30
ManishMadan2882
3b3a04a249 (feat:connector) sync fixes UI, minor refactor 2025-09-02 20:28:23 +05:30
ManishMadan2882
f9b2c95695 (feat:connector) sync, simply re-ingest 2025-09-02 18:06:04 +05:30
ManishMadan2882
c2c18e8319 (feat:connector,fe) sync api, notification 2025-09-02 13:36:41 +05:30
ManishMadan2882
384ad3e0ac (feat:connector) raw sync flow 2025-09-02 13:34:31 +05:30
ManishMadan2882
8c986aaa7f Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-09-01 12:05:17 +05:30
ManishMadan2882
bb4ea76d30 (fix:connectorTree) path navigation fn 2025-09-01 12:04:58 +05:30
ManishMadan2882
2868e47cf8 (feat:connector) provider metadata, separate fe nested display 2025-08-29 18:05:58 +05:30
GH Action - Upstream Sync
e0adc3e5d5 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-08-29 01:36:09 +00:00
ManishMadan2882
e55d1a5865 (feat:connector,auth) consider user_id 2025-08-29 02:13:51 +05:30
ManishMadan2882
018273c6b2 (feat:connector) refactor, updated routes FE 2025-08-29 01:06:40 +05:30
Alex
44b8a11c04 Merge pull request #1936 from Ankit-Matth/feature/load-containers-from-dockerhub
Speed up scripts by loading containers from docker hub
2025-08-28 14:48:08 +01:00
Siddhant Rai
56e5aba559 fix: correct frontend image name in docker-compose configuration 2025-08-28 18:21:54 +05:30
Alex
46904ccd54 feat: add theme color meta tags for light and dark modes 2025-08-28 11:36:42 +01:00
Siddhant Rai
5b7c7a4471 fix: update Docker images in docker-compose to use 'develop' tag 2025-08-28 12:11:06 +05:30
Siddhant Rai
9da4215d1f feat: implement Docker Hub integration for building and pushing images in CI/CD workflow 2025-08-28 12:01:04 +05:30
ManishMadan2882
f39ac9945f (feat:auth) follow connector-session 2025-08-28 00:53:19 +05:30
ManishMadan2882
a0cc2e4d46 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-08-28 00:51:29 +05:30
ManishMadan2882
4065041a9f (feat:connectors) separate routes, namespace 2025-08-28 00:51:09 +05:30
GH Action - Upstream Sync
f08067a161 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-08-27 01:36:38 +00:00
Alex
545caacfa3 feat: prevent NUL character ingestion failures 2025-08-26 23:30:57 +01:00
Alex
a06f646637 feat: enhance tool call error handling 2025-08-26 22:37:21 +01:00
ManishMadan2882
578c68205a (feat:connectors) abstracting auth, base class 2025-08-26 02:46:36 +05:30
ManishMadan2882
f09f1433a9 (feat:connectors) separate layer 2025-08-26 01:38:36 +05:30
ManishMadan2882
15a9e97a1e (feat:ingest_connectors) spread config params 2025-08-26 00:56:39 +05:30
Ankit Matth
b3af4ee50b speed up scripts by using docker hub 2025-08-24 08:59:19 +05:30
Ankit Matth
07d59b6640 refactor: use list instead of string parsing 2025-08-23 20:25:29 +05:30
GH Action - Upstream Sync
e25b988dc8 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-08-23 01:35:35 +00:00
ManishMadan2882
2410bd8654 (fix:driveLoader) folder ingesting 2025-08-22 19:07:52 +05:30
Alex
44d21ab703 fix: passing sources and chunk if agent is shared 2025-08-22 13:36:31 +01:00
Alex
e283957c8f Fix source field retrieval in SharedAgent to handle DBRef correctly 2025-08-22 11:41:35 +01:00
ManishMadan2882
b1210c4902 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-08-22 13:36:52 +05:30
ManishMadan2882
e7430f0fbc (feat:googleDrive,fe) file tree 2025-08-22 13:36:32 +05:30
ManishMadan2882
92d6ae54c3 (fix:google-oauth) no explicit datetime compare 2025-08-22 13:35:03 +05:30
ManishMadan2882
f82be23ca9 (feat:ingestion) external drive connect 2025-08-22 13:33:21 +05:30
ManishMadan2882
8c3f75e3e2 (feat:ingestion) google drive loader 2025-08-22 13:32:40 +05:30
GH Action - Upstream Sync
193d59f193 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-08-22 01:38:59 +00:00
ManishMadan2882
c2bebbaefa (feat:oauth/drive) raw fe integrate 2025-08-22 03:29:57 +05:30
Alex
7ae5a9c5a5 Refactor diagramId initialization to use a combination of Date.now() and random string for uniqueness 2025-08-21 14:50:37 +01:00
ManishMadan2882
3b69bea23d (chore:settings)addefault oath creds 2025-08-21 17:02:23 +05:30
ManishMadan2882
ab05726b99 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-08-21 02:46:56 +05:30
ManishMadan2882
b2b04268e9 (feat:drive) oauth flow 2025-08-21 02:46:32 +05:30
Siddhant Rai
bd73fa9ae7 refactor: remove unused abstract method and improve retrievers 2025-08-20 22:25:31 +05:30
Alex
927d10d66e Update README.md 2025-08-17 12:44:47 +03:00
Alex
b67329623c Update README.md 2025-08-16 13:51:40 +03:00
Ankit Matth
6f47aa802b added support for multi select sources 2025-08-16 15:19:19 +05:30
Ankit Matth
3417c73011 fix(ui): resolve multiple UI/UX issues 2025-08-15 10:14:31 +05:30
Alex
6a02bcf15b Merge pull request #1873 from ManishMadan2882/main
Sources are the new Docs
2025-08-13 18:24:35 +01:00
Alex
cd0fbf79a3 Merge pull request #1924 from siiddhantt/feat/agent-schema-response
feat: add support for structured output and JSON schema validation
2025-08-13 17:33:29 +01:00
Alex
15d2d0115b Merge branch 'main' into feat/agent-schema-response 2025-08-13 17:12:26 +01:00
ManishMadan2882
d1a0fe6e91 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-08-13 17:39:59 +05:30
ManishMadan2882
1db80d140f (fix) search dropdowns 2025-08-13 17:39:39 +05:30
Siddhant Rai
896dcf1f9e feat: add support for structured output and JSON schema validation 2025-08-13 13:29:51 +05:30
GH Action - Upstream Sync
819a12fb49 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-08-13 01:45:41 +00:00
Alex
c68273706c Merge pull request #1920 from hanzalahwaheed/fix/response-bubble-btns
fix: always show the response bubble buttons.
2025-08-13 00:14:01 +01:00
Hanzalah Waheed
6bb0cd535a fix: rm redundant states. track feedback state w prop var 2025-08-13 02:36:58 +04:00
Hanzalah Waheed
cb9ec69cf6 chore: refactor code to use ternary operator for error type check 2025-08-13 02:31:25 +04:00
Hanzalah Waheed
143854fa81 fix: show both like and dislike buttons 2025-08-13 02:11:47 +04:00
ManishMadan2882
2f48a3d7d5 (feat:chunks) consistent path header 2025-08-13 02:53:32 +05:30
ManishMadan2882
ec95dafe1e (feat:sources) matching the figma 2025-08-13 01:35:23 +05:30
ManishMadan2882
3d1fe724e5 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-08-12 18:05:11 +05:30
ManishMadan2882
5c615d6f2d (feat:sources) card ui 2025-08-12 18:04:40 +05:30
GH Action - Upstream Sync
d72558eb36 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-08-12 01:43:57 +00:00
ManishMadan2882
65c33ad915 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-08-12 03:09:13 +05:30
ManishMadan2882
9be128a963 (feat:sources) closer to figma,ux 2025-08-12 03:08:47 +05:30
Hanzalah Waheed
eb05132008 fix: always show the response bubble buttons. 2025-08-12 00:16:21 +04:00
Alex
f94a093e8c fix: truncate long text fields to prevent overflow in logs and sources 2025-08-11 14:56:31 +01:00
GH Action - Upstream Sync
0d0c2daf64 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-08-09 01:44:41 +00:00
ManishMadan2882
823d948b25 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-08-08 21:59:01 +05:30
Alex
56831fbcf2 Merge pull request #1917 from ManishMadan2882/fix/agent_prompts
Fixes missing attributes on shared agents
2025-08-08 16:30:09 +01:00
ManishMadan2882
bf49b9cb88 (fix/shared_agent)missing main attr 2025-08-08 20:44:09 +05:30
GH Action - Upstream Sync
e01adffbad Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-08-08 01:54:52 +00:00
Alex
08a5d52d82 Update README.md 2025-08-07 17:20:45 +03:00
ManishMadan2882
fdae235742 (feat:sources) i18n 2025-08-07 12:53:12 +05:30
GH Action - Upstream Sync
9903fad1e9 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-08-07 01:55:18 +00:00
Alex
14bbd5338d Merge pull request #1909 from siiddhantt/main
fix: remove unnecessary parameter from fetchPreviewAnswer
2025-08-06 19:21:59 +01:00
Siddhant Rai
4a236c2f6f fix: remove unnecessary parameter from fetchPreviewAnswer 2025-08-06 22:34:06 +05:30
Alex
0a8cdbd7f1 fix: update token selector in FileTreeComponent 2025-08-06 12:44:21 +01:00
Alex
94c49843be Merge pull request #1906 from arc53/feat/pg-vector
feat: implement PGVectorStore for PostgreSQL vector storage
2025-08-06 10:42:34 +01:00
Alex
9281fac898 fix: improve error logging for index creation and add PARSE_IMAGE_REMOTE setting 2025-08-06 10:40:20 +01:00
GH Action - Upstream Sync
0b2736f454 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-08-06 01:55:04 +00:00
ManishMadan2882
ae116b0d0d (fix:agentPreview) build err 2025-08-06 02:55:39 +05:30
ManishMadan2882
ba260e3382 (fix:faiss) not save tmp dir 2025-08-06 02:53:39 +05:30
Alex
1282e7687f fix: add error handling for index creation in user and agents collections 2025-08-05 17:19:06 +01:00
Alex
b1d8266eef feat: implement PGVectorStore for PostgreSQL vector storage 2025-08-05 13:54:39 +01:00
Alex
7acae6935b Merge pull request #1905 from arc53/fix-qdrant
fix: qdrant issues
2025-08-05 12:26:24 +01:00
Alex
092c01cae7 fix: ruff lint 2025-08-05 12:22:33 +01:00
Alex
56a1066c30 fix: qdrant issues 2025-08-05 12:19:18 +01:00
ManishMadan2882
1356d71839 (lint) ruff fix 2025-08-05 15:37:39 +05:30
ManishMadan2882
1eb011e8c3 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-08-05 15:28:51 +05:30
ManishMadan2882
e349eb28b0 (fix:update_chunk) data integrity, uplod back faiss 2025-08-05 06:31:00 +05:30
ManishMadan2882
b000b235a2 (feat:sources) renamed docs,fe 2025-08-05 05:23:29 +05:30
ManishMadan2882
16fe92282e (fix:chunks) responsive, editing controls 2025-08-05 03:04:37 +05:30
ManishMadan2882
e218e88cf4 (fix:chunks) alignment and ui 2025-08-04 19:28:15 +05:30
ManishMadan2882
888ea81a32 (feat:fil_management) serialising updates, queue 2025-08-04 17:27:12 +05:30
ManishMadan2882
735fab7640 (feat:storage) sync base 2025-08-04 16:36:38 +05:30
ManishMadan2882
45745c2a47 (feat:docs) skeleton loader 2025-08-04 16:35:24 +05:30
Alex
4caff0fcf6 fix: enhance error logging for malformed request in stream route 2025-08-04 11:41:41 +01:00
Alex
762ea6ce7f Merge pull request #1866 from arc53/dependabot/npm_and_yarn/frontend/tailwindcss-4.1.11
build(deps-dev): bump tailwindcss from 4.1.10 to 4.1.11 in /frontend
2025-08-02 23:49:54 +01:00
ManishMadan2882
8b4f6553f3 (fix:menu) left and right 2025-08-02 02:08:35 +05:30
ManishMadan2882
a61e44d175 (feat:dir_tree) improvement 2025-08-02 01:48:43 +05:30
ManishMadan2882
e1b1558fc9 (feat:storage) rm dir 2025-08-02 00:54:09 +05:30
ManishMadan2882
53225bda4e (feat:reingestion) spit directories 2025-08-02 00:49:15 +05:30
ManishMadan2882
5212769848 (feat:reingest) UI, polling 2025-08-01 01:25:37 +05:30
ManishMadan2882
d5ded3c9f4 (feat:reingest) eat and spit specific chunks 2025-08-01 01:14:48 +05:30
ManishMadan2882
c92d778894 (feat:chunker) do not combine text 2025-07-31 02:13:55 +05:30
ManishMadan2882
829abd1ad6 (fix:textarea) consistent line indxs 2025-07-30 21:00:00 +05:30
ManishMadan2882
266d256a07 (feat:sources) management, simple re-ingest 2025-07-30 01:57:40 +05:30
Alex
8380cac3e7 Merge pull request #1900 from naaa760/docs/auth-type-configuration
Docs: Expand and Clarify AUTH_TYPE Configuration and Authentication Methods (#1882)
2025-07-28 23:07:40 +01:00
ManishMadan2882
a24652f901 (feat:chunks) update iff changed 2025-07-28 19:35:41 +05:30
ManishMadan2882
2d203d3c70 (fix:chunks)responsive 2025-07-28 18:01:51 +05:30
Alex
48d21600da Merge pull request #1896 from siiddhantt/feat/rework-answer-routes
feat: answer routes re-structure for better maintainability and reuse
2025-07-26 14:18:10 +01:00
ManishMadan2882
2508d0fbb3 (fix:chunks) preserve paths 2025-07-26 00:27:39 +05:30
ManishMadan2882
e90e80c289 (fix:chunks) also count tokens 2025-07-26 00:16:45 +05:30
ManishMadan2882
5e4748f9d9 (fix:faiss) rely on storage abstrct 2025-07-26 00:14:17 +05:30
Siddhant Rai
212952f3e9 fix: allow api call in stream route + get_prompt error 2025-07-25 16:17:18 +05:30
naaa760
f99b6496c5 update 2025-07-25 14:48:49 +05:30
ManishMadan2882
67423d51b9 (feat:chunks) ask to edit, ui 2025-07-25 04:05:06 +05:30
ManishMadan2882
58465ece65 (feat:chunks) server-side filter on search 2025-07-25 01:43:50 +05:30
ManishMadan2882
8ede3a0173 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-07-23 20:48:00 +05:30
ManishMadan2882
ad2f0f8950 (chore:chunks) i18n 2025-07-23 20:47:36 +05:30
Siddhant Rai
76973a4b4c feat: answer routes re-structure for better maintainability and reuse 2025-07-23 20:07:42 +05:30
GH Action - Upstream Sync
b198e2e029 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-07-23 01:52:41 +00:00
ManishMadan2882
4d6ea401b5 (feat:chunks) line numbered editor 2025-07-23 03:36:18 +05:30
ManishMadan2882
b00c4cc3b6 (feat:chunk) editing mode 2025-07-23 02:22:56 +05:30
Alex
4185e64c65 Merge pull request #1893 from arc53/fix-attachment-bugs
fix: replace secure_filename with safe_filename for attachment handling
2025-07-22 16:24:55 +01:00
ManishMadan2882
6eb2c884a2 (refactor) separation in chunks/files view 2025-07-22 19:36:52 +05:30
Alex
6c0362a4cf fix: replace secure_filename with safe_filename for attachment handling 2025-07-22 12:56:17 +01:00
ManishMadan2882
50b1755a63 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-07-21 16:31:57 +05:30
ManishMadan2882
ff3c7eb5fb (fix:delete_old) comply with storage abtrctn 2025-07-21 16:31:42 +05:30
ManishMadan2882
3755316d49 (fix:chunks) responsive design 2025-07-21 16:30:30 +05:30
GH Action - Upstream Sync
f952046847 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-07-19 01:47:09 +00:00
Alex
969cdb4a63 Merge pull request #1890 from siiddhantt/feat/enhance-agents
feat: enhance prompt selection in new agents
2025-07-18 13:07:45 +01:00
ManishMadan2882
f336d44595 (feat:chunks) search in dir 2025-07-18 15:03:23 +05:30
Siddhant Rai
a53f93c195 feat: enhance dropdown component and prompts integration 2025-07-18 14:02:29 +05:30
GH Action - Upstream Sync
fcb334ce33 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-07-17 01:50:59 +00:00
ManishMadan2882
8ddf04a904 (feat:chunks) use common header, navigate 2025-07-17 03:08:01 +05:30
ManishMadan2882
29698ca169 (feat:chunks) redesigned 2025-07-17 02:16:40 +05:30
ManishMadan2882
a9baf7436a Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-07-17 01:05:59 +05:30
ManishMadan2882
99a8962183 (fix/docs) menu event capture 2025-07-17 01:05:24 +05:30
Alex
afc5b15a6b Merge pull request #1887 from Krrish0902/fix-issue-1854
fix: Removed incorrect www from URL in DocsGPT Docs frontend (#1854)
2025-07-16 13:20:05 +01:00
GH Action - Upstream Sync
b6ab508e27 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-07-16 01:50:25 +00:00
ananthakrishnan
789e65557a fix: Removed incorrect www from URL in DocsGPT Docs frontend (#1854) 2025-07-15 22:02:02 +05:30
ManishMadan2882
8a7806ab2d (feat:nested source view) file tree, chunks display 2025-07-15 19:15:40 +05:30
Alex
493303e103 Merge pull request #1886 from arc53/copilot/fix-1878
🐛 Fix conversation summary prompt to use user query language
2025-07-15 12:57:14 +01:00
ManishMadan2882
1d9af05e9e (feat:storage) is dir fnc 2025-07-15 15:34:16 +05:30
ManishMadan2882
5b07c5f2e8 (feat:ingestion) unzip, extract and store 2025-07-15 15:31:26 +05:30
copilot-swe-agent[bot]
2a4ec0cf5b Fix conversation summary prompt to use user query language
Co-authored-by: dartpain <15183589+dartpain@users.noreply.github.com>
2025-07-15 09:33:52 +00:00
copilot-swe-agent[bot]
a00c44386e Initial plan 2025-07-15 09:29:22 +00:00
ManishMadan2882
a38d71bbfb (feat:get_chunks) filtered by relative path 2025-07-15 13:38:19 +05:30
ManishMadan2882
a24a3f868c (feat:dir-structure) adding route 2025-07-15 13:38:19 +05:30
ManishMadan2882
f60c516185 (feat:dir_tree) table with folder contents 2025-07-15 13:38:19 +05:30
Manish Madan
26f4646304 Merge branch 'arc53:main' into main 2025-07-14 23:02:36 +05:30
ananthakrishnan
3a351f67e6 fix: correct agent tools name when creating new agent (#1877) 2025-07-14 20:20:55 +05:30
dependabot[bot]
e7c09cb91e build(deps-dev): bump tailwindcss from 4.1.10 to 4.1.11 in /frontend
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 4.1.10 to 4.1.11.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.11/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-version: 4.1.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-14 09:02:48 +00:00
Alex
ae1a6ef303 Merge pull request #1883 from siiddhantt/feat/agent-validation-enhance
feat: improve interactivity of publishing/drafting of agents
2025-07-14 09:58:12 +01:00
Siddhant Rai
2ff477a339 feat(agent): enhance validation for agent creation by checking required and invalid fields 2025-07-14 12:53:09 +05:30
Siddhant Rai
793f3fb683 refactor(NewAgent): remove debug logs 2025-07-12 12:36:18 +05:30
Siddhant Rai
a472ee7602 feat: add validation for required fields and improve agent creation logic 2025-07-12 12:30:00 +05:30
GH Action - Upstream Sync
c62040e232 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-07-11 01:49:09 +00:00
Alex
2e7cb510ae Update README.md 2025-07-10 17:27:08 +03:00
Alex
dbe45904d7 Merge pull request #1881 from siiddhantt/fix/glacier-images
fix: s3 storage class for image upload
2025-07-10 12:00:55 +01:00
Siddhant Rai
5623734276 feat(storage): enhance save_file method to accept storage class parameter 2025-07-10 15:34:52 +05:30
ManishMadan2882
d3b592bffc Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-07-09 01:29:59 +05:30
ManishMadan2882
4fcbdae5bf (feat:docs) cards UI 2025-07-08 02:46:34 +05:30
ManishMadan2882
ca95d7275a (feat:dateTimeUtils) localise weekday format 2025-07-08 02:32:18 +05:30
Manish Madan
61baf3701c Merge branch 'arc53:main' into main 2025-07-04 02:26:24 +05:30
ManishMadan2882
bbce872ac5 (fix:chunker) combine metadata as well 2025-07-04 02:19:58 +05:30
ManishMadan2882
0f7ebcd8e4 (feat:dir-reader) store mime types, file size in db 2025-07-03 18:09:19 +05:30
ManishMadan2882
82fc19e7b7 (fix:dir-reader) conflict of same filename in dir 2025-07-03 17:28:12 +05:30
Alex
839a12bed4 Merge pull request #1869 from siiddhantt/refactor/tools-dict
refactor: update user tools dict to use enumeration based key
2025-07-03 12:51:33 +09:00
ManishMadan2882
2ef23fe1b3 (feat:dir-reader) maintain dir structure in db 2025-07-03 01:24:22 +05:30
ManishMadan2882
fd905b1a06 (feat:dir-reader) save tokens with filenames 2025-07-02 16:30:29 +05:30
Siddhant Rai
1372210004 refactor: update user tools dict to use enumeration based key 2025-07-02 10:37:32 +05:30
ManishMadan2882
ade704d065 (refactor:ingestion) pass file path once 2025-07-01 04:00:57 +05:30
Alex
42f48649b9 Merge pull request #1843 from arc53/dependabot/npm_and_yarn/frontend/tailwindcss-4.1.10
build(deps-dev): bump tailwindcss from 3.4.17 to 4.1.10 in /frontend
2025-06-28 13:22:47 +09:00
ManishMadan2882
0b08e8b617 (fix:nav) settings gear dimesions 2025-06-27 22:16:01 +05:30
ManishMadan2882
926b2f1a1b clean 2025-06-25 19:03:24 +05:30
ManishMadan2882
1770a1a45f Merge branch 'main' of https://github.com/arc53/DocsGPT into dependabot/npm_and_yarn/frontend/tailwindcss-4.1.10 2025-06-25 18:59:51 +05:30
ManishMadan2882
50ed2a64c6 (fix/ddropdown) use complete classNames, interpolation 2025-06-25 18:26:33 +05:30
Alex
2332344988 Merge pull request #1861 from arc53/docs-agents-update
Agent docs upd
2025-06-25 09:23:09 +01:00
Alex
7ccc8cdc58 Merge pull request #1855 from siiddhantt/refactor/ddg-brave-tools
refactor: ddg and brave tools with sources fix
2025-06-25 09:21:38 +01:00
ManishMadan2882
ecec9f913e (fix:messageInput) modern tailwind syntx 2025-06-25 02:15:03 +05:30
ManishMadan2882
777f40fc5e (fix:conflicting global css) layered styles 2025-06-25 01:11:39 +05:30
Pavel
327ae35420 Agent docs upd
1. Added a page about interacting with agent API.
2. Added a page about interacting with agent webhooks.
3. Fixed small bug with /api/answer
2025-06-24 16:48:12 +02:00
Siddhant Rai
0d48159da8 feat: enhance modal functionality with reset and confirmation handlers 2025-06-24 02:14:15 +05:30
Siddhant Rai
d36f12a4ea feat: add DuckDuckGo icon and remove sources skeleton 2025-06-24 02:11:58 +05:30
Siddhant Rai
709488beb1 fix: sources not getting set on stream end 2025-06-23 09:23:18 +05:30
Siddhant Rai
a9e4583695 refactor: use DuckDuckGo and Brave as tools instead of retrievers 2025-06-23 09:22:17 +05:30
ManishMadan2882
4702dec933 (chore:tailwindcss) via upgrade tool 2025-06-22 18:31:26 +05:30
ManishMadan2882
e6352dd691 Revert "build(deps-dev): bump tailwindcss from 3.4.17 to 4.1.10 in /frontend"
This reverts commit 240ea3b857.
2025-06-22 18:16:41 +05:30
dependabot[bot]
240ea3b857 build(deps-dev): bump tailwindcss from 3.4.17 to 4.1.10 in /frontend
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 3.4.17 to 4.1.10.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.10/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-version: 4.1.10
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-22 12:08:36 +00:00
Alex
f0908af3c0 Merge pull request #1829 from arc53/dependabot/npm_and_yarn/frontend/multi-d4a34be08c
build(deps): bump react and @types/react in /frontend
2025-06-22 12:07:44 +01:00
ManishMadan2882
6834961dd1 (fix:types) stricter in v19 2025-06-20 23:11:53 +05:30
Alex
b404162364 fix: fallback to OpenAILLMHandler when no handler class is found 2025-06-20 16:08:40 +01:00
Alex
e879ef805f Merge pull request #1851 from ManishMadan2882/main
Fixed conflict while switching conversations, separated concerns
2025-06-20 13:07:24 +01:00
ManishMadan2882
7077ca5e98 (chore/upgrade) migrate to react v19 2025-06-20 17:36:28 +05:30
GH Action - Upstream Sync
a1e6978c8f Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-06-20 01:44:14 +00:00
Alex
584391dd59 Update README.md 2025-06-19 17:34:19 +03:00
dependabot[bot]
bab3ae809c build(deps): bump react and @types/react in /frontend
Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) and [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react). These dependencies needed to be updated together.

Updates `react` from 18.3.1 to 19.1.0
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.1.0/packages/react)

Updates `@types/react` from 18.3.23 to 19.1.6
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: react
  dependency-version: 19.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
- dependency-name: "@types/react"
  dependency-version: 19.1.6
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-19 11:02:29 +00:00
Manish Madan
c78518baf0 Merge pull request #1827 from arc53/dependabot/npm_and_yarn/frontend/react-dropzone-14.3.8
build(deps): bump react-dropzone from 14.3.5 to 14.3.8 in /frontend
2025-06-19 16:31:06 +05:30
dependabot[bot]
556d7e0497 build(deps): bump react-dropzone from 14.3.5 to 14.3.8 in /frontend
Bumps [react-dropzone](https://github.com/react-dropzone/react-dropzone) from 14.3.5 to 14.3.8.
- [Release notes](https://github.com/react-dropzone/react-dropzone/releases)
- [Commits](https://github.com/react-dropzone/react-dropzone/compare/v14.3.5...v14.3.8)

---
updated-dependencies:
- dependency-name: react-dropzone
  dependency-version: 14.3.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-19 10:59:31 +00:00
Manish Madan
2d27936dab Merge pull request #1826 from arc53/dependabot/npm_and_yarn/frontend/reduxjs/toolkit-2.8.2
build(deps): bump @reduxjs/toolkit from 2.5.1 to 2.8.2 in /frontend
2025-06-19 16:27:30 +05:30
GH Action - Upstream Sync
0cc22de545 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-06-19 01:45:04 +00:00
Alex
63f6127049 Revert "Update README.md"
This reverts commit 55f60a9fe1.
2025-06-18 22:26:38 +01:00
Alex
f34e00c986 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-06-18 22:26:19 +01:00
Alex
55f60a9fe1 Update README.md 2025-06-18 22:26:11 +01:00
Alex
7da3618e0c Update README.md 2025-06-18 22:25:47 +01:00
Alex
56bfa98633 Merge remote-tracking branch 'upstream/main' 2025-06-18 22:18:06 +01:00
Alex
96f6188722 Initial commit 2025-06-18 22:17:23 +01:00
Manish Madan
aa9d359039 Merge branch 'arc53:main' into main 2025-06-19 02:20:08 +05:30
ManishMadan2882
cef5731028 (feat:nav) shut sidebar on click outside 2025-06-19 02:19:29 +05:30
ManishMadan2882
5bc28bd4fd (fix:prompts) show delete only when possible 2025-06-19 02:18:20 +05:30
ManishMadan2882
55a1d867c3 (refactor/converstationSlice) separate preview 2025-06-19 02:16:03 +05:30
Alex
6c3a79802e Merge pull request #1849 from siiddhantt/feat/upload-agent-logo
feat: enhance agent management with image upload and retrieval
2025-06-18 17:45:51 +01:00
Siddhant Rai
c35c5e0793 Refactor image upload handling and add URL strategy setting 2025-06-18 21:54:44 +05:30
ManishMadan2882
7bc83caa99 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-06-18 19:42:16 +05:30
ManishMadan2882
3aceca63c6 (fix/bubble) evenly padded 2025-06-18 19:41:52 +05:30
ManishMadan2882
9bc166ffd4 (fix:convSlice) append to right conv id 2025-06-18 19:41:20 +05:30
Siddhant Rai
fc01b90007 Add tailwind-merge dependency to package.json and package-lock.json 2025-06-18 19:00:59 +05:30
Siddhant Rai
e35f1d70e4 - Added image upload functionality for agents in the backend and frontend.
- Implemented image URL generation based on storage strategy (S3 or local).
- Updated agent creation and update endpoints to handle image files.
- Enhanced frontend components to display agent images with fallbacks.
- New API endpoint to serve images from storage.
- Refactored API client to support FormData for file uploads.
- Improved error handling and logging for image processing.
2025-06-18 18:17:20 +05:30
Siddhant Rai
cab1f3787a Refactor S3 storage implementation and enhance file handling
- Improved code readability by reorganizing imports and formatting.
- Updated S3Storage class to handle file uploads and downloads more efficiently.
- Added a new function to generate image URLs based on settings.
- Enhanced file listing and processing methods for better error handling.
- Introduced a FileUpload component for improved file upload experience in the frontend.
- Updated agent management components to support image uploads and previews.
- Added new SVG assets for UI enhancements.
- Modified API client to support FormData for file uploads.
2025-06-18 18:04:44 +05:30
Alex
bb42f4cbc1 Merge pull request #1846 from ManishMadan2882/main
Agents Details: UI update, external links
2025-06-17 14:31:16 +01:00
ManishMadan2882
98dc418a51 (feat:agent-details) redirect on url 2025-06-17 18:30:11 +05:30
ManishMadan2882
322b4eb18c Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-06-17 16:04:33 +05:30
ManishMadan2882
7f1cc30ed8 (feat:agent-details) test, learn more redirects 2025-06-17 16:04:08 +05:30
ManishMadan2882
7b45a6b956 (feat:agentDetails) copy button ui 2025-06-17 12:03:36 +05:30
Alex
e36769e70f Merge pull request #1844 from ManishMadan2882/main
Collapsible Question bubbles
2025-06-15 16:36:37 +01:00
ManishMadan2882
bd4a4cc4af (feat:question) match design 2025-06-14 02:32:59 +05:30
ManishMadan2882
8343fe63cb (feat:bubble) collapsable questions 2025-06-14 02:02:36 +05:30
Alex
7d89fb8461 fix: lint 2025-06-13 01:14:09 +01:00
Alex
098955d230 fix paths in docker compose 2025-06-13 01:11:22 +01:00
Alex
d254d14928 Merge pull request #1838 from ManishMadan2882/main
Fixes ingestion of file with non-ascii characters in name
2025-06-12 09:52:03 +01:00
GH Action - Upstream Sync
0a3e8ca535 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-06-12 01:43:21 +00:00
ManishMadan2882
b8a10e0962 (fix:ingestion) display names are separate 2025-06-12 00:57:46 +05:30
Alex
0aceda96e4 Merge pull request #1824 from siiddhantt/refactor/llm-handler
feat: reorganize LLM handler structure with better abstraction
2025-06-11 17:19:50 +01:00
ManishMadan2882
44b6ec25a2 clean 2025-06-11 21:18:37 +05:30
ManishMadan2882
1b84d1fa9d Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-06-11 21:04:57 +05:30
ManishMadan2882
78d5ed2ed2 (fix:ingestion) uuid for non-ascii filename 2025-06-11 21:04:50 +05:30
ManishMadan2882
142477ab9b (feat:safe_filename) handles case of non-ascii char 2025-06-11 21:03:38 +05:30
Siddhant Rai
b414f79bc5 fix: adjust width of tool calls display in ConversationBubble component 2025-06-11 19:37:32 +05:30
Siddhant Rai
6e08fe21d0 Merge branch 'refactor/llm-handler' of https://github.com/siiddhantt/DocsGPT into refactor/llm-handler 2025-06-11 19:28:47 +05:30
Siddhant Rai
9b839655a7 refactor: improve tool call result handling and display in conversation components 2025-06-11 19:28:15 +05:30
Siddhant Rai
3353c0ee1d Merge branch 'main' into refactor/llm-handler 2025-06-11 19:27:33 +05:30
Alex
aaecf52c99 refactor: update docs LLM_NAME and MODEL_NAME to LLM_PROVIDER and LLM_NAME 2025-06-11 12:30:34 +01:00
ManishMadan2882
8b3e960be0 (feat:ingestion) store filepath from now 2025-06-11 16:00:09 +05:30
Siddhant Rai
3351f71813 refactor: tool calls sent when pending and after completion 2025-06-11 12:40:32 +05:30
Alex
7490256303 Merge pull request #1830 from ManishMadan2882/main
UI update: attachments in question bubble
2025-06-10 14:46:05 +01:00
ManishMadan2882
041d600e45 (feat:prompts) delete after confirmation 2025-06-10 18:00:11 +05:30
ManishMadan2882
b4e2588a24 (fix:prompts) save when content changes 2025-06-10 17:02:24 +05:30
ManishMadan2882
68dc14c5a1 (feat:attachments) clear after passing 2025-06-10 02:50:07 +05:30
ManishMadan2882
ef35864e16 (fix) type error, ui adjust 2025-06-09 19:50:07 +05:30
ManishMadan2882
c0d385b983 (refactor:attachments) moved to new uploadSlice 2025-06-09 17:10:12 +05:30
ManishMadan2882
b2df431fa4 (feat:attachments) shared conversations route 2025-06-07 20:04:33 +05:30
ManishMadan2882
69a4bd415a (feat:attachment) message input update 2025-06-06 21:52:51 +05:30
ManishMadan2882
4862548e65 (feat:attach) renaming, semantic identifier names 2025-06-06 21:52:10 +05:30
ManishMadan2882
50248cc9ea Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-06-06 18:55:11 +05:30
ManishMadan2882
430822bae3 (feat:attach)state manage, follow camelCase 2025-06-06 18:54:50 +05:30
Siddhant Rai
dd9d18208d Merge branch 'main' into refactor/llm-handler 2025-06-06 17:36:31 +05:30
Siddhant Rai
e5b1a71659 refactor: update fallback LLM initialization to use factory method 2025-06-06 17:23:27 +05:30
Siddhant Rai
35f4b13237 refactor: add fallback LLM configuration options to settings 2025-06-06 17:05:15 +05:30
Siddhant Rai
5f5c31cd5b refactor: enhance LLM fallback handling and streamline method execution 2025-06-06 16:55:57 +05:30
Siddhant Rai
e9530d5ec5 refactor: update env variable names 2025-06-06 15:29:53 +05:30
Siddhant Rai
143f4aa886 refactor: streamline conversation handling and update agent pinning logic 2025-06-06 14:41:44 +05:30
GH Action - Upstream Sync
ece5c8bb31 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-06-06 01:42:12 +00:00
Alex
31baf181a3 fix: default optimisations 2025-06-05 12:21:40 +01:00
ManishMadan2882
3bae30c70c (fix:messages) attachments are for questions 2025-06-05 03:09:37 +05:30
ManishMadan2882
12b18c6bd1 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-06-05 02:54:51 +05:30
ManishMadan2882
787d9e3bf5 (feat:attachments) ui details in bubble 2025-06-05 02:54:36 +05:30
ManishMadan2882
f325b54895 (fix:get_single_conversation) return attachments with filename 2025-06-05 02:53:43 +05:30
GH Action - Upstream Sync
c5616705b0 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-06-04 01:43:58 +00:00
Alex
c0f693d35d remove abount 2025-06-03 15:40:16 +01:00
Alex
52a5f132c1 Merge pull request #1814 from siiddhantt/fix/agents-bugs
fix: shared agent redirect and pinned agents error
2025-06-03 15:37:20 +01:00
Siddhant Rai
f14eac6d10 Merge branch 'main' into fix/agents-bugs 2025-06-03 19:59:10 +05:30
ManishMadan2882
e90fe117ec (feat:attachments) render in bubble 2025-06-03 18:05:47 +05:30
Siddhant Rai
381d737d24 fix: correct vectorstore path in get_vectorstore function 2025-06-03 15:14:00 +05:30
ManishMadan2882
7cab5b3b09 (feat:attachments) store filenames in worker 2025-06-03 04:02:41 +05:30
ManishMadan2882
9f911cb5cb (feat:stream) store attachment_ids for query 2025-06-03 03:30:06 +05:30
dependabot[bot]
3da7cba06c build(deps): bump @reduxjs/toolkit from 2.5.1 to 2.8.2 in /frontend
Bumps [@reduxjs/toolkit](https://github.com/reduxjs/redux-toolkit) from 2.5.1 to 2.8.2.
- [Release notes](https://github.com/reduxjs/redux-toolkit/releases)
- [Commits](https://github.com/reduxjs/redux-toolkit/compare/v2.5.1...v2.8.2)

---
updated-dependencies:
- dependency-name: "@reduxjs/toolkit"
  dependency-version: 2.8.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 20:27:20 +00:00
Alex
b47af9600f Merge pull request #1821 from ManishMadan2882/main
Chore: Frontend refinements, i18n sync
2025-06-02 10:13:02 +01:00
Siddhant Rai
92c3c707e1 refactor: reorganize LLM handler structure and improve tool call parsing 2025-06-02 12:17:29 +05:30
GH Action - Upstream Sync
5acc54e609 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-06-01 01:58:40 +00:00
Manish Madan
9c6352dd5b Merge pull request #1823 from arc53/dependabot/npm_and_yarn/docs/next-15.3.3
build(deps): bump next from 14.2.26 to 15.3.3 in /docs
2025-05-31 16:08:57 +05:30
GH Action - Upstream Sync
8e29a07df5 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-05-31 01:39:33 +00:00
Manish Madan
bd88cd3a06 Merge pull request #1818 from arc53/dependabot/npm_and_yarn/frontend/eslint-config-prettier-10.1.5
build(deps-dev): bump eslint-config-prettier from 9.1.0 to 10.1.5 in /frontend
2025-05-31 02:58:41 +05:30
dependabot[bot]
f371b9702f build(deps-dev): bump eslint-config-prettier in /frontend
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 9.1.0 to 10.1.5.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v9.1.0...v10.1.5)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-version: 10.1.5
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-30 21:25:20 +00:00
Manish Madan
3ff4ae29af Merge pull request #1817 from arc53/dependabot/npm_and_yarn/frontend/eslint-plugin-react-7.37.5
build(deps-dev): bump eslint-plugin-react from 7.37.3 to 7.37.5 in /frontend
2025-05-31 02:53:20 +05:30
dependabot[bot]
eae0f2e7a9 build(deps-dev): bump eslint-plugin-react in /frontend
Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.37.3 to 7.37.5.
- [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases)
- [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.37.3...v7.37.5)

---
updated-dependencies:
- dependency-name: eslint-plugin-react
  dependency-version: 7.37.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-30 21:18:03 +00:00
Manish Madan
305a98bb79 Merge pull request #1815 from arc53/dependabot/npm_and_yarn/frontend/react-syntax-highlighter-15.6.1
build(deps): bump react-syntax-highlighter from 15.5.0 to 15.6.1 in /frontend
2025-05-31 02:46:15 +05:30
dependabot[bot]
8040a3ed60 build(deps): bump react-syntax-highlighter in /frontend
Bumps [react-syntax-highlighter](https://github.com/react-syntax-highlighter/react-syntax-highlighter) from 15.5.0 to 15.6.1.
- [Release notes](https://github.com/react-syntax-highlighter/react-syntax-highlighter/releases)
- [Changelog](https://github.com/react-syntax-highlighter/react-syntax-highlighter/blob/master/CHANGELOG.MD)
- [Commits](https://github.com/react-syntax-highlighter/react-syntax-highlighter/compare/15.5.0...v15.6.1)

---
updated-dependencies:
- dependency-name: react-syntax-highlighter
  dependency-version: 15.6.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-30 21:11:29 +00:00
dependabot[bot]
bb9de7d9b0 build(deps): bump next from 14.2.26 to 15.3.3 in /docs
Bumps [next](https://github.com/vercel/next.js) from 14.2.26 to 15.3.3.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v14.2.26...v15.3.3)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 15.3.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-30 21:10:55 +00:00
Manish Madan
d8e8bc0068 Merge pull request #1765 from arc53/dependabot/npm_and_yarn/frontend/vite-6.3.5
build(deps-dev): bump vite from 5.4.14 to 6.3.5 in /frontend
2025-05-31 02:39:41 +05:30
ManishMadan2882
6577e9d852 (chore) peer deps 2025-05-31 02:37:27 +05:30
dependabot[bot]
3f8625c65a build(deps-dev): bump vite from 5.4.14 to 6.3.5 in /frontend
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.14 to 6.3.5.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.3.5/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.5
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-30 20:08:19 +00:00
ManishMadan2882
92d69636a7 (fix/ui) minor adjustments 2025-05-30 19:33:07 +05:30
ManishMadan2882
9c28817fba (chore:i18n) sync all locales 2025-05-30 19:05:01 +05:30
Siddhant Rai
773788fb32 fix: correct vectorstore path and improve file existence checks in FaissStore 2025-05-30 14:30:51 +05:30
Siddhant Rai
a393ad8e04 refactor: standardize string quotes and improve retriever type handling in RetrieverCreator 2025-05-30 12:50:11 +05:30
ManishMadan2882
71d3714347 (fix:nav) tablets behave like mobile, use tailwind breakpoints 2025-05-29 17:17:29 +05:30
ManishMadan2882
b7e1329c13 (feat:chunksModal) i18n, use wrapperModal 2025-05-29 17:15:13 +05:30
ManishMadan2882
59e6d9d10e Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-05-29 15:47:42 +05:30
ManishMadan2882
46efb446fb (clean:about) purge route 2025-05-29 15:43:58 +05:30
ManishMadan2882
d31e3a54fd (feat:layout) tablet sidebar behave like mobile 2025-05-29 15:43:00 +05:30
Siddhant Rai
c4e471ac47 fix: ensure shared metadata is displayed only when available in SharedAgentCard 2025-05-29 11:16:38 +05:30
Siddhant Rai
3b8733e085 feat: add tool details resolution and update SharedAgentCard to display tool names 2025-05-29 10:58:49 +05:30
Alex
a7c67d83ca Merge pull request #1820 from ManishMadan2882/main
Chore:  Frontend Refinements
2025-05-29 00:53:59 +01:00
ManishMadan2882
8abc1de26d (feat:hooks) update useMediaQuery 2025-05-29 04:01:47 +05:30
ManishMadan2882
2ca9f708a6 (fix:menu) position smartly 2025-05-29 04:00:25 +05:30
ManishMadan2882
f8f369fbb2 (fix/tools) avoid max width for buttons, i18n 2025-05-29 03:58:34 +05:30
ManishMadan2882
3e9155767b (fix:input) placeholder overflow 2025-05-29 03:57:11 +05:30
Siddhant Rai
8cd4195657 feat: add SharedAgentCard to display selected agent in Conversation component 2025-05-28 14:25:37 +05:30
Siddhant Rai
ad1a944276 refactor: agents sharing and shared with me logic 2025-05-28 13:58:55 +05:30
ManishMadan2882
02ff4c5657 (fix:menu) larger strings break 2025-05-28 03:29:48 +05:30
ManishMadan2882
b1b27f2dde (feat:toolConfig) i18n 2025-05-28 01:10:10 +05:30
ManishMadan2882
5097f77469 (feat:toolConfig) ui details, no actions placeholder 2025-05-27 19:02:41 +05:30
Manish Madan
7e826d5002 Merge pull request #1778 from arc53/dependabot/npm_and_yarn/docs/multi-61ed51ac21
build(deps): bump estree-util-value-to-estree and remark-reading-time in /docs
2025-05-27 16:37:32 +05:30
dependabot[bot]
fe8143a56c build(deps): bump estree-util-value-to-estree and remark-reading-time
Bumps [estree-util-value-to-estree](https://github.com/remcohaszing/estree-util-value-to-estree) and [remark-reading-time](https://github.com/mattjennings/remark-reading-time). These dependencies needed to be updated together.

Updates `estree-util-value-to-estree` from 1.3.0 to 3.4.0
- [Release notes](https://github.com/remcohaszing/estree-util-value-to-estree/releases)
- [Commits](https://github.com/remcohaszing/estree-util-value-to-estree/compare/v1.3.0...v3.4.0)

Updates `remark-reading-time` from 2.0.1 to 2.0.2
- [Release notes](https://github.com/mattjennings/remark-reading-time/releases)
- [Commits](https://github.com/mattjennings/remark-reading-time/compare/2.0.1...2.0.2)

---
updated-dependencies:
- dependency-name: estree-util-value-to-estree
  dependency-version: 3.4.0
  dependency-type: indirect
- dependency-name: remark-reading-time
  dependency-version: 2.0.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 11:04:37 +00:00
Manish Madan
e5442a713a Merge pull request #1760 from arc53/dependabot/npm_and_yarn/extensions/react-widget/base-x-3.0.11
build(deps-dev): bump base-x from 3.0.9 to 3.0.11 in /extensions/react-widget
2025-05-27 16:32:38 +05:30
dependabot[bot]
1982a46f36 build(deps-dev): bump base-x in /extensions/react-widget
Bumps [base-x](https://github.com/cryptocoinjs/base-x) from 3.0.9 to 3.0.11.
- [Commits](https://github.com/cryptocoinjs/base-x/compare/v3.0.9...v3.0.11)

---
updated-dependencies:
- dependency-name: base-x
  dependency-version: 3.0.11
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 11:02:07 +00:00
Manish Madan
c8c3640baf Merge pull request #1743 from arc53/dependabot/npm_and_yarn/frontend/vite-5.4.18
build(deps-dev): bump vite from 5.4.14 to 5.4.18 in /frontend
2025-05-27 15:52:41 +05:30
dependabot[bot]
fdf47b3f2c build(deps-dev): bump vite from 5.4.14 to 5.4.18 in /frontend
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.14 to 5.4.18.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.18/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.18/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 5.4.18
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 10:18:54 +00:00
Manish Madan
93fa4b6a37 Merge pull request #1756 from arc53/dependabot/npm_and_yarn/frontend/multi-08a24af093
build(deps): bump react-router and react-router-dom in /frontend
2025-05-27 15:43:27 +05:30
dependabot[bot]
90e9ab70b0 build(deps): bump react-router and react-router-dom in /frontend
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) to 7.5.3 and updates ancestor dependency [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom). These dependencies need to be updated together.


Updates `react-router` from 7.1.1 to 7.5.3
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.5.3/packages/react-router)

Updates `react-router-dom` from 7.1.1 to 7.5.3
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.5.3/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 7.5.3
  dependency-type: indirect
- dependency-name: react-router-dom
  dependency-version: 7.5.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 10:10:25 +00:00
Manish Madan
573c2386b7 Merge pull request #1736 from arc53/dependabot/npm_and_yarn/frontend/typescript-5.8.3
build(deps-dev): bump typescript from 5.7.2 to 5.8.3 in /frontend
2025-05-27 15:37:53 +05:30
dependabot[bot]
d2176aeeb9 build(deps-dev): bump typescript from 5.7.2 to 5.8.3 in /frontend
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.7.2 to 5.8.3.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml)
- [Commits](https://github.com/microsoft/TypeScript/commits)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 5.8.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 10:04:27 +00:00
Manish Madan
920aec5c3e Merge pull request #1706 from arc53/dependabot/npm_and_yarn/docs/babel/runtime-7.26.10
build(deps): bump @babel/runtime from 7.23.7 to 7.26.10 in /docs
2025-05-27 15:31:39 +05:30
dependabot[bot]
b792c5459a build(deps): bump @babel/runtime from 7.23.7 to 7.26.10 in /docs
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.23.7 to 7.26.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 10:00:19 +00:00
Manish Madan
87fbf05fa1 Merge pull request #1707 from arc53/dependabot/npm_and_yarn/extensions/react-widget/babel/helpers-7.26.10
build(deps): bump @babel/helpers from 7.24.6 to 7.26.10 in /extensions/react-widget
2025-05-27 15:28:08 +05:30
dependabot[bot]
67c53250c5 build(deps): bump @babel/helpers in /extensions/react-widget
Bumps [@babel/helpers](https://github.com/babel/babel/tree/HEAD/packages/babel-helpers) from 7.24.6 to 7.26.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-helpers)

---
updated-dependencies:
- dependency-name: "@babel/helpers"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 09:55:00 +00:00
Manish Madan
d657eea910 Merge pull request #1705 from arc53/dependabot/npm_and_yarn/docs/babel/helpers-7.26.10
build(deps): bump @babel/helpers from 7.24.0 to 7.26.10 in /docs
2025-05-27 15:23:01 +05:30
dependabot[bot]
b5fbb825ed build(deps): bump @babel/helpers from 7.24.0 to 7.26.10 in /docs
Bumps [@babel/helpers](https://github.com/babel/babel/tree/HEAD/packages/babel-helpers) from 7.24.0 to 7.26.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-helpers)

---
updated-dependencies:
- dependency-name: "@babel/helpers"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 09:51:46 +00:00
Manish Madan
d094e7a4c6 Merge pull request #1704 from arc53/dependabot/npm_and_yarn/frontend/babel/runtime-7.26.10
build(deps): bump @babel/runtime from 7.25.0 to 7.26.10 in /frontend
2025-05-27 15:19:39 +05:30
dependabot[bot]
945c155b17 build(deps): bump @babel/runtime from 7.25.0 to 7.26.10 in /frontend
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.25.0 to 7.26.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 09:44:53 +00:00
Manish Madan
f798072a1e Merge pull request #1632 from arc53/dependabot/npm_and_yarn/extensions/react-widget/dompurify-3.2.4
build(deps): bump dompurify from 3.1.5 to 3.2.4 in /extensions/react-widget
2025-05-27 15:04:39 +05:30
Manish Madan
f967214b57 Merge pull request #1524 from arc53/dependabot/npm_and_yarn/frontend/react-redux-9.2.0
build(deps): bump react-redux from 8.1.3 to 9.2.0 in /frontend
2025-05-27 15:03:56 +05:30
dependabot[bot]
d0b92e2540 build(deps): bump react-redux from 8.1.3 to 9.2.0 in /frontend
Bumps [react-redux](https://github.com/reduxjs/react-redux) from 8.1.3 to 9.2.0.
- [Release notes](https://github.com/reduxjs/react-redux/releases)
- [Changelog](https://github.com/reduxjs/react-redux/blob/master/CHANGELOG.md)
- [Commits](https://github.com/reduxjs/react-redux/compare/v8.1.3...v9.2.0)

---
updated-dependencies:
- dependency-name: react-redux
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 09:25:20 +00:00
dependabot[bot]
8ddfe272bf build(deps): bump dompurify in /extensions/react-widget
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.1.5 to 3.2.4.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/3.1.5...3.2.4)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 09:20:40 +00:00
Siddhant Rai
b7a6bad7cd fix: minor bugs and route errors 2025-05-27 13:50:13 +05:30
Alex
e2f6c04406 (fix:AgentDetailsModal) update shared token URL format in AgentDetailsModal 2025-05-24 00:12:31 +01:00
Alex
c662725955 Merge pull request #1812 from ManishMadan2882/main
Tools redesign
2025-05-23 23:49:45 +01:00
ManishMadan2882
4b66ddfdef (fix:config) use default variant for confirm modal 2025-05-24 01:20:57 +05:30
ManishMadan2882
2d55b1f592 (fix:confirmModal) only close modal on click outisde 2025-05-24 01:19:14 +05:30
ManishMadan2882
14adfabf7e (feat:tools) reflect custom name on ui 2025-05-24 01:17:22 +05:30
Alex
e7a76ede76 Merge pull request #1813 from arc53/react-improve
React improve
2025-05-23 15:25:19 +01:00
Alex
de47df3bf9 fix: enhance ReActAgent's reasoning iterations and update planning prompt structure 2025-05-23 15:10:12 +01:00
Alex
5475e6f7c5 fix: enhance ReActAgent's response handling and update planning prompt 2025-05-23 14:21:02 +01:00
ManishMadan2882
8e3f3d74d4 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-05-23 18:22:20 +05:30
ManishMadan2882
046f6c66ed (feat:tools) warn on unsaved changes, deep compare 2025-05-23 18:22:06 +05:30
Manish Madan
79f9d6552e Merge branch 'arc53:main' into main 2025-05-23 03:37:53 +05:30
ManishMadan2882
56b4b63749 (fix/tools) custom actions only for api tool, allow delete 2025-05-23 03:36:27 +05:30
ManishMadan2882
b3246a48c7 (fix/addAction) duplicate placeholders 2025-05-23 03:11:54 +05:30
ManishMadan2882
71722ef6a3 (fix/config) correctly placed save btn 2025-05-23 00:57:42 +05:30
ManishMadan2882
ebf8f00302 (fix/input) minor details 2025-05-23 00:56:50 +05:30
Alex
7445928c7e (fix:stream) handle empty history input and improve user identification 2025-05-22 13:14:10 +01:00
ManishMadan2882
5ab7602f2f (feat:tools) ask for custom names 2025-05-22 17:14:52 +05:30
ManishMadan2882
a340aff63a (feat:tools) store custom names 2025-05-22 17:14:05 +05:30
ManishMadan2882
f82042ff00 (feat:config) custom name 2025-05-22 15:27:29 +05:30
ManishMadan2882
920422e28c Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-05-22 15:25:28 +05:30
ManishMadan2882
50d6b7a6f8 (fix/input) placeholder 2025-05-22 15:24:58 +05:30
Alex
41d624a36a Merge pull request #1810 from ManishMadan2882/main
(fix:layout) even action buttons
2025-05-21 18:59:01 +01:00
ManishMadan2882
f42c37c82e (fix:layout) even action buttons 2025-05-21 23:23:49 +05:30
Alex
119fcdf6f6 Merge pull request #1809 from ManishMadan2882/feat/sources-in-widget
(release-widget)0.5.1
2025-05-21 14:04:38 +01:00
ManishMadan2882
a5b093d1a9 (release-widget)0.5.1 2025-05-21 16:36:52 +05:30
Alex
e07cb44a3e Merge pull request #1806 from arc53/documentation-agents
Documentation agents
2025-05-21 11:44:05 +03:00
Alex
fec1bcfd5c Merge pull request #1789 from ManishMadan2882/main
Frontend Fixes
2025-05-21 01:05:47 +03:00
Alex
dbcf658343 Merge pull request #1808 from ManishMadan2882/feat/sources-in-widget
Glassmorphic effect on search widget
2025-05-21 01:00:49 +03:00
ManishMadan2882
d89e78c9ca (feat:search) minor adjust 2025-05-21 02:59:22 +05:30
ManishMadan2882
ec50650dfa (fix/searchwidget) prominent placeholder, sleek spinner 2025-05-21 02:00:47 +05:30
ManishMadan2882
7432e551f9 (fix/loader) drop on empty input 2025-05-21 01:40:03 +05:30
ManishMadan2882
4ee6bd44d1 (feat:glassy) search widget 2025-05-21 01:26:34 +05:30
Pavel
26f819098d agents and tools doc update 2025-05-20 20:32:38 +04:00
Alex
a1c79f93d7 Merge pull request #1801 from siiddhantt/feat/agents-enhance
feat: enhance agent sharing functionality and UI improvements
2025-05-20 18:40:22 +03:00
GH Action - Upstream Sync
9c1b202d74 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-05-20 01:42:17 +00:00
Pavel
8ad0f59f19 jwt update 2025-05-19 21:12:14 +04:00
Alex
50fbe3d5af Merge pull request #1798 from arc53/dependabot/pip/application/markdownify-1.1.0
build(deps): bump markdownify from 0.14.1 to 1.1.0 in /application
2025-05-19 14:01:13 +03:00
GH Action - Upstream Sync
af40a77d24 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-05-19 01:45:51 +00:00
dependabot[bot]
8af9a5e921 build(deps): bump markdownify from 0.14.1 to 1.1.0 in /application
Bumps [markdownify](https://github.com/matthewwithanm/python-markdownify) from 0.14.1 to 1.1.0.
- [Release notes](https://github.com/matthewwithanm/python-markdownify/releases)
- [Commits](https://github.com/matthewwithanm/python-markdownify/compare/0.14.1...1.1.0)

---
updated-dependencies:
- dependency-name: markdownify
  dependency-version: 1.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-18 12:07:13 +00:00
Alex
9807788ecb Merge pull request #1795 from arc53/dependabot/pip/application/pypdf-5.5.0
build(deps): bump pypdf from 5.2.0 to 5.5.0 in /application
2025-05-18 15:05:57 +03:00
dependabot[bot]
5e2f329f15 build(deps): bump pypdf from 5.2.0 to 5.5.0 in /application
Bumps [pypdf](https://github.com/py-pdf/pypdf) from 5.2.0 to 5.5.0.
- [Release notes](https://github.com/py-pdf/pypdf/releases)
- [Changelog](https://github.com/py-pdf/pypdf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/py-pdf/pypdf/compare/5.2.0...5.5.0)

---
updated-dependencies:
- dependency-name: pypdf
  dependency-version: 5.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-18 12:02:27 +00:00
Alex
9572a7adaa Merge pull request #1800 from arc53/dependabot/pip/application/boto3-1.38.18
build(deps): bump boto3 from 1.35.97 to 1.38.18 in /application
2025-05-18 15:00:45 +03:00
dependabot[bot]
1ba94f4f5f build(deps): bump boto3 from 1.35.97 to 1.38.18 in /application
Bumps [boto3](https://github.com/boto/boto3) from 1.35.97 to 1.38.18.
- [Release notes](https://github.com/boto/boto3/releases)
- [Commits](https://github.com/boto/boto3/compare/1.35.97...1.38.18)

---
updated-dependencies:
- dependency-name: boto3
  dependency-version: 1.38.18
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-18 11:54:08 +00:00
Alex
237afa0a3a Merge pull request #1799 from arc53/dependabot/pip/application/beautifulsoup4-4.13.4
build(deps): bump beautifulsoup4 from 4.12.3 to 4.13.4 in /application
2025-05-18 14:53:01 +03:00
GH Action - Upstream Sync
d80b7017cf Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-05-17 01:38:42 +00:00
Siddhant Rai
56793c8db7 feat: enhance agent sharing functionality and UI improvements
- Added shared agents state management in Navigation and AgentsList components.
- Implemented fetching and displaying shared agents in the AgentsList.
- Introduced functionality to hide shared agents with appropriate API integration.
- Updated the SharedAgent component layout for better UI consistency.
- Improved error handling in conversation fetching logic.
- Added new API endpoint for hiding shared agents.
- Updated Redux slice to manage shared agents state.
- Refactored AgentCard and AgentSection components for better code organization and readability.
2025-05-17 05:53:56 +05:30
ManishMadan2882
8edb217943 (fix) source.link is new source.source 2025-05-17 01:41:29 +05:30
ManishMadan2882
23ebcf1065 (fix:all_sources) inlined svg, dom heirarchy 2025-05-17 01:33:37 +05:30
ManishMadan2882
68a5a3d62a (feat:source_cards) enhance ux 2025-05-17 00:15:42 +05:30
ManishMadan2882
8d7236b0db (fix:action-buttons) redirect to conversations 2025-05-17 00:07:54 +05:30
ManishMadan2882
96c7daf818 (fix:modals) use portals 2025-05-16 16:15:02 +05:30
Alex
9d8073d468 Merge pull request #1794 from arc53/remove-duplicate-docs
remove duplicate chat widget page
2025-05-16 12:45:59 +03:00
ManishMadan2882
fc4942e189 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-05-16 14:33:55 +05:30
ManishMadan2882
ca69d025bd (fix:agents) adhere to new MessageInput 2025-05-16 14:33:30 +05:30
GH Action - Upstream Sync
ffa428e32a Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-05-16 01:41:33 +00:00
ManishMadan2882
c24e90eaae Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-05-16 04:12:27 +05:30
ManishMadan2882
ab32eff588 (fix/tool_calls) prevent overscroll somehow 2025-05-16 04:09:52 +05:30
ManishMadan2882
7f592f2b35 (fix/layout) prevent overlap in tab screen 2025-05-16 01:56:53 +05:30
dependabot[bot]
3bf7f67adf build(deps): bump beautifulsoup4 from 4.12.3 to 4.13.4 in /application
Bumps [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) from 4.12.3 to 4.13.4.

---
updated-dependencies:
- dependency-name: beautifulsoup4
  dependency-version: 4.13.4
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-15 20:15:17 +00:00
Pavel
594ce05292 remove duplicate chat widget page 2025-05-15 21:32:59 +04:00
Alex
fe02ca68d5 fix: update API key for DocsGPTWidget 2025-05-15 18:18:12 +01:00
Alex
21ef27ee9b Merge pull request #1791 from arc53/fix-openai-conflict
fix for OPENAI_BASE_URL + ollama can't connect to container
2025-05-15 19:04:21 +03:00
Alex
09d37f669f Merge pull request #1793 from arc53/prompts-update
refactor: enhance AI assistant prompts for clarity and creativity
2025-05-15 16:19:32 +03:00
Pavel
416b776062 redundant f string 2025-05-15 16:57:41 +04:00
Alex
5ed05d4020 refactor: enhance AI assistant prompts for clarity and creativity 2025-05-15 13:30:18 +01:00
Alex
4004bfb5ef Merge pull request #1792 from arc53/read_webpage_tools
feat: add ReadWebpageTool for fetching and converting webpage content…
2025-05-15 15:14:02 +03:00
Alex
45aace8966 feat: add ReadWebpageTool for fetching and converting webpage content to Markdown 2025-05-15 12:56:06 +01:00
Alex
d9fc623dcb Merge pull request #1790 from ManishMadan2882/setup-fix
(fix:dockercompose) volumes, user
2025-05-15 13:37:11 +03:00
Pavel
dbb822f6b0 fix for OPENAI_BASE_URL + ollama can't connect to container
- fix for OpenAI trying to use base_url=""
- fix for ollama container error:
`Error code: 404 - {'error': {'message': 'model "MODEL_NAME" not found, try pulling it first', 'type': 'api_error', 'param': None, 'code': None}}`
2025-05-15 13:50:08 +04:00
ManishMadan2882
3d64dffc32 (fix:dockercompose) volumes, user 2025-05-15 15:19:34 +05:30
GH Action - Upstream Sync
130ece7bc0 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-05-15 01:38:39 +00:00
Alex
b2809b2e9a remove old deps 2025-05-14 22:03:27 +01:00
Alex
29e89d2965 Merge pull request #1785 from arc53/dependabot/pip/application/yarl-1.20.0
build(deps): bump yarl from 1.18.3 to 1.20.0 in /application
2025-05-14 23:55:09 +03:00
dependabot[bot]
e7d54a639e build(deps): bump yarl from 1.18.3 to 1.20.0 in /application
Bumps [yarl](https://github.com/aio-libs/yarl) from 1.18.3 to 1.20.0.
- [Release notes](https://github.com/aio-libs/yarl/releases)
- [Changelog](https://github.com/aio-libs/yarl/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/yarl/compare/v1.18.3...v1.20.0)

---
updated-dependencies:
- dependency-name: yarl
  dependency-version: 1.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-14 20:50:26 +00:00
Alex
22df98e9bb Merge pull request #1782 from arc53/dependabot/pip/application/prompt-toolkit-3.0.51
build(deps): bump prompt-toolkit from 3.0.50 to 3.0.51 in /application
2025-05-14 23:49:14 +03:00
dependabot[bot]
0d45c44c6f build(deps): bump prompt-toolkit from 3.0.50 to 3.0.51 in /application
Bumps [prompt-toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit) from 3.0.50 to 3.0.51.
- [Release notes](https://github.com/prompt-toolkit/python-prompt-toolkit/releases)
- [Changelog](https://github.com/prompt-toolkit/python-prompt-toolkit/blob/main/CHANGELOG)
- [Commits](https://github.com/prompt-toolkit/python-prompt-toolkit/compare/3.0.50...3.0.51)

---
updated-dependencies:
- dependency-name: prompt-toolkit
  dependency-version: 3.0.51
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-14 20:47:44 +00:00
Alex
63c6912841 lazy load elasticsearch 2025-05-14 21:45:30 +01:00
Alex
73bce73034 Merge pull request #1786 from arc53/dependabot/pip/application/flask-3.1.1
build(deps): bump flask from 3.1.0 to 3.1.1 in /application
2025-05-14 23:40:58 +03:00
Manish Madan
b2582796a2 Merge branch 'arc53:main' into main 2025-05-15 01:20:23 +05:30
Alex
8babb6e68f Merge pull request #1787 from siiddhantt/refactor/agents
refactor: handle empty sources and chunks in agent
2025-05-14 14:39:01 +03:00
Siddhant Rai
d1d28df8a1 fix: handle empty chunks and retriever values in agent creation and update 2025-05-14 09:26:36 +05:30
GH Action - Upstream Sync
cd556d5d43 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-05-14 01:40:32 +00:00
ManishMadan2882
2855283a2c (fix/shared) append to right state 2025-05-14 04:15:11 +05:30
ManishMadan2882
06c29500f2 (fix:input-lag) localised the input state to messageInput 2025-05-14 04:13:53 +05:30
ManishMadan2882
81104153a6 (feat:action-buttons) combine the buttons at the top of layout 2025-05-14 03:01:57 +05:30
dependabot[bot]
23bfd4683c build(deps): bump flask from 3.1.0 to 3.1.1 in /application
Bumps [flask](https://github.com/pallets/flask) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/pallets/flask/releases)
- [Changelog](https://github.com/pallets/flask/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/flask/compare/3.1.0...3.1.1)

---
updated-dependencies:
- dependency-name: flask
  dependency-version: 3.1.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-13 20:32:17 +00:00
Alex
a52a3e3158 Merge pull request #1750 from arc53/dependabot/pip/application/packaging-25.0
build(deps): bump packaging from 24.1 to 25.0 in /application
2025-05-13 18:34:56 +03:00
Alex
44e524e3c3 build(deps): update langchain and openai dependencies 2025-05-13 16:29:24 +01:00
dependabot[bot]
9a430f73e2 build(deps): bump packaging from 24.1 to 25.0 in /application
Bumps [packaging](https://github.com/pypa/packaging) from 24.1 to 25.0.
- [Release notes](https://github.com/pypa/packaging/releases)
- [Changelog](https://github.com/pypa/packaging/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pypa/packaging/compare/24.1...25.0)

---
updated-dependencies:
- dependency-name: packaging
  dependency-version: '25.0'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-13 15:10:29 +00:00
Alex
fdea40ec11 Merge pull request #1735 from arc53/dependabot/pip/application/referencing-0.36.2
build(deps): bump referencing from 0.30.2 to 0.36.2 in /application
2025-05-13 18:09:10 +03:00
Alex
526d340849 fix: stale deps 2025-05-13 16:03:48 +01:00
dependabot[bot]
fe95f6ad81 build(deps): bump referencing from 0.30.2 to 0.36.2 in /application
Bumps [referencing](https://github.com/python-jsonschema/referencing) from 0.30.2 to 0.36.2.
- [Release notes](https://github.com/python-jsonschema/referencing/releases)
- [Changelog](https://github.com/python-jsonschema/referencing/blob/main/docs/changes.rst)
- [Commits](https://github.com/python-jsonschema/referencing/compare/v0.30.2...v0.36.2)

---
updated-dependencies:
- dependency-name: referencing
  dependency-version: 0.36.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-13 13:20:27 +00:00
Alex
39e73c37ab Merge pull request #1576 from arc53/dependabot/pip/application/portalocker-3.1.1
build(deps): bump portalocker from 2.10.1 to 3.1.1 in /application
2025-05-13 16:06:44 +03:00
Alex
39b36b6857 Feat: Add MD gen script, enable Qdrant lazy loading 2025-05-13 14:03:05 +01:00
dependabot[bot]
44e98748c5 build(deps): bump portalocker from 2.10.1 to 3.1.1 in /application
Bumps [portalocker](https://github.com/wolph/portalocker) from 2.10.1 to 3.1.1.
- [Release notes](https://github.com/wolph/portalocker/releases)
- [Changelog](https://github.com/wolph/portalocker/blob/develop/CHANGELOG.rst)
- [Commits](https://github.com/wolph/portalocker/compare/v2.10.1...v3.1.1)

---
updated-dependencies:
- dependency-name: portalocker
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-13 12:44:30 +00:00
Alex
8a7aeee955 Merge pull request #1751 from arc53/dependabot/pip/application/torch-2.7.0
build(deps): bump torch from 2.5.1 to 2.7.0 in /application
2025-05-13 15:41:10 +03:00
dependabot[bot]
1c7befb8d3 build(deps): bump torch from 2.5.1 to 2.7.0 in /application
Bumps [torch](https://github.com/pytorch/pytorch) from 2.5.1 to 2.7.0.
- [Release notes](https://github.com/pytorch/pytorch/releases)
- [Changelog](https://github.com/pytorch/pytorch/blob/main/RELEASE.md)
- [Commits](https://github.com/pytorch/pytorch/compare/v2.5.1...v2.7.0)

---
updated-dependencies:
- dependency-name: torch
  dependency-version: 2.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-13 12:20:22 +00:00
Alex
d5d59ac62c Merge pull request #1759 from arc53/dependabot/pip/application/transformers-4.51.3
build(deps): bump transformers from 4.49.0 to 4.51.3 in /application
2025-05-13 15:19:18 +03:00
Alex
562f0762a0 Merge pull request #1775 from siiddhantt/feat/enhance-agents
feat: share and pin agents
2025-05-13 11:54:29 +03:00
Siddhant Rai
e46aedce21 Merge branch 'feat/enhance-agents' of https://github.com/siiddhantt/DocsGPT into feat/enhance-agents 2025-05-13 13:05:50 +05:30
Siddhant Rai
57cc09b1d7 feat: update tool display name and improve SharedAgent component layout 2025-05-13 13:05:20 +05:30
ManishMadan2882
e1e608b744 (fix:bubble) sleeker source cards 2025-05-13 06:16:16 +05:30
Alex
cbfa5a5118 Delete .jwt_secret_key 2025-05-12 15:11:42 +03:00
ManishMadan2882
ea9ab5b27c (feat:sources) remove None option, don't close on select 2025-05-12 17:15:03 +05:30
ManishMadan2882
357ced6cba Revert "(fix:message-input) no badge buttons when shared"
This reverts commit d873539856.
2025-05-12 16:32:17 +05:30
ManishMadan2882
3ffda69651 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-05-12 14:38:33 +05:30
ManishMadan2882
e1bf4e0762 (fix/logs)log must render once 2025-05-12 14:38:15 +05:30
Siddhant Rai
ec7f14b82d Merge branch 'main' into feat/enhance-agents 2025-05-12 13:45:18 +05:30
Siddhant Rai
6520be5b85 feat: shared and pinning agents + fix for streaming tools 2025-05-12 06:06:11 +05:30
GH Action - Upstream Sync
17e4fad6fb Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-05-10 01:36:32 +00:00
Alex
d84c416421 Merge pull request #1774 from arc53/limit-yield-on-tools
fix: truncate tool call results to 50 characters for cleaner output
2025-05-10 00:53:28 +03:00
Alex
32803c89a3 fix: truncate tool call results to 50 characters for cleaner output 2025-05-09 22:52:17 +01:00
Alex
a86bcb5c29 Merge pull request #1773 from arc53/cols-agent-fix
fix:(style) update layout for agent list and card components
2025-05-10 00:21:05 +03:00
Alex
7d76a33790 fix:(style) update layout for agent list and card components 2025-05-09 22:15:55 +01:00
ManishMadan2882
8552e81022 (fix:input) sync with translations 2025-05-09 21:39:54 +05:30
ManishMadan2882
eacdde829f (fix/logs) abnormal scroll over page 2025-05-09 20:07:51 +05:30
ManishMadan2882
d873539856 (fix:message-input) no badge buttons when shared 2025-05-09 20:02:49 +05:30
Alex
24bb2e469d Merge pull request #1772 from ManishMadan2882/main
Bug Fixes
2025-05-09 11:01:01 +03:00
ManishMadan2882
e1aa2cc0b8 (fix:ingestion) store file name as metadata, not path 2025-05-09 02:26:35 +05:30
ManishMadan2882
d073947f3b Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-05-08 16:11:14 +05:30
ManishMadan2882
3243740dd1 (fix-bubble) inconsistent width with snippets 2025-05-08 16:10:31 +05:30
Alex
f9bd566a3b Merge pull request #1768 from ManishMadan2882/main
Attachments : File storage changes
2025-05-08 01:41:08 +03:00
Alex
183251487c lint: remove unused import of 'io' in worker.py 2025-05-07 23:37:35 +01:00
ManishMadan2882
ff532210f7 lint 2025-05-08 00:15:28 +05:30
ManishMadan2882
d0a04d9801 (fix/lint) empty methods 2025-05-08 00:14:42 +05:30
ManishMadan2882
ea6533db4e (fix:attachment) strictly use filename 2025-05-08 00:11:02 +05:30
ManishMadan2882
89d5e7bee5 (feat:attachment) store file in endpoint layer 2025-05-07 19:15:36 +05:30
Alex
7e6cdee592 Merge pull request #1732 from asminkarki012/feature/mermaid-integration
feat[mermaid]:integration of mermaid
2025-05-07 11:52:50 +03:00
ManishMadan2882
990c2fb416 Merge branch 'main' into 'feature/mermaid-integration' 2025-05-07 03:44:47 +05:30
ManishMadan2882
09e054c6aa (fix/scroll) bring back arrowDown button, smoother scroll 2025-05-07 02:48:49 +05:30
ManishMadan2882
23f648f53a (feat/mermaid) zoom as per the requirement 2025-05-07 02:07:57 +05:30
Siddhant Rai
07fa656e7c feat: implement pinning functionality for agents with UI updates 2025-05-06 16:12:55 +05:30
Alex
7858c48f11 fix: zip file uploads 2025-05-06 11:12:26 +01:00
Alex
e56d54c3f0 fix: improve source and description handling in GetAgent and GetAgents responses 2025-05-06 10:59:25 +01:00
ManishMadan2882
f37ca95c10 (fix/mermaid loading): load only the diagrams which stream 2025-05-06 15:16:14 +05:30
ManishMadan2882
72e51bb072 (feat:mermaid) dont pass isDarkTheme 2025-05-06 04:38:38 +05:30
Alex
dcfcbf54be Merge pull request #1767 from arc53/sources-icon-fix-agent-menu
fix: sources icon mini fix
2025-05-06 01:36:29 +03:00
Alex
204936b2d0 fix: sources icon mini fix 2025-05-05 23:34:13 +01:00
ManishMadan2882
98856b39ac (feat:mermaid) zoom onhover, throw syntax errors 2025-05-06 00:53:33 +05:30
Alex
ad5f707486 lint: ruff fix 2025-05-05 18:03:45 +01:00
Alex
5ecfb0ce6d fix: enhance error logging 2025-05-05 17:59:37 +01:00
Alex
2147b3f06f lint: mini fix 2025-05-05 13:14:56 +01:00
Alex
7daed3daaf Merge pull request #1764 from arc53/feat/better-logs
fix: enhance error logging with exception info across multiple modules
2025-05-05 15:13:21 +03:00
Alex
481df4d604 fix: enhance error logging with exception info across multiple modules 2025-05-05 13:12:39 +01:00
Alex
cf333873fd fix: json body 2025-05-05 00:08:56 +01:00
Alex
ae700e8f3a fix: display only 2 demos buttons on mobile 2025-05-04 18:56:33 +01:00
ManishMadan2882
16386a9524 (feat:mermaid) zoom on hover 2025-05-04 19:39:24 +05:30
ManishMadan2882
7e7ce276b2 (fix:mermaid/flicker) separated from markdown 2025-05-02 14:12:24 +05:30
Alex
71c6b41b83 Merge pull request #1762 from arc53/dartpain-patch-2
Update README.md
2025-05-01 17:19:10 +03:00
Alex
4b2faae29a Update README.md 2025-05-01 17:15:08 +03:00
ManishMadan2882
7e28e562d0 (fix:mermaid) download svg/png 2025-05-01 19:37:03 +05:30
dependabot[bot]
93c2e2a597 build(deps): bump transformers from 4.49.0 to 4.51.3 in /application
Bumps [transformers](https://github.com/huggingface/transformers) from 4.49.0 to 4.51.3.
- [Release notes](https://github.com/huggingface/transformers/releases)
- [Commits](https://github.com/huggingface/transformers/compare/v4.49.0...v4.51.3)

---
updated-dependencies:
- dependency-name: transformers
  dependency-version: 4.51.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-29 20:50:32 +00:00
Alex
c45d13d834 Merge pull request #1755 from siiddhantt/feat/agent-menu
feat: agent webhook and minor fixes
2025-04-29 00:41:36 +03:00
Alex
330276cdf7 fix: lint for ruff 2025-04-28 22:32:13 +01:00
Siddhant Rai
22c7015c69 refactor: webhook listener handle both POST and GET requests 2025-04-29 00:29:16 +05:30
Alex
cc67d4a1e2 process all request data implicitly 2025-04-28 17:49:29 +01:00
Siddhant Rai
eeb9da696f Merge remote-tracking branch 'upstream/main' into feat/agent-menu 2025-04-28 17:01:46 +05:30
Siddhant Rai
4979e1ac9a feat: add clsx dependency, enhance logging in agent logic, and improve agent logs component 2025-04-28 14:18:28 +05:30
ManishMadan2882
545353dabf (feat:mermaid) use contentLoaded to render 2025-04-27 03:42:28 +05:30
ManishMadan2882
545376740c (fix:re-render) useRef to check for bottom 2025-04-26 19:33:24 +05:30
Siddhant Rai
8289b02ab0 feat: add agent webhook endpoint and implement related functionality 2025-04-26 12:00:29 +05:30
ManishMadan2882
fc0060662b (fix:mermaid) suppress mermaid injected errors in DOM 2025-04-25 21:18:49 +05:30
Alex
df9d432d29 fix: mongo db database name in settings 2025-04-24 17:29:41 +01:00
Alex
76fd6e15cc Update Dockerfile 2025-04-24 18:54:58 +03:00
Alex
06982efda5 Merge pull request #1742 from ManishMadan2882/main
File System Abstraction
2025-04-24 01:32:27 +03:00
Alex
3cd9a72495 add storage type to the settings cofig 2025-04-23 23:13:39 +01:00
ManishMadan2882
0ce27f274a (feat:storage) file indexes/faiss 2025-04-23 04:28:45 +05:30
ManishMadan2882
e60f78ac4a (feat:storage) file uploads 2025-04-23 03:39:35 +05:30
ManishMadan2882
637d3a24a1 Revert "(feat:storage) file, indexes uploads"
This reverts commit 64c42f0ddf.
2025-04-23 00:52:55 +05:30
ManishMadan2882
24c8b24b1f Revert "(fix:indexes) look for the right path"
This reverts commit 5ad34e2216.
2025-04-23 00:52:22 +05:30
ManishMadan2882
5ad34e2216 (fix:indexes) look for the right path 2025-04-22 17:34:25 +05:30
ManishMadan2882
64c42f0ddf (feat:storage) file, indexes uploads 2025-04-22 05:18:07 +05:30
ManishMadan2882
0a31ddaae6 (feat:storage) use get storage 2025-04-22 01:41:53 +05:30
ManishMadan2882
38476cfeb8 (gfeat:storage) get storage instance based on settings 2025-04-22 00:57:57 +05:30
asminkarki012
decc31f1f0 update latest changes 2025-04-21 21:05:12 +05:45
asminkarki012
ea0aa64330 fix: added renderer in answer bubble 2025-04-21 20:50:04 +05:45
Manish Madan
e9a6044645 Merge branch 'main' into main 2025-04-20 16:01:13 +05:30
Alex
474d700df2 Merge pull request #1745 from arc53/dependabot/pip/application/google-generativeai-0.8.5
build(deps): bump google-generativeai from 0.8.3 to 0.8.5 in /application
2025-04-20 01:39:11 +03:00
ManishMadan2882
c50ff6faa3 (feat:fs abstract) googleLLM class 2025-04-18 21:03:28 +05:30
ManishMadan2882
c8efef8f04 (fix:openai) image uplads, use lambda in process_files 2025-04-18 18:27:02 +05:30
dependabot[bot]
1d22f77568 build(deps): bump google-generativeai in /application
Bumps [google-generativeai](https://github.com/google/generative-ai-python) from 0.8.3 to 0.8.5.
- [Release notes](https://github.com/google/generative-ai-python/releases)
- [Changelog](https://github.com/google-gemini/deprecated-generative-ai-python/blob/main/RELEASE.md)
- [Commits](https://github.com/google/generative-ai-python/compare/v0.8.3...v0.8.5)

---
updated-dependencies:
- dependency-name: google-generativeai
  dependency-version: 0.8.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-17 20:06:10 +00:00
ManishMadan2882
5aa51f5f36 (feat:file_abstract) openai attachments comply 2025-04-18 01:27:21 +05:30
ManishMadan2882
335c21c48a (fix:attachment) dont calculate MIME again 2025-04-17 16:36:40 +05:30
ManishMadan2882
c35d1cecfe (feat:file_abstract) return storage metadata after upload 2025-04-17 16:29:34 +05:30
ManishMadan2882
0d3e6157cd (feat:attachmentUpload) parse content before upload 2025-04-17 16:23:01 +05:30
ManishMadan2882
68e4cf4d14 (feat:fsabstract) add factory class 2025-04-17 02:40:53 +05:30
ManishMadan2882
9454150f7d (fix:s3) processor func 2025-04-17 02:36:55 +05:30
ManishMadan2882
0a0e16547e (feat:fs_abstract) attachment uploads 2025-04-17 02:35:45 +05:30
Alex
0aec1b9969 Merge pull request #1739 from siiddhantt/feat/agent-menu
feat: new agents section
2025-04-16 17:50:11 +03:00
Alex
3e1ec23409 fix: lint 2025-04-16 15:47:39 +01:00
Siddhant Rai
2f9f428a2f feat: add prompt management functionality with modal integration 2025-04-16 19:41:16 +05:30
Siddhant Rai
da15cde49c Merge branch 'main' into feat/agent-menu 2025-04-16 18:35:38 +05:30
Siddhant Rai
e6ed37139a feat: implement agent preview functionality and enhance conversation handling 2025-04-16 16:26:47 +05:30
ManishMadan2882
377e33c148 (feat:file_abstract) process files method 2025-04-16 03:36:45 +05:30
ManishMadan2882
e567d88951 ((feat:fs_abstact) s3 2025-04-16 03:31:42 +05:30
ManishMadan2882
89b2937b11 ((feat:fs_abstact) local 2025-04-16 03:31:28 +05:30
ManishMadan2882
142ed75468 ((feat:fs_abstact) base 2025-04-16 03:31:06 +05:30
Siddhant Rai
d80eeb044c feat: add agent timestamps and improve agent retrieval logic 2025-04-15 14:06:20 +05:30
Siddhant Rai
7c69e99914 feat: Enhance agent selection and conversation handling
- Added functionality to select agents in the Navigation component, allowing users to reset conversations and set the selected agent.
- Updated the MessageInput component to conditionally show source and tool buttons based on the selected agent.
- Modified the Conversation component to handle agent-specific queries and manage file uploads.
- Improved conversation fetching logic to include agent IDs and handle attachments.
- Introduced new types for conversation summaries and results to streamline API responses.
- Refactored Redux slices to manage selected agent state and improve overall state management.
- Enhanced error handling and loading states across components for better user experience.
2025-04-15 11:53:53 +05:30
Alex
5e1aaf5a44 Merge pull request #1733 from ManishMadan2882/main
Attachments: Enhancements , strategy specific to certain LLMs
2025-04-15 01:55:46 +03:00
Alex
ad610d2f90 fix: lint ruff 2025-04-14 23:49:40 +01:00
Alex
02934452d6 fix: remove comment 2025-04-14 23:48:17 +01:00
ManishMadan2882
8b054010e1 (Feat:input) sleek attachment pills 2025-04-15 03:30:11 +05:30
Alex
5b77f3839b fix: maybe 2025-04-14 20:24:05 +01:00
Alex
231b792452 fix: streaming with tools google and openai halfway 2025-04-14 18:54:40 +01:00
ManishMadan2882
b468e0c164 (fix:generation) attach + tools 2025-04-13 18:33:26 +05:30
Siddhant Rai
fa1f9d7009 feat: agents route replacing chatbots
- Removed API Keys tab from SettingsBar and adjusted tab layout.
- Improved styling for tab scrolling buttons and gradient indicators.
- Introduced AgentDetailsModal for displaying agent access details.
- Updated Analytics component to fetch agent data and handle analytics for selected agent.
- Refactored Logs component to accept agentId as a prop for filtering logs.
- Enhanced type definitions for InputProps to include textSize.
- Cleaned up unused imports and optimized component structure across various files.
2025-04-11 17:24:22 +05:30
asminkarki012
c5a8f3abcd refact:generate unique meraid id using crypto.randomUUID 2025-04-11 11:48:07 +05:45
ManishMadan2882
dfe6a8d3e3 (feat:attach) simplify the format for files 2025-04-11 01:53:17 +05:30
ManishMadan2882
292257770c (refactor:attach) centralize attachment state 2025-04-10 03:02:39 +05:30
ManishMadan2882
b4c6b2b08b (feat:utils) getOS, isTouchDevice 2025-04-10 01:44:49 +05:30
ManishMadan2882
6cb4577e1b (feat:input) hotkey for sources open 2025-04-10 01:43:46 +05:30
ManishMadan2882
456784db48 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-04-10 01:29:52 +05:30
ManishMadan2882
dd9ea46e58 (feat:attach) strategy specific to google genai 2025-04-10 01:29:01 +05:30
GH Action - Upstream Sync
ed3af2fac0 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-04-09 01:27:51 +00:00
Alex
02f8132f3a Update README.md 2025-04-08 15:56:34 +03:00
ManishMadan2882
55bd90fad9 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-04-08 17:51:27 +05:30
ManishMadan2882
cd7bbb45c3 (fix:popups) minor hover 2025-04-08 17:51:18 +05:30
Alex
6c7fc0ed22 Merge pull request #1729 from arc53/setup-windows
win-setup
2025-04-08 13:58:28 +03:00
ManishMadan2882
5421bc1386 (feat:attach) extend support for imgs 2025-04-08 15:51:37 +05:30
GH Action - Upstream Sync
051841e566 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-04-08 01:27:09 +00:00
ManishMadan2882
0c68815cf2 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-04-07 20:16:12 +05:30
ManishMadan2882
0c1138179b (feat:attch) store file mime type 2025-04-07 20:16:03 +05:30
ManishMadan2882
1f3d1cc73e (feat:attach) handle unsupported attachments 2025-04-07 20:15:11 +05:30
Alex
707d1332de Merge pull request #1734 from arc53/fix-thought-param
fix: thought param in /api/answer
2025-04-07 13:08:23 +03:00
Alex
f6c88da81b fix: thought param in /api/answer 2025-04-07 11:03:49 +01:00
GH Action - Upstream Sync
a651e6e518 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-04-07 01:37:46 +00:00
Alex
bea89b93eb Merge pull request #1730 from arc53/dependabot/pip/application/multidict-6.3.2
build(deps): bump multidict from 6.1.0 to 6.3.2 in /application
2025-04-06 22:00:31 +03:00
ManishMadan2882
244c9b96a2 (fix:attach) pass attachment docs as it is 2025-04-06 16:02:30 +05:30
ManishMadan2882
a37bd76950 (feat:storeAttach) store in inputs, raise errors from worker 2025-04-06 16:01:57 +05:30
ManishMadan2882
9d70032de8 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-04-06 15:57:26 +05:30
ManishMadan2882
e4945b41e9 (feat:files) link attachment to openai_api 2025-04-06 15:57:18 +05:30
Pavel
493dc8689c guide-updates 2025-04-05 17:49:56 +04:00
GH Action - Upstream Sync
bdac2ffa27 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-04-05 01:25:36 +00:00
asminkarki012
b1235f3ce0 feat[mermaid]:clean comment 2025-04-04 18:40:57 +05:45
asminkarki012
ba4bb63a1f feat[mermaid]:integration of mermaid 2025-04-04 18:36:45 +05:45
Alex
3227b0e69c Merge pull request #1722 from asminkarki012/fix/csv-parser-include-headers
fix[csv_parser]:missing header
2025-04-04 14:53:45 +03:00
ManishMadan2882
29c899627e Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-04-04 03:31:45 +05:30
ManishMadan2882
5923781484 (feat:attach) warning for error, progress, removal 2025-04-04 03:29:01 +05:30
dependabot[bot]
8bb263a2ec build(deps): bump multidict from 6.1.0 to 6.3.2 in /application
Bumps [multidict](https://github.com/aio-libs/multidict) from 6.1.0 to 6.3.2.
- [Release notes](https://github.com/aio-libs/multidict/releases)
- [Changelog](https://github.com/aio-libs/multidict/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/multidict/compare/v6.1.0...v6.3.2)

---
updated-dependencies:
- dependency-name: multidict
  dependency-version: 6.3.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-03 20:24:09 +00:00
Alex
94c7bba168 Merge pull request #1716 from ManishMadan2882/main
Sources + Tools
2025-04-03 02:03:47 +03:00
ManishMadan2882
f9ad4c068a (feat:attach) fallback strategy to process docs 2025-04-03 03:26:37 +05:30
ManishMadan2882
19d68252cd (fix/attach): inputs are created in application 2025-04-02 16:36:58 +05:30
ManishMadan2882
72bbe3b1ce Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-04-02 15:57:45 +05:30
ManishMadan2882
856824316b (feat: attach) handle them locally from message input 2025-04-02 15:33:35 +05:30
ManishMadan2882
95e189d1d8 (feat:base/agents) default attachment 2025-04-02 15:29:04 +05:30
ManishMadan2882
c629460acb (feat:attach) extract contents in endpoint layer 2025-04-02 15:21:33 +05:30
ManishMadan2882
f235a94986 (feat:attach) pass attachments for generation 2025-04-02 15:14:56 +05:30
GH Action - Upstream Sync
632cba86e9 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-04-02 01:36:06 +00:00
Alex
6b92c7eccc Update README.md 2025-04-01 12:27:55 +03:00
Alex
ab0da1abac Merge pull request #1721 from siiddhantt/feat/react-agent
feat: ReActAgent and agent refactor
2025-04-01 12:08:09 +03:00
Siddhant Rai
7f31ac7bcb refactor: minor changes 2025-04-01 12:33:43 +05:30
Pavel
57a6fb31b2 periodic header injection 2025-03-31 22:28:04 +04:00
Siddhant Rai
fd2b6c111c feat: enhance ClassicAgent and ReActAgent with tool preparation steps 2025-03-31 17:02:36 +05:30
GH Action - Upstream Sync
302458b505 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-30 01:40:32 +00:00
Alex
0e31329785 Merge pull request #1723 from arc53/dependabot/pip/application/langsmith-0.3.19 2025-03-29 21:14:46 +02:00
GH Action - Upstream Sync
8978a4cf2d Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-29 01:25:46 +00:00
dependabot[bot]
57d103116f build(deps): bump langsmith from 0.3.15 to 0.3.19 in /application
Bumps [langsmith](https://github.com/langchain-ai/langsmith-sdk) from 0.3.15 to 0.3.19.
- [Release notes](https://github.com/langchain-ai/langsmith-sdk/releases)
- [Commits](https://github.com/langchain-ai/langsmith-sdk/compare/v0.3.15...v0.3.19)

---
updated-dependencies:
- dependency-name: langsmith
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-28 20:55:06 +00:00
Alex
a4e9ee72d4 Merge pull request #1713 from arc53/dependabot/pip/application/pymongo-4.11.3 2025-03-28 22:45:04 +02:00
asminkarki012
c70be12bfd fix[csv_parser]:missing header 2025-03-28 22:46:11 +05:45
ManishMadan2882
4241307990 (fix:responsive/messageInput) sleek badge buttons, aligned send btn 2025-03-28 20:42:12 +05:30
ManishMadan2882
727a8ef13d (fix:responsive) tools and source pop 2025-03-28 20:40:46 +05:30
ManishMadan2882
7c92558ad1 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-03-28 18:13:42 +05:30
ManishMadan2882
45083d29a6 (feat:attach) show files on conversations 2025-03-28 18:13:24 +05:30
ManishMadan2882
5089d86095 (feat:attach) send attachment ids 2025-03-28 18:12:38 +05:30
ManishMadan2882
80e55ef385 (feat:attach) functionality to upload files 2025-03-28 18:10:18 +05:30
GH Action - Upstream Sync
b5ed98445f Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-28 01:26:07 +00:00
Siddhant Rai
82d377abf5 feat: add support for thought processing in conversation flow and introduce ReActAgent 2025-03-27 23:19:08 +05:30
ManishMadan2882
2dbea5d1b2 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-03-27 16:55:49 +05:30
ManishMadan2882
4ba35d6189 (feat: attachment) integrate upload on fe 2025-03-27 16:54:21 +05:30
Alex
1620b4f214 Merge pull request #1709 from Charlesnorris509/main
Update Navigation.tsx
2025-03-27 11:28:45 +02:00
GH Action - Upstream Sync
cec3f987f2 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-27 01:26:14 +00:00
GH Action - Upstream Sync
ec27445728 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-27 01:21:05 +00:00
ManishMadan2882
55050a9f58 (feat:attachment) upload single file 2025-03-27 03:28:03 +05:30
Alex
4b1f572b04 Merge pull request #1720 from arc53/dependabot/npm_and_yarn/docs/next-14.2.26
build(deps): bump next from 14.2.22 to 14.2.26 in /docs
2025-03-26 16:53:50 +02:00
ManishMadan2882
502dc9ec52 (feat:attachments) store and ingest files shared 2025-03-26 18:01:31 +05:30
dependabot[bot]
28f925ef75 build(deps): bump next from 14.2.22 to 14.2.26 in /docs
Bumps [next](https://github.com/vercel/next.js) from 14.2.22 to 14.2.26.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v14.2.22...v14.2.26)

---
updated-dependencies:
- dependency-name: next
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-26 06:23:32 +00:00
ManishMadan2882
9c8999a3ae (fix:sources) doc selection for preLoaded 2025-03-25 19:04:31 +05:30
ManishMadan2882
90db42ce3a Revert "(fix:sources) preloaded docs have ids too"
This reverts commit 02c8bd06f5.
2025-03-25 16:08:59 +05:30
ManishMadan2882
551130f0e1 (feat:sources/tools) ui perfection for pop-ups 2025-03-25 03:22:21 +05:30
Charles Norris
98abeabc0d Update ConversationTile.tsx 2025-03-24 16:10:41 -04:00
ManishMadan2882
2940a60b3c (faet:input) tools pop-up 2025-03-24 17:16:24 +05:30
ManishMadan2882
76b9bc0d56 (feat:input) sources pop-up 2025-03-24 17:15:57 +05:30
ManishMadan2882
42422ccdcd (feat:settings) routes for tab 2025-03-24 13:56:12 +05:30
ManishMadan2882
e9702ae2de Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-03-21 23:57:09 +05:30
ManishMadan2882
5c54852ebe (fix:tools) no tools placeholder 2025-03-21 23:56:47 +05:30
GH Action - Upstream Sync
718a86ecda Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-21 01:26:21 +00:00
GH Action - Upstream Sync
e02f19058e Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-21 01:21:33 +00:00
Pavel
1223fd2149 win-setup 2025-03-20 21:48:59 +03:00
Alex
4095b2b674 Merge pull request #1714 from siiddhantt/fix/retrievers-broken
fix: brave and duckduckgo retrievers
2025-03-20 13:00:34 +00:00
Siddhant Rai
3be6e2132b refactor: remove outdated vector store tests 2025-03-20 17:27:18 +05:30
ManishMadan2882
b09386d102 (clean:nav) rm source dropdown 2025-03-20 11:26:45 +05:30
ManishMadan2882
6464698b6d Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-03-20 09:47:38 +05:30
ManishMadan2882
9230fd3bd6 Revert "(feat:nav) clean-up source dropdown"
This reverts commit 561a125c92.
2025-03-20 09:47:29 +05:30
ManishMadan2882
7771609ea0 (locales) udpate placeholder 2025-03-20 09:43:36 +05:30
ManishMadan2882
561a125c92 (feat:nav) clean-up source dropdown 2025-03-20 09:42:57 +05:30
ManishMadan2882
7149461d8e (feat:sources) add pop-up to switch sources 2025-03-20 09:42:08 +05:30
ManishMadan2882
02c8bd06f5 (fix:sources) preloaded docs have ids too 2025-03-20 09:39:30 +05:30
Siddhant Rai
0732d9b6c8 fix: brave and duckduckgo retrievers 2025-03-20 08:27:00 +05:30
GH Action - Upstream Sync
2952c1be08 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-20 01:19:59 +00:00
dependabot[bot]
96c4a13c93 build(deps): bump pymongo from 4.10.1 to 4.11.3 in /application
Bumps [pymongo](https://github.com/mongodb/mongo-python-driver) from 4.10.1 to 4.11.3.
- [Release notes](https://github.com/mongodb/mongo-python-driver/releases)
- [Changelog](https://github.com/mongodb/mongo-python-driver/blob/4.11.3/doc/changelog.rst)
- [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.10.1...4.11.3)

---
updated-dependencies:
- dependency-name: pymongo
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-19 08:40:51 +00:00
Alex
53abf1a79e Merge pull request #1701 from siiddhantt/feat/jwt-auth
feat: implement JWT authentication and token management
2025-03-19 08:39:29 +00:00
Siddhant Rai
f00802dd6b fix: llm tests failing 2025-03-19 10:25:46 +05:30
Siddhant Rai
ab95d90284 feat: pass decoded_token to llm and retrievers 2025-03-18 23:46:02 +05:30
ManishMadan2882
9f17eb1d28 feat(textInput) new design 2025-03-18 19:33:26 +05:30
Siddhant Rai
f4ab85a2bb feat: minor fixes after merge 2025-03-18 18:56:02 +05:30
Siddhant Rai
5b40c5a9d7 Merge branch 'main' into feat/jwt-auth 2025-03-18 18:26:29 +05:30
Siddhant Rai
6583aeff08 feat: update authentication handling and integrate token usage across frontend and backend 2025-03-18 08:29:57 +05:30
Charles Norris
b1c531fbcc Update Navigation.tsx
Typo on onCoversationClick() function it should be onConversationClick()
2025-03-17 16:51:33 -04:00
Siddhant Rai
4406426515 feat: implement session_jwt and enhance auth 2025-03-17 11:51:30 +05:30
Alex
af48782464 Merge pull request #1708 from ManishMadan2882/main
Refactor(fe): Conversation
2025-03-16 20:05:46 +00:00
Manish Madan
726d4ddd9f Merge branch 'arc53:main' into main 2025-03-16 04:08:26 +05:30
ManishMadan2882
adc637b689 (clean:unused) 2025-03-16 04:07:33 +05:30
ManishMadan2882
d6c9b4fbc9 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-03-16 04:02:12 +05:30
ManishMadan2882
e17cc8ea34 (fix:date) handle iso 8601 date 2025-03-16 04:01:19 +05:30
ManishMadan2882
574a0e2dba (fix:conv) perfect aligment 2025-03-16 03:57:31 +05:30
ManishMadan2882
fd0bd13b08 (refactor:conv) separate textarea 2025-03-16 02:01:32 +05:30
Alex
f8c92147cd deps: bump langchian things 2025-03-15 19:51:30 +00:00
Alex
8136cd78d3 Merge pull request #1698 from arc53/dependabot/pip/application/duckduckgo-search-7.5.2
build(deps): bump duckduckgo-search from 7.4.2 to 7.5.2 in /application
2025-03-15 19:16:39 +00:00
ManishMadan2882
d9c4331480 (refactor:conv) wrap msgs separately 2025-03-15 16:41:56 +05:30
Alex
7af726f4b2 Merge pull request #1702 from nickaggarwal/main
fix signature for AzureOpenAILLM
2025-03-14 22:08:36 +00:00
ManishMadan2882
a50f3bc55b (fix:sourceDropdown) ask before delete 2025-03-15 00:15:23 +05:30
Nilesh Agarwal
5438bf9754 fix signature for AzureOpenAILLM 2025-03-14 09:52:09 -07:00
Siddhant Rai
7fd377bdbe feat: implement JWT authentication and token management in frontend and backend 2025-03-14 17:07:15 +05:30
Alex
84620a7375 Merge pull request #1700 from ScriptScientist/main
fix: docker compose up doesn't use the env
2025-03-14 10:39:28 +00:00
rock.lee
6968317db2 fix: docker compose up doesn't use the env and setup script will not exit when service start success 2025-03-14 17:09:10 +08:00
dependabot[bot]
67a92428b5 build(deps): bump duckduckgo-search from 7.4.2 to 7.5.2 in /application
Bumps [duckduckgo-search](https://github.com/deedy5/duckduckgo_search) from 7.4.2 to 7.5.2.
- [Release notes](https://github.com/deedy5/duckduckgo_search/releases)
- [Commits](https://github.com/deedy5/duckduckgo_search/compare/v7.4.2...v7.5.2)

---
updated-dependencies:
- dependency-name: duckduckgo-search
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-13 20:19:41 +00:00
Alex
5bb639f0ad Merge pull request #1670 from ManishMadan2882/main
Figma consolidation
2025-03-13 15:21:03 +00:00
ManishMadan2882
5bc758aa2d (fix:ui) minor adjustments 2025-03-13 20:39:17 +05:30
Pavel
27b24f19de user-avatar-svg 2025-03-13 14:25:41 +03:00
GH Action - Upstream Sync
3dfde84827 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-13 01:25:22 +00:00
Alex
5e39be6a2c fix: tests anthropic 2025-03-13 00:32:24 +00:00
Alex
35248991e7 fix: cache 2025-03-13 00:25:52 +00:00
Alex
b76e820122 fix: ruff fix 2025-03-13 00:11:50 +00:00
Alex
51eced00aa fix: openai compatable with llama and gemini 2025-03-13 00:10:13 +00:00
ManishMadan2882
079a216f5b (fix:chunkDocs) alike purple action btn 2025-03-13 03:08:02 +05:30
ManishMadan2882
8b5df98f57 (fix:ui) minor adjust 2025-03-13 03:06:49 +05:30
ManishMadan2882
fb6fd5b5b2 (fix:input) unwanted autocomplete style 2025-03-13 03:06:22 +05:30
Alex
5d5ea3eb8f Merge pull request #1689 from ScriptScientist/main
feat: novita llms support
2025-03-12 21:03:09 +00:00
ManishMadan2882
21360981ee (fix:tool-cards) ui adjust 2025-03-13 01:39:51 +05:30
ManishMadan2882
0b3cad152f (fix:prompts) design specs 2025-03-13 00:43:56 +05:30
Alex
2c2dbe45a6 Merge pull request #1696 from arc53/fixes-cache
Fixes cache
2025-03-12 17:37:38 +00:00
ManishMadan2882
5c7a3a515c (fix:general) perfect labels, delete btn 2025-03-12 22:52:08 +05:30
Alex
f2b05ad56d fix: handle cache issues with more grace 2025-03-12 15:13:14 +00:00
Alex
5f9702b91c fix: /search 2025-03-12 13:47:16 +00:00
ManishMadan2882
93de4065c7 (fix:tables) table header, name table data 2025-03-12 17:32:05 +05:30
ManishMadan2882
8e0e55fe5e (fix:analytics) feedback title 2025-03-12 17:31:30 +05:30
ManishMadan2882
a8a8585570 (fix:purple-btn) hover to 976af3 2025-03-12 08:17:13 +05:30
ManishMadan2882
1f3c07979a (fix:bubble) color adjustments 2025-03-12 06:41:37 +05:30
ManishMadan2882
fa07b3349d (fix:sidebar) upload icon, bg perfect 2025-03-12 05:57:59 +05:30
GH Action - Upstream Sync
519ffe617b Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-11 01:24:52 +00:00
Alex
fe02bf9347 Merge pull request #1693 from siiddhantt/fix/response-and-sources
feat: agent use in answer and enhance search
2025-03-10 12:53:46 +00:00
Siddhant Rai
faa583864d feat: enhance conversation saving and response streaming with source handling 2025-03-10 14:19:43 +05:30
GH Action - Upstream Sync
1a7504eba0 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-10 01:11:30 +00:00
Alex
46d32b4072 Merge pull request #1682 from arc53/dependabot/pip/application/jinja2-3.1.6
build(deps): bump jinja2 from 3.1.5 to 3.1.6 in /application
2025-03-10 00:04:03 +00:00
Alex
18d8b9c395 Merge pull request #1692 from arc53/tool-ntfy
feat: ntfy tool
2025-03-09 01:28:00 +00:00
Alex
8b9b74464e feat: ntfy tool 2025-03-09 01:22:00 +00:00
rock.lee
867c375843 add novita provider 2025-03-08 15:45:49 +08:00
GH Action - Upstream Sync
54ca6acf5a Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-08 01:07:50 +00:00
ManishMadan2882
6ac2d6d228 (fix:tile) hover behaviour on rename 2025-03-08 00:48:53 +05:30
ManishMadan2882
10c7a5f36b (clean) comments 2025-03-07 20:24:38 +05:30
Alex
4fd6c52951 fix: api tool avoid sending body if empty 2025-03-07 14:34:23 +00:00
ManishMadan2882
93fea17918 (feat:config) color name update 2025-03-07 19:55:47 +05:30
ManishMadan2882
b3f6a3aae6 (fix:ui) mninor adjustments 2025-03-07 17:20:14 +05:30
ManishMadan2882
773147701d (fix:ui) tool cards 2025-03-07 17:19:14 +05:30
ManishMadan2882
d891c8dae2 (fix:ui) minor perfections 2025-03-07 17:18:28 +05:30
ManishMadan2882
101852c7d1 (feat:toggle) add id, aria props 2025-03-07 17:16:45 +05:30
ManishMadan2882
c1f13ba8b1 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-03-07 17:11:00 +05:30
ManishMadan2882
71e45860f3 (fix:input) remove ambiguous label prop 2025-03-07 17:10:48 +05:30
ManishMadan2882
25dfd63c4f (fix:ui) color adjust 2025-03-07 17:09:00 +05:30
ManishMadan2882
fc12d7b4c8 (fix:tool) rely on reusable components 2025-03-07 17:07:01 +05:30
GH Action - Upstream Sync
a6eedc6d84 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-07 01:24:48 +00:00
Alex
b523a98289 Merge pull request #1671 from aidanbennettjones/AidanComponentEditChat
Enables Enter Key Functionality to Submit Edited Chats
2025-03-06 16:44:06 -05:00
Alex
a0929c96ba fix: postgres tool migration 2025-03-06 16:20:19 +00:00
Alex
ae1f25379f Merge pull request #1684 from arc53/brave-tool
brave-tool
2025-03-06 11:17:47 -05:00
Pavel
1e3c8cb7b1 fix imports 2025-03-06 19:13:19 +03:00
Pavel
b9f28705c8 brave-tool 2025-03-06 18:46:50 +03:00
Alex
ad4f3ce379 Merge pull request #1648 from siiddhantt/feat/agent-refactor-and-logging
feat: agent-retriever workflow + logging stack
2025-03-06 09:32:18 -05:00
Alex
d4f53bf6bb fix: ruff check 2025-03-06 14:31:46 +00:00
dependabot[bot]
2ea2819477 build(deps): bump jinja2 from 3.1.5 to 3.1.6 in /application
Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.5 to 3.1.6.
- [Release notes](https://github.com/pallets/jinja/releases)
- [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/jinja/compare/3.1.5...3.1.6)

---
updated-dependencies:
- dependency-name: jinja2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-06 04:47:24 +00:00
Alex
49a2b2ce6d fix: agent not forgotten 2025-03-05 16:11:06 -05:00
Alex
06edc261c0 fix: duplicates... 2025-03-05 16:09:13 -05:00
Alex
af69bc9d3c Merge branch 'main' into feat/agent-refactor-and-logging 2025-03-05 16:04:09 -05:00
ManishMadan2882
6eb8256220 (feat:docs,chatbots) danger delete btn 2025-03-06 02:00:05 +05:30
ManishMadan2882
ecf3067d67 (fix:analytics) rename feedback title 2025-03-06 01:58:37 +05:30
ManishMadan2882
3a7f23f75e (feat:logs) ui 2025-03-06 01:56:38 +05:30
Siddhant Rai
f88c34a0be feat: streaming responses with function call 2025-03-05 09:02:55 +05:30
ManishMadan2882
572c57e023 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-03-05 03:53:34 +05:30
ManishMadan2882
79cf2150d5 (fix:ui) minor adjustments 2025-03-05 03:15:50 +05:30
ManishMadan2882
68b868047e (feat:copy) prop to showText 2025-03-05 03:13:34 +05:30
ManishMadan2882
377670b34a (feat:docs) adding view option 2025-03-05 03:12:48 +05:30
ManishMadan2882
2b7f4de832 (feat:docs):add contextMenu to actions 2025-03-04 18:53:23 +05:30
GH Action - Upstream Sync
4a88a63fa0 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-04 01:24:01 +00:00
Alex
bf195051e2 Merge pull request #1663 from arc53/dependabot/pip/application/primp-0.14.0
build(deps): bump primp from 0.10.0 to 0.14.0 in /application
2025-03-03 14:50:26 +00:00
GH Action - Upstream Sync
c3ccd9feff Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-03 01:25:14 +00:00
Alex
2d0f0948fb Merge pull request #1673 from arc53/dependabot/pip/application/anthropic-0.49.0
build(deps): bump anthropic from 0.45.2 to 0.49.0 in /application
2025-03-02 22:44:03 +00:00
aidanbennettjones
fc7a5d098d Merge branch 'arc53:main' into AidanComponentEditChat 2025-03-02 13:35:20 -05:00
aidanbennettjones
b7f766ab82 Fix Number of Rows and Remove Comments 2025-03-02 13:34:55 -05:00
ManishMadan2882
bfffd5e4b3 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-03-01 20:15:24 +05:30
ManishMadan2882
63ba005f4d (fix:ui) minor color perfections 2025-03-01 20:15:10 +05:30
ManishMadan2882
f66ef05f2a (feat:barGraph) on hover opacity 2025-03-01 20:14:27 +05:30
ManishMadan2882
a3b28843b6 (feat:confirm-modal) danger variant 2025-03-01 20:12:40 +05:30
ManishMadan2882
b07ec8accb (feat:general) ui 2025-03-01 20:11:46 +05:30
GH Action - Upstream Sync
06f4b5823a Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-03-01 01:35:16 +00:00
Alex
99fe57f99a Merge pull request #1664 from arc53/dependabot/pip/application/langchain-core-0.3.40
build(deps): bump langchain-core from 0.3.29 to 0.3.40 in /application
2025-03-01 00:58:31 +00:00
dependabot[bot]
d1226031e1 build(deps): bump anthropic from 0.45.2 to 0.49.0 in /application
Bumps [anthropic](https://github.com/anthropics/anthropic-sdk-python) from 0.45.2 to 0.49.0.
- [Release notes](https://github.com/anthropics/anthropic-sdk-python/releases)
- [Changelog](https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md)
- [Commits](https://github.com/anthropics/anthropic-sdk-python/compare/v0.45.2...v0.49.0)

---
updated-dependencies:
- dependency-name: anthropic
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-28 20:35:48 +00:00
aidanbennettjones
78f3e64d5a Merge branch 'arc53:main' into AidanComponentEditChat 2025-02-28 10:35:17 -05:00
ManishMadan2882
1d98e75b92 (fix:share) modal covers screen 2025-02-28 16:41:34 +05:30
ManishMadan2882
66d8d95763 (feat:input) floating input labels 2025-02-28 03:46:26 +05:30
ManishMadan2882
e2bf468195 (refactor) conv tile 2025-02-28 03:45:54 +05:30
ManishMadan2882
b7efc16257 (feat:menu) add reusable menu, ui 2025-02-28 03:44:14 +05:30
ManishMadan2882
ec6bcdff7e (feat:convBubble) minor adjustment 2025-02-28 03:42:34 +05:30
ManishMadan2882
3e65885e1f (feat:toggle) greener colors, flexible 2025-02-28 03:40:42 +05:30
Siddhant Rai
c6ce4d9374 feat: logging stacks 2025-02-27 19:14:10 +05:30
ManishMadan2882
0b437d0e8d (feat:ui) updating hero, code snippets 2025-02-27 03:04:55 +05:30
dependabot[bot]
e1df3be4b9 build(deps): bump langchain-core from 0.3.29 to 0.3.40 in /application
Bumps [langchain-core](https://github.com/langchain-ai/langchain) from 0.3.29 to 0.3.40.
- [Release notes](https://github.com/langchain-ai/langchain/releases)
- [Commits](https://github.com/langchain-ai/langchain/compare/langchain-core==0.3.29...langchain-core==0.3.40)

---
updated-dependencies:
- dependency-name: langchain-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-26 20:16:15 +00:00
dependabot[bot]
b944769f8c build(deps): bump primp from 0.10.0 to 0.14.0 in /application
Bumps [primp](https://github.com/deedy5/primp) from 0.10.0 to 0.14.0.
- [Release notes](https://github.com/deedy5/primp/releases)
- [Commits](https://github.com/deedy5/primp/compare/v0.10.0...v0.14.0)

---
updated-dependencies:
- dependency-name: primp
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-26 20:16:08 +00:00
Alex
56b8074c22 Merge pull request #1658 from ManishMadan2882/main
Widget upgrade to 0.5.0
2025-02-26 11:05:32 +00:00
ManishMadan2882
b577f322c9 Merge branch 'main' of https://github.com/arc53/docsgpt 2025-02-26 16:17:19 +05:30
ManishMadan2882
b007e2af8f (update:docs) docsgpt dep 2025-02-26 16:12:38 +05:30
ManishMadan2882
df89990aa5 (upgrade:widget) v0.5.0 2025-02-26 16:09:12 +05:30
Alex
c108a53b11 fix: default keys 2025-02-26 10:35:26 +00:00
ManishMadan2882
4831f5bb5d Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-02-26 14:52:59 +05:30
ManishMadan2882
987ef63e64 (feat:widget) simplify scrolling 2025-02-26 14:52:48 +05:30
Alex
e997e12bb9 Merge pull request #1656 from arc53/dependabot/pip/application/lxml-5.3.1
build(deps): bump lxml from 5.3.0 to 5.3.1 in /application
2025-02-25 22:29:56 +00:00
Alex
6ba0add265 Merge pull request #1655 from arc53/dependabot/pip/application/qdrant-client-1.13.2
build(deps): bump qdrant-client from 1.12.2 to 1.13.2 in /application
2025-02-25 22:29:40 +00:00
Alex
9160c13039 Merge pull request #1651 from arc53/dependabot/pip/application/elasticsearch-8.17.1
build(deps): bump elasticsearch from 8.17.0 to 8.17.1 in /application
2025-02-25 22:28:49 +00:00
Alex
40be9f65e4 Merge pull request #1647 from ManishMadan2882/main
Analytics and feedback
2025-02-25 22:28:16 +00:00
dependabot[bot]
0aae53524c build(deps): bump lxml from 5.3.0 to 5.3.1 in /application
Bumps [lxml](https://github.com/lxml/lxml) from 5.3.0 to 5.3.1.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-5.3.0...lxml-5.3.1)

---
updated-dependencies:
- dependency-name: lxml
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-25 20:38:23 +00:00
dependabot[bot]
1d1efc00b5 build(deps): bump qdrant-client from 1.12.2 to 1.13.2 in /application
Bumps [qdrant-client](https://github.com/qdrant/qdrant-client) from 1.12.2 to 1.13.2.
- [Release notes](https://github.com/qdrant/qdrant-client/releases)
- [Commits](https://github.com/qdrant/qdrant-client/compare/v1.12.2...v1.13.2)

---
updated-dependencies:
- dependency-name: qdrant-client
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-25 20:38:17 +00:00
ManishMadan2882
7584305159 (feat:feedback) unset feedback when null 2025-02-26 01:01:30 +05:30
ManishMadan2882
554601d674 (fix:feedback) widget can handle feedback 2025-02-26 01:00:38 +05:30
Alex
6caf14f4b2 Merge pull request #1653 from asminkarki012/main
docs: Ensure --env-file .env is included for environment variable loa…
2025-02-25 17:16:58 +00:00
asminkarki012
edbd08be8a docs: Ensure --env-file .env is included for environment variable loading 2025-02-25 21:52:39 +05:45
ManishMadan2882
caed6df53b (feat:stream) save conversations optionally 2025-02-25 17:32:35 +05:30
ManishMadan2882
d823fba60b Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-02-25 16:23:55 +05:30
ManishMadan2882
92c8abe65d (fix:sharedConv) makes sure that response state updates 2025-02-25 16:23:35 +05:30
Alex
91e966b480 Merge pull request #1650 from arc53/dependabot/pip/application/transformers-4.49.0
build(deps): bump transformers from 4.48.0 to 4.49.0 in /application
2025-02-25 08:51:41 +00:00
Siddhant Rai
1f0b779c64 refactor: folder restructure for agent based workflow 2025-02-25 09:03:45 +05:30
GH Action - Upstream Sync
0ccd76074a Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-02-25 01:22:53 +00:00
Alex
07c6dcab4a Merge pull request #1652 from arc53/dependabot/pip/application/google-genai-1.3.0
build(deps): bump google-genai from 0.5.0 to 1.3.0 in /application
2025-02-24 22:34:16 +00:00
Alex
84cbc1201c fix: googles update 2025-02-24 22:30:09 +00:00
dependabot[bot]
495bbc2aba build(deps): bump google-genai from 0.5.0 to 1.3.0 in /application
Bumps [google-genai](https://github.com/googleapis/python-genai) from 0.5.0 to 1.3.0.
- [Release notes](https://github.com/googleapis/python-genai/releases)
- [Changelog](https://github.com/googleapis/python-genai/blob/main/CHANGELOG.md)
- [Commits](https://github.com/googleapis/python-genai/compare/v0.5.0...v1.3.0)

---
updated-dependencies:
- dependency-name: google-genai
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 22:24:08 +00:00
dependabot[bot]
cb0bceacfa build(deps): bump elasticsearch from 8.17.0 to 8.17.1 in /application
Bumps [elasticsearch](https://github.com/elastic/elasticsearch-py) from 8.17.0 to 8.17.1.
- [Release notes](https://github.com/elastic/elasticsearch-py/releases)
- [Commits](https://github.com/elastic/elasticsearch-py/compare/v8.17.0...v8.17.1)

---
updated-dependencies:
- dependency-name: elasticsearch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 22:23:48 +00:00
Alex
6799050718 Merge pull request #1601 from arc53/dependabot/pip/application/pydantic-2.10.6
build(deps): bump pydantic from 2.10.4 to 2.10.6 in /application
2025-02-24 22:23:46 +00:00
dependabot[bot]
4b892e8939 build(deps): bump transformers from 4.48.0 to 4.49.0 in /application
Bumps [transformers](https://github.com/huggingface/transformers) from 4.48.0 to 4.49.0.
- [Release notes](https://github.com/huggingface/transformers/releases)
- [Commits](https://github.com/huggingface/transformers/compare/v4.48.0...v4.49.0)

---
updated-dependencies:
- dependency-name: transformers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 22:23:30 +00:00
Alex
674001b499 Merge pull request #1583 from arc53/dependabot/pip/application/openapi-schema-validator-0.6.3
build(deps): bump openapi-schema-validator from 0.6.2 to 0.6.3 in /application
2025-02-24 22:23:27 +00:00
ManishMadan2882
c730777134 (fix:bubble) keeping feedback visible once submitted 2025-02-25 00:51:33 +05:30
ManishMadan2882
8148876249 (feat:message analytics) count individual queries 2025-02-25 00:45:19 +05:30
ManishMadan2882
4cf946f856 (feat:feedback) timestamp feedback 2025-02-24 18:53:29 +05:30
ManishMadan2882
05706f1641 (feat:feedback and tokens) count apiKey docs separately 2025-02-24 17:24:53 +05:30
Siddhant Rai
6fed84958e feat: agent-retriever workflow + query rephrase 2025-02-24 16:41:57 +05:30
ManishMadan2882
64011c5988 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-02-24 16:28:44 +05:30
ManishMadan2882
3e02d5a56f (feat:conv) save the conv with key 2025-02-24 16:28:24 +05:30
Alex
14f57bc3a4 Update README.md 2025-02-23 15:30:59 +00:00
aidanbennettjones
ac8f1b9aa3 Merge branch 'arc53:main' into AidanComponentEditChat 2025-02-21 15:02:39 -05:00
Alex
104c6ef457 Merge pull request #1645 from ManishMadan2882/main
Settings: Improving table layout
2025-02-20 22:47:25 +00:00
ManishMadan2882
84661cea36 lint 2025-02-21 00:54:06 +05:30
ManishMadan2882
c2b0ed85d2 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-02-21 00:42:56 +05:30
ManishMadan2882
5a081f2419 (feat/docs) prevent event bubble 2025-02-21 00:42:27 +05:30
ManishMadan2882
88016f9c35 (fix/chatbots) prevent overflow 2025-02-21 00:41:30 +05:30
ManishMadan2882
0d56e62bb8 (fix/tables) responsiveness issues 2025-02-20 14:48:16 +05:30
GH Action - Upstream Sync
567756edd3 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-02-20 01:21:11 +00:00
ManishMadan2882
7cc0a3620e (fix:docs) consistency 2025-02-20 03:33:35 +05:30
ManishMadan2882
b5587e458f Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-02-20 01:39:37 +05:30
ManishMadan2882
b22d965b7b (fix:chatbots) ui 2025-02-20 01:39:25 +05:30
Alex
cc0b41ddfb Merge pull request #1642 from siiddhantt/fix/minor-bugs
fix: minor bugs and enhancement
2025-02-19 16:16:05 +00:00
ManishMadan2882
006aeeebb0 (fix:typo) copy 2025-02-19 16:56:15 +05:30
ManishMadan2882
3cfb1abf62 (fix/merge) revert dropdown skeletons 2025-02-19 16:55:36 +05:30
ManishMadan2882
e1da69040d (fix/merge error) tool config modal 2025-02-19 16:44:35 +05:30
Siddhant Rai
5924693e90 fix: merge errors 2025-02-19 14:37:47 +05:30
Siddhant Rai
9ee7d659df Merge branch 'main' into fix/minor-bugs 2025-02-19 14:16:56 +05:30
Siddhant Rai
ac1b1c3cdd feat: add loading spinner to AddToolModal and improve label spacing in General settings 2025-02-19 13:58:40 +05:30
Alex
8440138ba0 Merge pull request #1641 from ManishMadan2882/main
Refactor: Apply base modal for UI consitency
2025-02-18 23:42:06 +00:00
ManishMadan2882
877b44ec0a (lint) 2025-02-19 04:49:22 +05:30
ManishMadan2882
cc4acb8766 (feat:createAPIModal): UI inconsistency 2025-02-19 04:38:49 +05:30
ManishMadan2882
3aa85bb51c (refactor:modals) reuse wrapper modal 2025-02-19 04:35:33 +05:30
ManishMadan2882
4e948d8bff (refactor:tools modal) reuse wrapper modal 2025-02-19 04:15:31 +05:30
ManishMadan2882
28489d244c (feat:input) consistent colors 2025-02-19 04:10:14 +05:30
ManishMadan2882
acf3dd2762 Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-02-19 04:01:23 +05:30
ManishMadan2882
8589303753 (feat:consitency)modals, dropdowns 2025-02-19 04:01:14 +05:30
ManishMadan2882
0d9fc26119 (refactor): purge unused files 2025-02-19 03:39:15 +05:30
Alex
9dd63c1da4 Merge pull request #1636 from arc53/dependabot/pip/application/duckduckgo-search-7.4.2
build(deps): bump duckduckgo-search from 6.3.0 to 7.4.2 in /application
2025-02-18 21:55:44 +00:00
aidanbennettjones
7ff03ab098 Enables "Enter" Key Functionality for Edit Chat Submission 2025-02-18 15:58:37 -05:00
Alex
750345d209 feat: architecrure guide 2025-02-18 14:51:17 +00:00
Alex
03ee16f5ca Update _app.mdx 2025-02-18 09:09:37 +00:00
Alex
586fc80c19 Merge pull request #1640 from ManishMadan2882/docs 2025-02-18 08:54:28 +00:00
ManishMadan2882
13cd221fe5 (feat:widget) udpate docs 2025-02-18 14:19:53 +05:30
Siddhant Rai
f35af54e9f refactor: clean up code and improve UI elements in various components 2025-02-18 13:10:35 +05:30
Alex
67e37f1ce1 bump docs widget docs 2025-02-17 23:46:23 +00:00
ManishMadan2882
49ff27a5fe Merge branch 'main' of https://github.com/manishmadan2882/docsgpt 2025-02-18 04:22:32 +05:30
ManishMadan2882
04730ba8c7 (feat:theme)exacting the designs 2025-02-18 04:20:20 +05:30
Alex
b2fcf91958 Merge pull request #1637 from arc53/feat/sources-in-widget
Feat/sources in widget
2025-02-17 21:55:02 +00:00
ManishMadan2882
b78d2bd4b1 (feat:widget) add optional sources 2025-02-18 02:09:13 +05:30
dependabot[bot]
2612ce5ad9 build(deps): bump duckduckgo-search from 6.3.0 to 7.4.2 in /application
Bumps [duckduckgo-search](https://github.com/deedy5/duckduckgo_search) from 6.3.0 to 7.4.2.
- [Release notes](https://github.com/deedy5/duckduckgo_search/releases)
- [Commits](https://github.com/deedy5/duckduckgo_search/compare/v6.3.0...v7.4.2)

---
updated-dependencies:
- dependency-name: duckduckgo-search
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 20:34:44 +00:00
Manish Madan
798913740e Merge pull request #1317 from utin-francis-peter/feat/sources-in-react-widget
Feat/sources in react widget
2025-02-17 16:26:43 +05:30
Manish Madan
7d0445cc20 Merge branch 'main' into feat/sources-in-react-widget 2025-02-17 15:41:34 +05:30
Alex
361f6895ee Merge pull request #1514 from ayaan-qadri/Fixing-1513 2025-02-16 20:10:33 +00:00
Alex
47442f4f58 fix: bandit workflow only on main repo 2025-02-15 15:06:18 +00:00
dependabot[bot]
307c2e1682 build(deps): bump openapi-schema-validator in /application
Bumps [openapi-schema-validator](https://github.com/python-openapi/openapi-schema-validator) from 0.6.2 to 0.6.3.
- [Release notes](https://github.com/python-openapi/openapi-schema-validator/releases)
- [Commits](https://github.com/python-openapi/openapi-schema-validator/compare/0.6.2...0.6.3)

---
updated-dependencies:
- dependency-name: openapi-schema-validator
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-14 14:49:26 +00:00
Alex
2190359e4d Merge pull request #1631 from arc53/dependabot/pip/application/anthropic-0.45.2
build(deps): bump anthropic from 0.40.0 to 0.45.2 in /application
2025-02-14 14:47:32 +00:00
Alex
27a933c7b7 Merge pull request #1628 from ManishMadan2882/main
Smoother transition in settings
2025-02-14 14:47:16 +00:00
ManishMadan2882
71970a0d1d (feat:transit): reduce delay to 250 2025-02-14 20:06:50 +05:30
ManishMadan2882
7661273cfd (fix/logs) append loader 2025-02-14 19:50:19 +05:30
ManishMadan2882
cd06334049 (feat:transitions) uniform color and animation 2025-02-14 17:38:58 +05:30
Alex
05319e36a7 Merge pull request #1630 from siiddhantt/feat/show-tool-execution
feat: tool calls tracking
2025-02-14 10:27:15 +00:00
ManishMadan2882
200a3b81e5 (feat:loaders) loader for logs, dropdown 2025-02-14 02:20:29 +05:30
dependabot[bot]
5647755762 build(deps): bump anthropic from 0.40.0 to 0.45.2 in /application
Bumps [anthropic](https://github.com/anthropics/anthropic-sdk-python) from 0.40.0 to 0.45.2.
- [Release notes](https://github.com/anthropics/anthropic-sdk-python/releases)
- [Changelog](https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md)
- [Commits](https://github.com/anthropics/anthropic-sdk-python/compare/v0.40.0...v0.45.2)

---
updated-dependencies:
- dependency-name: anthropic
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-13 20:24:49 +00:00
ManishMadan2882
adb2947b52 (feat:transitions): reshaped the tablular loaders 2025-02-14 01:01:07 +05:30
Siddhant Rai
7b05afab74 refactor: formatting + token limit for gemini-2.0-flash-exp 2025-02-14 00:27:27 +05:30
Siddhant Rai
5cf5bed6a8 feat: enhance tool call handling with structured message cleaning and improved UI display 2025-02-14 00:15:01 +05:30
Alex
095cb58df3 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-02-13 11:48:59 +00:00
ManishMadan2882
181bf69994 (feat:transitions) custom hook to loading state 2025-02-13 17:16:17 +05:30
Alex
927b513bf8 fix: error warning 2025-02-13 11:44:05 +00:00
Alex
05801cd90c Update README.md 2025-02-13 11:37:47 +00:00
Alex
a8ac00469d fix: bandit 2025-02-13 11:30:02 +00:00
Alex
1e3ae948a2 feat: add static code analysis 2025-02-13 11:25:03 +00:00
Alex
2d8aa229c6 fix: used for security comment 2025-02-13 11:10:44 +00:00
Alex
84f4812189 Update CONTRIBUTING.md 2025-02-13 10:48:49 +00:00
Siddhant Rai
8a3612e56c fix: improve tool call handling and UI adjustments 2025-02-13 05:02:10 +05:30
ManishMadan2882
d08861fb30 (fix/docs) revert effected portions 2025-02-13 01:16:11 +05:30
ManishMadan2882
ecc0f9d9f5 Merge branch 'main' of https://github.com/arc53/docsgpt 2025-02-13 00:17:58 +05:30
Siddhant Rai
e209699b19 feat: add tool calls tracking and show in frontend 2025-02-12 21:47:47 +05:30
Alex
c8d8690cfd Update README.md 2025-02-12 16:09:53 +00:00
Alex
59d05b698a Update README.md 2025-02-12 16:09:22 +00:00
Alex
1bcbfc8d18 Merge pull request #1629 from arc53/easy-deploy 2025-02-12 15:13:36 +00:00
Pavel
bafed63d40 super-final 2025-02-12 17:41:59 +03:00
ManishMadan2882
828a056e21 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2025-02-12 20:10:36 +05:30
ManishMadan2882
9424f6303a (feat:upload) smooth transitions on advanced fields 2025-02-12 20:10:21 +05:30
Pavel
c0dc5c3a4d finished 2025-02-12 17:33:11 +03:00
Alex
d0fb3da285 Merge pull request #1626 from arc53/dependabot/pip/application/prompt-toolkit-3.0.50
build(deps): bump prompt-toolkit from 3.0.48 to 3.0.50 in /application
2025-02-12 13:49:50 +00:00
Pavel
ccce01800d index-desc 2025-02-12 14:43:24 +03:00
Pavel
b44b9d8016 models+guide-upd+extentions 2025-02-12 14:38:21 +03:00
dependabot[bot]
7592c45bd9 build(deps): bump prompt-toolkit from 3.0.48 to 3.0.50 in /application
Bumps [prompt-toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit) from 3.0.48 to 3.0.50.
- [Release notes](https://github.com/prompt-toolkit/python-prompt-toolkit/releases)
- [Changelog](https://github.com/prompt-toolkit/python-prompt-toolkit/blob/master/CHANGELOG)
- [Commits](https://github.com/prompt-toolkit/python-prompt-toolkit/compare/3.0.48...3.0.50)

---
updated-dependencies:
- dependency-name: prompt-toolkit
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-12 10:32:09 +00:00
Alex
b024936ad7 Update devc-welcome.md 2025-02-12 09:48:21 +00:00
Manish Madan
be2246283f Merge branch 'arc53:main' into main 2025-02-12 00:00:23 +05:30
ManishMadan2882
a7969f6ec8 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2025-02-11 23:58:14 +05:30
ManishMadan2882
ac447dd055 (feat:settings) smoother transitions 2025-02-11 23:55:30 +05:30
Pavel
28cdbe407c tools-remove 2025-02-11 21:19:09 +03:00
Alex
bf486082c9 fix: centering 2025-02-11 17:27:45 +00:00
Alex
41290b463c feat: cards 2025-02-11 17:17:12 +00:00
Pavel
385ebe234e setup+development-docs 2025-02-11 19:17:59 +03:00
Alex
72e9fcc895 Update README.md 2025-02-11 16:08:48 +00:00
Alex
5f42e4ac3f fix: default file codespace 2025-02-11 09:53:26 +00:00
Alex
926ec89f48 Create devc-welcome.md 2025-02-11 09:48:45 +00:00
GH Action - Upstream Sync
440e1b9156 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-02-11 01:19:54 +00:00
ManishMadan2882
ea0a6e413d (feat:bubble) formattedtable/inline code 2025-02-11 02:07:54 +05:30
Alex
0de4241b56 Merge pull request #1625 from arc53/handle-bad-tool-names
Handle bad tool names
2025-02-10 17:25:45 +00:00
Alex
6e8a53a204 fix: open new tool after its added 2025-02-10 16:52:59 +00:00
Alex
60772889d5 fix: handle bad tool name input 2025-02-10 16:20:37 +00:00
Alex
7db7c9e978 Merge pull request #1612 from arc53/dependabot/pip/application/marshmallow-3.26.1
build(deps): bump marshmallow from 3.24.1 to 3.26.1 in /application
2025-02-10 13:19:04 +00:00
dependabot[bot]
d85bf67103 build(deps): bump marshmallow from 3.24.1 to 3.26.1 in /application
Bumps [marshmallow](https://github.com/marshmallow-code/marshmallow) from 3.24.1 to 3.26.1.
- [Changelog](https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst)
- [Commits](https://github.com/marshmallow-code/marshmallow/compare/3.24.1...3.26.1)

---
updated-dependencies:
- dependency-name: marshmallow
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 13:06:17 +00:00
Alex
926f2e9f48 Merge pull request #1621 from ManishMadan2882/main
Refactor Upload
2025-02-10 13:04:53 +00:00
ManishMadan2882
2019f29e8c (clean) mock changes 2025-02-10 16:02:37 +05:30
ManishMadan2882
3b45b63d2a (fix:upload) ui adjust 2025-02-10 16:02:02 +05:30
Alex
1c08c53121 Merge pull request #1624 from siiddhantt/feat/edit-chunks
feat: view chunks for docs and add/delete them
2025-02-10 09:48:11 +00:00
Siddhant Rai
7623bde159 feat: add update chunk API endpoint and service method 2025-02-10 09:36:18 +05:30
GH Action - Upstream Sync
1ed0f5e78d Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-02-10 01:21:14 +00:00
Piotr Idzik
568ab33a37 style: use underscore for an unused loop variable (#1593)
This addresses the SC2034 warning.
2025-02-09 22:56:52 +00:00
Alex
f639b052e3 fix: remove debugging code 2025-02-09 12:08:19 +00:00
Alex
56f91948f8 feat: improve logging 2025-02-09 12:05:37 +00:00
GH Action - Upstream Sync
6c5e481318 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-02-09 01:24:07 +00:00
ManishMadan2882
f487f1e8c1 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2025-02-09 01:31:15 +05:30
ManishMadan2882
68ee9743fe (feat:upload) advanced fields 2025-02-09 01:31:01 +05:30
Alex
f4cb48ed0d fix: logging 2025-02-08 19:29:54 +00:00
Alex
ad77fe1116 fix: logging in submodules 2025-02-08 18:07:03 +00:00
Alex
28a0667da6 fix: minor logging issue 2025-02-08 12:49:42 +00:00
Siddhant Rai
1f0366c989 Merge branch 'feat/edit-chunks' of https://github.com/siiddhantt/DocsGPT into feat/edit-chunks 2025-02-08 15:00:20 +05:30
Siddhant Rai
3a51922650 fix: linting error 2025-02-08 15:00:02 +05:30
Siddhant Rai
82b2be5046 Merge branch 'main' into feat/edit-chunks 2025-02-08 14:56:34 +05:30
Siddhant Rai
0fc9718c35 feat: loading state and spinner + delete chunk option 2025-02-08 14:52:32 +05:30
GH Action - Upstream Sync
976733a3c3 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-02-08 01:17:57 +00:00
Alex
5d17072709 fix: readme space 2025-02-07 19:22:01 +00:00
Alex
fbad183d39 fix: post create devcontainers 2025-02-07 18:44:24 +00:00
Alex
7356a2ff07 fix: minor docker fixes 2025-02-07 18:39:07 +00:00
Alex
6ff948c107 fix: dockerfile in devcontainer build dir fix 2025-02-07 14:35:44 +00:00
Alex
e3ebce117b fix: devcontainer paths 2 2025-02-07 14:34:19 +00:00
Alex
ce69b09730 fix: devcontainer paths 2025-02-07 14:30:15 +00:00
Alex
c823cef405 fix: devcontainer codespaces correct api address 2025-02-07 14:25:09 +00:00
Siddhant Rai
0379b81d43 feat: view and add document chunks for mongodb and faiss 2025-02-07 19:39:07 +05:30
ManishMadan2882
6a997163fd Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2025-02-07 19:37:39 +05:30
ManishMadan2882
93f8466230 (feat:Upload): required form fields 2025-02-07 19:37:24 +05:30
ManishMadan2882
114c8d3c22 (feat:Input) required prop 2025-02-07 17:59:28 +05:30
GH Action - Upstream Sync
3e77e79194 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-02-07 01:20:29 +00:00
dependabot[bot]
ca91d36979 build(deps): bump pydantic from 2.10.4 to 2.10.6 in /application
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.10.4 to 2.10.6.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.10.4...v2.10.6)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-06 20:01:07 +00:00
Alex
d47232246a fix: remove old pypdf 2025-02-06 19:59:42 +00:00
Alex
d819222cf7 fix: remove unused import 2025-02-06 19:46:11 +00:00
Alex
0c4c4d5622 fix: improve error logging 2025-02-06 19:44:09 +00:00
Alex
ad051ed083 fix: docker compose files 2025-02-06 18:51:17 +00:00
ManishMadan2882
1aa0af3e58 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2025-02-06 20:16:31 +05:30
ManishMadan2882
72556b37f5 (refactor:upload) simplify call to /api/remote 2025-02-06 20:16:07 +05:30
Manish Madan
0bddae5775 Merge branch 'arc53:main' into main 2025-02-06 04:09:08 +05:30
ManishMadan2882
1f1e710a6d Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2025-02-06 04:07:51 +05:30
ManishMadan2882
b57d418b98 (refactor:upload) remove redundant types 2025-02-06 04:04:18 +05:30
Alex
0913c43219 feat: edit deploymen files locations 2025-02-05 18:04:41 +00:00
Alex
d754a43fba feat: devcontainer 2025-02-05 11:54:06 +00:00
Manish Madan
f97b56a87b (fix): date formatting (#1617) 2025-02-05 10:20:14 +00:00
Michele Grimaldi
2f78398914 Fixing issues #1445 (#1603)
* Fixing issues #1445

* Fixed issue #1445
2025-02-05 08:52:18 +00:00
Manish Madan
81b9a34e5e Merge branch 'arc53:main' into main 2025-02-05 03:33:20 +05:30
Alex
73ba078efc fix: init push to ghcr 2025-02-04 22:02:56 +00:00
ManishMadan2882
1ffe0ad85c (fix): date formatting 2025-02-05 03:31:17 +05:30
Alex
797b36a81e fix: container name 2025-02-04 21:56:26 +00:00
Alex
b82c14892e Arm builds (#1615)
* fix: matrix build

* fix: trigger build

* fix: trigger wrong name

* fix: runner name

* fix: manifest fix

* fix: yaml error

* fix: manifest build

* fix: build error

* feat: multi arch containers
2025-02-04 21:02:44 +00:00
Alex
a8891dabec feat: docker arm64 2025-02-04 17:46:44 +00:00
Alex
86ba797665 Merge pull request #1614 from arc53/documentation-footer
footer text with links
2025-02-04 17:35:22 +00:00
Pavel
3830dcb3f3 footer text with links 2025-02-04 19:42:24 +03:00
Alex
c20fe7a773 Update docker-compose.yaml 2025-02-03 13:21:28 +00:00
Alex
fa01f86b19 Merge pull request #1608 from siiddhantt/feat/api-tool
feat: API Tool
2025-02-03 11:48:57 +00:00
Alex
9583095734 Merge pull request #1586 from aalghooneh/main
websocket implementation of elevenlabs
2025-02-03 10:00:00 +00:00
Siddhant Rai
a5b2eb3a28 feat: api tool config section + agent refactor for more llm fields 2025-02-03 06:07:10 +05:30
Alex
72f2784588 Merge pull request #1610 from ManishMadan2882/main
Refactor: Ingestor types for remote resources in Upload Component
2025-02-01 11:30:54 +00:00
ManishMadan2882
5c5b730bb8 purge logs, unused 2025-02-01 00:40:30 +05:30
ManishMadan2882
b9ec6b4315 (refactor:upload) separate name from the configurations 2025-02-01 00:08:01 +05:30
ManishMadan2882
4b83fa3549 (refactor:remote types) enhance abstraction 2025-01-31 06:29:35 +05:30
ManishMadan2882
a69e81076a (feat:components) add label props 2025-01-31 06:23:54 +05:30
ManishMadan2882
4cd2b73f19 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2025-01-31 00:48:53 +05:30
ManishMadan2882
4ea0bebd92 (refactor:remote uploads) dynamic ingestor types 2025-01-31 00:48:03 +05:30
Alex
bbcdae25a1 Update README.md 2025-01-29 15:33:06 +00:00
Ayaan
220a801138 Requested changes 2025-01-29 20:29:39 +05:30
Ayaan
c6821d9cc3 Improve edit message interface 2025-01-29 20:11:55 +05:30
Ayaan
8b59245e6a Decreased margin right for message hover button 2025-01-29 20:06:10 +05:30
Manish Madan
9b5ee2e694 Merge pull request #1606 from arc53/dependabot/npm_and_yarn/frontend/reduxjs/toolkit-2.5.1
build(deps): bump @reduxjs/toolkit from 2.2.7 to 2.5.1 in /frontend
2025-01-29 16:57:17 +05:30
dependabot[bot]
e932d86b69 build(deps): bump @reduxjs/toolkit from 2.2.7 to 2.5.1 in /frontend
Bumps [@reduxjs/toolkit](https://github.com/reduxjs/redux-toolkit) from 2.2.7 to 2.5.1.
- [Release notes](https://github.com/reduxjs/redux-toolkit/releases)
- [Commits](https://github.com/reduxjs/redux-toolkit/compare/v2.2.7...v2.5.1)

---
updated-dependencies:
- dependency-name: "@reduxjs/toolkit"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-29 09:38:06 +00:00
Manish Madan
96f05311b8 Merge pull request #1596 from arc53/dependabot/npm_and_yarn/frontend/vite-5.4.14
build(deps-dev): bump vite from 5.4.11 to 5.4.14 in /frontend
2025-01-29 14:58:18 +05:30
dependabot[bot]
3e2d68782c build(deps-dev): bump vite from 5.4.11 to 5.4.14 in /frontend
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.11 to 5.4.14.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.14/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.14/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-29 09:22:13 +00:00
Manish Madan
db2a4349cb Merge pull request #1590 from arc53/dependabot/npm_and_yarn/frontend/katex-0.16.21
build(deps): bump katex from 0.16.11 to 0.16.21 in /frontend
2025-01-29 14:46:47 +05:30
Ahmad Alghooneh
2014fe83a3 fixed the import error 2025-01-28 18:29:56 -05:00
Alex
55439aab5e Merge pull request #1607 from ManishMadan2882/main
Perfecting Settings/Documents
2025-01-28 10:08:32 +00:00
ManishMadan2882
8c91864f1c Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2025-01-28 13:53:05 +05:30
Siddhant Rai
9319ec5bb2 feat: api tool + fix google ai no parameters error 2025-01-28 09:53:32 +05:30
ManishMadan2882
83e4023c19 (feat:settings/docs) confirm on delete 2025-01-28 04:50:28 +05:30
GH Action - Upstream Sync
a14701bdd2 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-01-27 01:20:14 +00:00
ManishMadan2882
379dd011ff (fix:settings/docs) avoid refresh on modal close 2025-01-27 03:32:32 +05:30
ManishMadan2882
49b3ccfe2b Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2025-01-27 03:01:56 +05:30
ManishMadan2882
16608370a6 (feat:settings)docs table design perfection 2025-01-27 03:01:39 +05:30
Alex
53015c9d8e Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-01-26 15:43:01 +00:00
Alex
6d68b89ea0 fix: history bug on 2nd message 2025-01-26 15:42:47 +00:00
Alex
254582da89 Update README.md 2025-01-26 13:10:29 +00:00
Alex
af54b7cfef Update README.md 2025-01-26 13:06:00 +00:00
GH Action - Upstream Sync
f13149db8e Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-01-26 01:21:17 +00:00
Alex
79912a4067 Update README.md 2025-01-25 20:55:24 +00:00
Alex
c0b6b85ec0 Merge pull request #1604 from arc53/update-docs-readme
Update docs readme
2025-01-25 20:47:10 +00:00
Alex
a4895f5166 fix: add links to dev env instructions 2025-01-25 20:44:56 +00:00
Alex
4d7670a12e fix: name 2025-01-25 20:41:59 +00:00
Alex
8c21954049 feat: improved docs 2025-01-25 20:36:10 +00:00
Alex
132fab1c03 feat: improve readme 2025-01-25 20:14:23 +00:00
Alex
e7b8d71010 Update index.mdx 2025-01-25 15:10:30 +00:00
Alex
fff8cfdee0 Update index.mdx 2025-01-25 15:08:36 +00:00
Alex
3e45a3b4d8 Update README.md 2025-01-25 14:39:38 +00:00
GH Action - Upstream Sync
7c66e21356 Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-01-25 01:15:23 +00:00
Alex
c477a49777 Merge pull request #1600 from arc53/postgres-tool
feat: postgres tool
2025-01-24 15:11:08 +00:00
Alex
5a38c09f8d feat: postgres tool 2025-01-24 15:06:16 +00:00
ManishMadan2882
fe4657b122 (fix:analytics) updated to show feedback 2025-01-24 02:46:57 +05:30
GH Action - Upstream Sync
c1dcd2e57d Merge branch 'main' of https://github.com/arc53/DocsGPT 2025-01-23 01:18:56 +00:00
ManishMadan2882
26d993674e Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2025-01-23 02:50:52 +05:30
ManishMadan2882
9d475001ee (feat:chatbots) confirm before deletion 2025-01-23 02:50:24 +05:30
ManishMadan2882
34eb25b0ba (feat:documents) design perfection 2025-01-23 01:15:01 +05:30
ManishMadan2882
716b935177 (feat:documents) formatting date 2025-01-23 01:12:14 +05:30
Alex
92528af600 Update README.md 2025-01-22 19:14:40 +00:00
Alex
2606e6b82d Merge pull request #1594 from arc53/googleai-compatability-tools
Googleai compatability tools
2025-01-21 09:53:56 +00:00
Alex
b965ce7376 Merge branch 'main' into googleai-compatability-tools 2025-01-21 09:49:09 +00:00
Alex
048f1b53c0 Merge pull request #1581 from siiddhantt/refactor/parser-and-handler-in-tools
refactor: tool agent for action parser and handlers
2025-01-21 09:48:22 +00:00
Alex
43340c4aa8 fix: finale test 2025-01-21 09:44:53 +00:00
Alex
9f073fcbcf fix: tests 2025-01-21 09:39:02 +00:00
Alex
c0c60a4875 fix: ruff linting 2025-01-21 09:37:11 +00:00
Alex
94f682e461 fix roles in retriever layer 2025-01-21 09:31:38 +00:00
Siddhant Rai
1086bfe1ba fix: wrong role in req messages 2025-01-21 07:19:02 +05:30
Siddhant Rai
d441d5763f fix: decorators + client error 2025-01-20 19:44:14 +05:30
Alex
c0a2daa3a3 Delete HACKTOBERFEST.md 2025-01-20 13:09:38 +00:00
Alex
3de51b6a65 Merge pull request #1588 from arc53/web_loader_fix
web loader fix
2025-01-20 12:45:00 +00:00
Alex
a741388447 fix: system message 2025-01-19 22:21:50 +00:00
Alex
1ea9b87498 Merge pull request #1591 from ManishMadan2882/main
Sync locales
2025-01-18 22:30:18 +00:00
ManishMadan2882
0cab007c37 (fix:locale) missing text 2025-01-19 01:37:14 +05:30
Siddhant Rai
4a331db5fc fix: api_key attribute 2025-01-18 20:00:51 +05:30
Siddhant Rai
904b0bf2da fix: GoogleLLM, agent and handler according to the new genai SDK 2025-01-18 19:56:25 +05:30
ManishMadan2882
90425542f8 (fix:locales) missing translations 2025-01-18 18:58:12 +05:30
Alex
eae0141d50 Merge pull request #1589 from arc53/dependabot/npm_and_yarn/docs/katex-0.16.21
build(deps): bump katex from 0.16.10 to 0.16.21 in /docs
2025-01-18 12:37:29 +00:00
ManishMadan2882
9594c82005 (purge) unused file 2025-01-18 03:58:29 +05:30
ManishMadan2882
657aacceb5 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2025-01-18 03:46:21 +05:30
ManishMadan2882
a35dbf99a6 (sync:locales) with static content 2025-01-18 03:46:05 +05:30
dependabot[bot]
0d80f5d752 build(deps): bump katex from 0.16.11 to 0.16.21 in /frontend
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.16.11 to 0.16.21.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.11...v0.16.21)

---
updated-dependencies:
- dependency-name: katex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-17 21:38:19 +00:00
dependabot[bot]
b36f4dfd08 build(deps): bump katex from 0.16.10 to 0.16.21 in /docs
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.16.10 to 0.16.21.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.10...v0.16.21)

---
updated-dependencies:
- dependency-name: katex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-17 21:34:08 +00:00
Pavel
fddee69f92 web loader fix
Changes web loader to the correct output.
2025-01-17 19:13:23 +03:00
Siddhant Rai
ec270a3b54 update: requirements 2025-01-17 09:51:11 +05:30
Siddhant Rai
c97d1e3363 fix: google parser, llm handler and other errors 2025-01-17 09:22:41 +05:30
Ahmad Reza Alghooneh
554c1ed1f7 Merge branch 'main' into main 2025-01-16 20:42:54 -05:00
Alex
a90b286482 Merge pull request #1584 from arc53/dependabot/pip/application/primp-0.10.0
build(deps): bump primp from 0.9.3 to 0.10.0 in /application
2025-01-16 13:49:01 +00:00
ManishMadan2882
cc78ea7222 (fix:locales) sync static text 2025-01-16 18:24:27 +05:30
Ahmad Reza Alghooneh
7f2cc3b232 Delete application/tts/output_audio.mp3 2025-01-16 00:45:41 -05:00
Ahmad Alghooneh
00b10f17c1 eleven labs 2025-01-16 00:41:09 -05:00
dependabot[bot]
cab6305462 build(deps): bump primp from 0.9.3 to 0.10.0 in /application
Bumps [primp](https://github.com/deedy5/primp) from 0.9.3 to 0.10.0.
- [Release notes](https://github.com/deedy5/primp/releases)
- [Commits](https://github.com/deedy5/primp/compare/v0.9.3...v0.10.0)

---
updated-dependencies:
- dependency-name: primp
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-15 20:59:45 +00:00
Alex
7218403ad7 Merge pull request #1582 from arc53/scraper-2
scraper with markdownify
2025-01-15 12:15:37 +00:00
Siddhant Rai
811dfecf98 refactor: tool agent for action parser and handlers 2025-01-15 16:35:26 +05:30
Alex
acbbf30a0e Merge pull request #1577 from arc53/dependabot/pip/application/flask-3.1.0
build(deps): bump flask from 3.0.3 to 3.1.0 in /application
2025-01-15 10:52:57 +00:00
Alex
4d29f8f679 Merge pull request #1578 from arc53/dependabot/pip/application/transformers-4.48.0
build(deps): bump transformers from 4.47.1 to 4.48.0 in /application
2025-01-15 10:52:42 +00:00
Pavel
13fcbe3e74 scraper with markdownify 2025-01-15 01:08:09 +03:00
dependabot[bot]
850b79f459 build(deps): bump transformers from 4.47.1 to 4.48.0 in /application
Bumps [transformers](https://github.com/huggingface/transformers) from 4.47.1 to 4.48.0.
- [Release notes](https://github.com/huggingface/transformers/releases)
- [Commits](https://github.com/huggingface/transformers/compare/v4.47.1...v4.48.0)

---
updated-dependencies:
- dependency-name: transformers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-14 20:35:19 +00:00
dependabot[bot]
9e6f970bc4 build(deps): bump flask from 3.0.3 to 3.1.0 in /application
Bumps [flask](https://github.com/pallets/flask) from 3.0.3 to 3.1.0.
- [Release notes](https://github.com/pallets/flask/releases)
- [Changelog](https://github.com/pallets/flask/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/flask/compare/3.0.3...3.1.0)

---
updated-dependencies:
- dependency-name: flask
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-14 20:35:08 +00:00
ManishMadan2882
cbcb717aee (feat:locals) sync with en.json 2025-01-14 16:52:35 +05:30
ManishMadan2882
5aea46c214 (feat:settings) locale lang for analytics and logs 2025-01-14 15:49:01 +05:30
Alex
6394720c5a Merge pull request #1570 from ManishMadan2882/basic-ui
Widget fixes
2025-01-13 23:46:34 +00:00
Alex
6af627ea97 Merge pull request #1574 from arc53/dependabot/pip/application/langsmith-0.2.10
build(deps): bump langsmith from 0.2.6 to 0.2.10 in /application
2025-01-13 23:41:27 +00:00
Alex
85277f2b4f Merge pull request #1572 from arc53/dependabot/pip/application/openapi3-parser-1.1.19
build(deps): bump openapi3-parser from 1.1.18 to 1.1.19 in /application
2025-01-13 23:40:51 +00:00
Alex
7b0876204e Merge pull request #1571 from arc53/dependabot/pip/application/tqdm-4.67.1
build(deps): bump tqdm from 4.66.5 to 4.67.1 in /application
2025-01-13 23:40:28 +00:00
Alex
cf65942504 Merge pull request #1573 from arc53/dependabot/pip/application/elastic-transport-8.17.0
build(deps): bump elastic-transport from 8.15.1 to 8.17.0 in /application
2025-01-13 23:39:19 +00:00
dependabot[bot]
7369b02bf4 build(deps): bump langsmith from 0.2.6 to 0.2.10 in /application
Bumps [langsmith](https://github.com/langchain-ai/langsmith-sdk) from 0.2.6 to 0.2.10.
- [Release notes](https://github.com/langchain-ai/langsmith-sdk/releases)
- [Commits](https://github.com/langchain-ai/langsmith-sdk/compare/v0.2.6...v0.2.10)

---
updated-dependencies:
- dependency-name: langsmith
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 20:06:32 +00:00
dependabot[bot]
1438fea76b build(deps): bump elastic-transport in /application
Bumps [elastic-transport](https://github.com/elastic/elastic-transport-python) from 8.15.1 to 8.17.0.
- [Release notes](https://github.com/elastic/elastic-transport-python/releases)
- [Changelog](https://github.com/elastic/elastic-transport-python/blob/v8.17.0/CHANGELOG.md)
- [Commits](https://github.com/elastic/elastic-transport-python/compare/v8.15.1...v8.17.0)

---
updated-dependencies:
- dependency-name: elastic-transport
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 20:06:27 +00:00
dependabot[bot]
e0912f0cf0 build(deps): bump openapi3-parser from 1.1.18 to 1.1.19 in /application
Bumps [openapi3-parser](https://github.com/manchenkoff/openapi3-parser) from 1.1.18 to 1.1.19.
- [Release notes](https://github.com/manchenkoff/openapi3-parser/releases)
- [Commits](https://github.com/manchenkoff/openapi3-parser/compare/v1.1.18...v1.1.19)

---
updated-dependencies:
- dependency-name: openapi3-parser
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 20:06:20 +00:00
dependabot[bot]
838525b452 build(deps): bump tqdm from 4.66.5 to 4.67.1 in /application
Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.66.5 to 4.67.1.
- [Release notes](https://github.com/tqdm/tqdm/releases)
- [Commits](https://github.com/tqdm/tqdm/compare/v4.66.5...v4.67.1)

---
updated-dependencies:
- dependency-name: tqdm
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 20:06:18 +00:00
ManishMadan2882
774cbbf47a (fix/widget) centered the toolkit msg 2025-01-13 18:20:08 +05:30
Alex
d15bc6d32c Merge pull request #1569 from arc53/dependabot/pip/application/pillow-11.1.0
build(deps): bump pillow from 10.4.0 to 11.1.0 in /application
2025-01-13 11:57:37 +00:00
Alex
99e0766f53 Merge pull request #1528 from ManishMadan2882/basic-ui
Basic UI
2025-01-13 10:58:37 +00:00
Alex
51225b18b2 add google 2025-01-13 10:37:53 +00:00
Ahmad Alghooneh
96ab01b0c1 commited reqs 2025-01-13 00:53:28 -05:00
Ahmad Alghooneh
a4eb4ea66d initial websocket impl 2025-01-13 00:33:10 -05:00
ManishMadan2882
54819e288a (feat:accessibility) add missing labels, alt text and contrast 2025-01-13 04:53:50 +05:30
ManishMadan2882
ec5fbded4f (fix:pa11y) aria-labels, alt text and contrast^C 2025-01-12 01:22:25 +05:30
dependabot[bot]
f939576311 build(deps): bump pillow from 10.4.0 to 11.1.0 in /application
Bumps [pillow](https://github.com/python-pillow/Pillow) from 10.4.0 to 11.1.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/10.4.0...11.1.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-10 21:58:53 +00:00
Alex
628784da35 Merge pull request #1568 from arc53/dependabot/pip/application/pathable-0.4.4
build(deps): bump pathable from 0.4.3 to 0.4.4 in /application
2025-01-10 21:58:01 +00:00
Alex
9ea3231060 Merge pull request #1567 from arc53/dependabot/pip/application/langchain-openai-0.3.0
build(deps): bump langchain-openai from 0.2.14 to 0.3.0 in /application
2025-01-10 21:57:39 +00:00
Alex
0b7858494f Merge pull request #1566 from arc53/dependabot/pip/application/boto3-1.35.97
build(deps): bump boto3 from 1.34.153 to 1.35.97 in /application
2025-01-10 21:57:18 +00:00
dependabot[bot]
8f98c8a3c9 build(deps): bump pathable from 0.4.3 to 0.4.4 in /application
Bumps [pathable](https://github.com/p1c2u/pathable) from 0.4.3 to 0.4.4.
- [Release notes](https://github.com/p1c2u/pathable/releases)
- [Commits](https://github.com/p1c2u/pathable/compare/0.4.3...0.4.4)

---
updated-dependencies:
- dependency-name: pathable
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-10 20:58:17 +00:00
dependabot[bot]
67f9b3a6e0 build(deps): bump langchain-openai from 0.2.14 to 0.3.0 in /application
Bumps [langchain-openai](https://github.com/langchain-ai/langchain) from 0.2.14 to 0.3.0.
- [Release notes](https://github.com/langchain-ai/langchain/releases)
- [Commits](https://github.com/langchain-ai/langchain/compare/langchain-openai==0.2.14...langchain-openai==0.3.0)

---
updated-dependencies:
- dependency-name: langchain-openai
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-10 20:58:13 +00:00
dependabot[bot]
5defc0a87b build(deps): bump boto3 from 1.34.153 to 1.35.97 in /application
Bumps [boto3](https://github.com/boto/boto3) from 1.34.153 to 1.35.97.
- [Release notes](https://github.com/boto/boto3/releases)
- [Commits](https://github.com/boto/boto3/compare/1.34.153...1.35.97)

---
updated-dependencies:
- dependency-name: boto3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-10 20:58:08 +00:00
Alex
b4bcb09707 Merge pull request #1536 from arc53/dependabot/npm_and_yarn/frontend/tailwindcss-3.4.17
build(deps-dev): bump tailwindcss from 3.4.15 to 3.4.17 in /frontend
2025-01-10 14:43:59 +00:00
Alex
b2d74f66b3 Merge pull request #1541 from arc53/dependabot/npm_and_yarn/frontend/prettier-3.4.2
build(deps-dev): bump prettier from 3.3.3 to 3.4.2 in /frontend
2025-01-10 14:43:40 +00:00
dependabot[bot]
75223e18ee build(deps-dev): bump tailwindcss from 3.4.15 to 3.4.17 in /frontend
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.4.15 to 3.4.17.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/v3.4.17/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.4.15...v3.4.17)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-10 14:31:23 +00:00
dependabot[bot]
4aea9c727d build(deps-dev): bump prettier from 3.3.3 to 3.4.2 in /frontend
Bumps [prettier](https://github.com/prettier/prettier) from 3.3.3 to 3.4.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.3.3...3.4.2)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-10 14:31:21 +00:00
Alex
7d779afcd4 Merge pull request #1561 from arc53/dependabot/npm_and_yarn/frontend/prettier-plugin-tailwindcss-0.6.9
build(deps-dev): bump prettier-plugin-tailwindcss from 0.6.8 to 0.6.9 in /frontend
2025-01-10 14:30:08 +00:00
Alex
5cb7a69a46 Merge pull request #1558 from arc53/dependabot/pip/application/langchain-text-splitters-0.3.5
build(deps): bump langchain-text-splitters from 0.3.4 to 0.3.5 in /application
2025-01-09 23:47:02 +00:00
dependabot[bot]
0e88bfc570 build(deps): bump langchain-text-splitters in /application
Bumps [langchain-text-splitters](https://github.com/langchain-ai/langchain) from 0.3.4 to 0.3.5.
- [Release notes](https://github.com/langchain-ai/langchain/releases)
- [Commits](https://github.com/langchain-ai/langchain/compare/langchain-text-splitters==0.3.4...langchain-text-splitters==0.3.5)

---
updated-dependencies:
- dependency-name: langchain-text-splitters
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-09 23:43:15 +00:00
Alex
48cf56557b Merge pull request #1560 from arc53/dependabot/pip/application/protobuf-5.29.3
build(deps): bump protobuf from 5.28.2 to 5.29.3 in /application
2025-01-09 23:40:27 +00:00
Alex
9c9354cf38 Merge pull request #1557 from arc53/dependabot/pip/application/orjson-3.10.14
build(deps): bump orjson from 3.10.7 to 3.10.14 in /application
2025-01-09 23:27:13 +00:00
Alex
e730ae66ae Merge pull request #1556 from arc53/dependabot/pip/application/qdrant-client-1.12.2
build(deps): bump qdrant-client from 1.11.0 to 1.12.2 in /application
2025-01-09 23:27:00 +00:00
Alex
58d6b71808 Merge pull request #1559 from arc53/dependabot/pip/application/gtts-2.5.4
build(deps): bump gtts from 2.3.2 to 2.5.4 in /application
2025-01-09 23:24:08 +00:00
dependabot[bot]
4b9c1c4863 build(deps-dev): bump prettier-plugin-tailwindcss in /frontend
Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.6.8 to 0.6.9.
- [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.6.8...v0.6.9)

---
updated-dependencies:
- dependency-name: prettier-plugin-tailwindcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-09 20:29:30 +00:00
dependabot[bot]
e1cdacaebf build(deps): bump protobuf from 5.28.2 to 5.29.3 in /application
Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 5.28.2 to 5.29.3.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl)
- [Commits](https://github.com/protocolbuffers/protobuf/compare/v5.28.2...v5.29.3)

---
updated-dependencies:
- dependency-name: protobuf
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-09 20:23:19 +00:00
dependabot[bot]
af120248d7 build(deps): bump gtts from 2.3.2 to 2.5.4 in /application
Bumps [gtts](https://github.com/pndurette/gTTS) from 2.3.2 to 2.5.4.
- [Release notes](https://github.com/pndurette/gTTS/releases)
- [Changelog](https://github.com/pndurette/gTTS/blob/main/CHANGELOG.md)
- [Commits](https://github.com/pndurette/gTTS/compare/v2.3.2...v2.5.4)

---
updated-dependencies:
- dependency-name: gtts
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-09 20:23:12 +00:00
dependabot[bot]
3749b327f9 build(deps): bump orjson from 3.10.7 to 3.10.14 in /application
Bumps [orjson](https://github.com/ijl/orjson) from 3.10.7 to 3.10.14.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.10.7...3.10.14)

---
updated-dependencies:
- dependency-name: orjson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-09 20:23:04 +00:00
dependabot[bot]
017ccd6351 build(deps): bump qdrant-client from 1.11.0 to 1.12.2 in /application
Bumps [qdrant-client](https://github.com/qdrant/qdrant-client) from 1.11.0 to 1.12.2.
- [Release notes](https://github.com/qdrant/qdrant-client/releases)
- [Commits](https://github.com/qdrant/qdrant-client/compare/v1.11.0...v1.12.2)

---
updated-dependencies:
- dependency-name: qdrant-client
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-09 20:23:00 +00:00
Alex
cdc860933e Create FUNDING.yml 2025-01-09 18:16:25 +00:00
Alex
7b408f338a Merge pull request #1540 from arc53/dependabot/npm_and_yarn/frontend/react-chartjs-2-5.3.0
build(deps): bump react-chartjs-2 from 5.2.0 to 5.3.0 in /frontend
2025-01-08 21:33:03 +00:00
Alex
b326c0c9ae Merge pull request #1555 from arc53/dependabot/pip/application/openai-1.59.5
build(deps): bump openai from 1.58.1 to 1.59.5 in /application
2025-01-08 21:19:59 +00:00
Alex
f06f409f2d Merge branch 'dependabot/pip/application/openai-1.59.5' of https://github.com/arc53/DocsGPT into dependabot/pip/application/openai-1.59.5 2025-01-08 21:14:02 +00:00
Alex
a0e8b70e6d Merge pull request #1550 from arc53/dependabot/pip/application/prompt-toolkit-3.0.48
build(deps): bump prompt-toolkit from 3.0.47 to 3.0.48 in /application
2025-01-08 21:12:24 +00:00
dependabot[bot]
5294178bb7 build(deps): bump prompt-toolkit from 3.0.47 to 3.0.48 in /application
Bumps [prompt-toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit) from 3.0.47 to 3.0.48.
- [Release notes](https://github.com/prompt-toolkit/python-prompt-toolkit/releases)
- [Changelog](https://github.com/prompt-toolkit/python-prompt-toolkit/blob/master/CHANGELOG)
- [Commits](https://github.com/prompt-toolkit/python-prompt-toolkit/compare/3.0.47...3.0.48)

---
updated-dependencies:
- dependency-name: prompt-toolkit
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-08 21:12:13 +00:00
dependabot[bot]
9050d48bc3 build(deps): bump openai from 1.58.1 to 1.59.5 in /application
Bumps [openai](https://github.com/openai/openai-python) from 1.58.1 to 1.59.5.
- [Release notes](https://github.com/openai/openai-python/releases)
- [Changelog](https://github.com/openai/openai-python/blob/main/CHANGELOG.md)
- [Commits](https://github.com/openai/openai-python/compare/v1.58.1...v1.59.5)

---
updated-dependencies:
- dependency-name: openai
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-08 21:11:48 +00:00
Alex
9d0b54f461 Merge pull request #1553 from arc53/dependabot/pip/application/marshmallow-3.24.1
build(deps): bump marshmallow from 3.23.2 to 3.24.1 in /application
2025-01-08 21:10:06 +00:00
Alex
4ba848a483 Merge pull request #1551 from arc53/dependabot/pip/application/urllib3-2.3.0
build(deps): bump urllib3 from 2.2.3 to 2.3.0 in /application
2025-01-08 21:09:41 +00:00
Alex
0b26e6232a Merge pull request #1552 from arc53/dependabot/pip/application/pydantic-core-2.27.2
build(deps): bump pydantic-core from 2.23.4 to 2.27.2 in /application
2025-01-08 21:07:44 +00:00
Alex
88ad827a87 bump pydantic 2025-01-08 21:03:31 +00:00
ManishMadan2882
0b0f0a959a Merge branch 'main' into basic-ui 2025-01-09 02:22:43 +05:30
ManishMadan2882
25ee749724 (fix:locale) sync other locales with en) 2025-01-09 02:17:49 +05:30
dependabot[bot]
204b871fa2 build(deps): bump openai from 1.58.1 to 1.59.5 in /application
Bumps [openai](https://github.com/openai/openai-python) from 1.58.1 to 1.59.5.
- [Release notes](https://github.com/openai/openai-python/releases)
- [Changelog](https://github.com/openai/openai-python/blob/main/CHANGELOG.md)
- [Commits](https://github.com/openai/openai-python/compare/v1.58.1...v1.59.5)

---
updated-dependencies:
- dependency-name: openai
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-08 20:32:44 +00:00
Alex
f45db6014d Merge pull request #1549 from ManishMadan2882/main
Releasing docsgpt npm library v0.4.9
2025-01-08 13:50:44 +00:00
dependabot[bot]
475850ef94 build(deps): bump marshmallow from 3.23.2 to 3.24.1 in /application
Bumps [marshmallow](https://github.com/marshmallow-code/marshmallow) from 3.23.2 to 3.24.1.
- [Changelog](https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst)
- [Commits](https://github.com/marshmallow-code/marshmallow/compare/3.23.2...3.24.1)

---
updated-dependencies:
- dependency-name: marshmallow
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-07 20:36:03 +00:00
dependabot[bot]
602fe086b9 build(deps): bump pydantic-core from 2.23.4 to 2.27.2 in /application
Bumps [pydantic-core](https://github.com/pydantic/pydantic-core) from 2.23.4 to 2.27.2.
- [Release notes](https://github.com/pydantic/pydantic-core/releases)
- [Commits](https://github.com/pydantic/pydantic-core/compare/v2.23.4...v2.27.2)

---
updated-dependencies:
- dependency-name: pydantic-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-07 20:36:01 +00:00
dependabot[bot]
5ad76cf2af build(deps): bump urllib3 from 2.2.3 to 2.3.0 in /application
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.2.3 to 2.3.0.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/2.2.3...2.3.0)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-07 20:35:51 +00:00
ManishMadan2882
03e8c56f05 (upgrade/widget) v0.4.9 2025-01-07 20:49:31 +05:30
ManishMadan2882
d1981967b2 (fix:locales) sync conversation 2025-01-07 20:28:59 +05:30
Alex
c6094ad575 Merge pull request #1544 from arc53/dependabot/pip/application/langchain-community-0.3.14
build(deps): bump langchain-community from 0.3.13 to 0.3.14 in /application
2025-01-06 23:37:02 +00:00
Alex
93e376ad2f fix: bump dependency 2025-01-06 23:33:34 +00:00
Alex
6bba3d164a Merge pull request #1547 from arc53/dependabot/pip/application/networkx-3.4.2
build(deps): bump networkx from 3.3 to 3.4.2 in /application
2025-01-06 23:27:39 +00:00
Alex
b5decffaa2 Merge pull request #1545 from arc53/dependabot/pip/application/primp-0.9.3
build(deps): bump primp from 0.6.3 to 0.9.3 in /application
2025-01-06 23:27:17 +00:00
Alex
c068ac48d1 Merge pull request #1546 from arc53/dependabot/pip/application/torch-2.5.1
build(deps): bump torch from 2.4.1 to 2.5.1 in /application
2025-01-06 23:25:53 +00:00
Alex
d4b89803b2 Merge pull request #1548 from arc53/dependabot/pip/application/pymongo-4.10.1
build(deps): bump pymongo from 4.8.0 to 4.10.1 in /application
2025-01-06 21:59:58 +00:00
dependabot[bot]
d5b73236de build(deps): bump pymongo from 4.8.0 to 4.10.1 in /application
Bumps [pymongo](https://github.com/mongodb/mongo-python-driver) from 4.8.0 to 4.10.1.
- [Release notes](https://github.com/mongodb/mongo-python-driver/releases)
- [Changelog](https://github.com/mongodb/mongo-python-driver/blob/master/doc/changelog.rst)
- [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.8.0...4.10.1)

---
updated-dependencies:
- dependency-name: pymongo
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-06 20:34:39 +00:00
dependabot[bot]
1e011879b1 build(deps): bump networkx from 3.3 to 3.4.2 in /application
Bumps [networkx](https://github.com/networkx/networkx) from 3.3 to 3.4.2.
- [Release notes](https://github.com/networkx/networkx/releases)
- [Commits](https://github.com/networkx/networkx/compare/networkx-3.3...networkx-3.4.2)

---
updated-dependencies:
- dependency-name: networkx
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-06 20:34:31 +00:00
dependabot[bot]
9c30ff3024 build(deps): bump torch from 2.4.1 to 2.5.1 in /application
Bumps [torch](https://github.com/pytorch/pytorch) from 2.4.1 to 2.5.1.
- [Release notes](https://github.com/pytorch/pytorch/releases)
- [Changelog](https://github.com/pytorch/pytorch/blob/main/RELEASE.md)
- [Commits](https://github.com/pytorch/pytorch/compare/v2.4.1...v2.5.1)

---
updated-dependencies:
- dependency-name: torch
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-06 20:34:27 +00:00
dependabot[bot]
035f41b12c build(deps): bump primp from 0.6.3 to 0.9.3 in /application
Bumps [primp](https://github.com/deedy5/primp) from 0.6.3 to 0.9.3.
- [Release notes](https://github.com/deedy5/primp/releases)
- [Commits](https://github.com/deedy5/primp/compare/v0.6.3...v0.9.3)

---
updated-dependencies:
- dependency-name: primp
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-06 20:34:22 +00:00
dependabot[bot]
0bbf1db434 build(deps): bump langchain-community in /application
Bumps [langchain-community](https://github.com/langchain-ai/langchain) from 0.3.13 to 0.3.14.
- [Release notes](https://github.com/langchain-ai/langchain/releases)
- [Commits](https://github.com/langchain-ai/langchain/compare/langchain-community==0.3.13...langchain-community==0.3.14)

---
updated-dependencies:
- dependency-name: langchain-community
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-06 20:34:20 +00:00
Alex
639e267392 Merge pull request #1538 from arc53/dependabot/pip/application/langchain-core-0.3.29
build(deps): bump langchain-core from 0.3.28 to 0.3.29 in /application
2025-01-05 02:10:07 +00:00
dependabot[bot]
bd5504461e build(deps): bump langchain-core from 0.3.28 to 0.3.29 in /application
Bumps [langchain-core](https://github.com/langchain-ai/langchain) from 0.3.28 to 0.3.29.
- [Release notes](https://github.com/langchain-ai/langchain/releases)
- [Commits](https://github.com/langchain-ai/langchain/compare/langchain-core==0.3.28...langchain-core==0.3.29)

---
updated-dependencies:
- dependency-name: langchain-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-05 02:04:46 +00:00
Alex
c46aa23fdd Merge pull request #1537 from arc53/dependabot/pip/application/regex-2024.11.6
build(deps): bump regex from 2024.9.11 to 2024.11.6 in /application
2025-01-05 02:03:40 +00:00
Alex
d654e79be3 Merge pull request #1535 from arc53/dependabot/pip/application/jiter-0.8.2
build(deps): bump jiter from 0.5.0 to 0.8.2 in /application
2025-01-05 02:03:15 +00:00
dependabot[bot]
c41877920a build(deps): bump jiter from 0.5.0 to 0.8.2 in /application
Bumps [jiter](https://github.com/pydantic/jiter) from 0.5.0 to 0.8.2.
- [Release notes](https://github.com/pydantic/jiter/releases)
- [Commits](https://github.com/pydantic/jiter/compare/v0.5.0...v0.8.2)

---
updated-dependencies:
- dependency-name: jiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-05 01:58:52 +00:00
Alex
3f11e3e6a6 Merge pull request #1533 from arc53/dependabot/pip/application/transformers-4.47.1
build(deps): bump transformers from 4.47.0 to 4.47.1 in /application
2025-01-05 01:55:03 +00:00
Alex
225e73c8cf Merge pull request #1534 from arc53/dependabot/pip/application/markupsafe-3.0.2
build(deps): bump markupsafe from 2.1.5 to 3.0.2 in /application
2025-01-05 01:54:46 +00:00
dependabot[bot]
95ec541a38 build(deps): bump react-chartjs-2 from 5.2.0 to 5.3.0 in /frontend
Bumps [react-chartjs-2](https://github.com/reactchartjs/react-chartjs-2) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/reactchartjs/react-chartjs-2/releases)
- [Changelog](https://github.com/reactchartjs/react-chartjs-2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/reactchartjs/react-chartjs-2/compare/v5.2.0...v5.3.0)

---
updated-dependencies:
- dependency-name: react-chartjs-2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-05 01:48:13 +00:00
Alex
1941bd36bb Merge pull request #1531 from ManishMadan2882/main
Adding hover effects in Search component
2025-01-05 01:48:05 +00:00
dependabot[bot]
e1b6d61558 build(deps): bump regex from 2024.9.11 to 2024.11.6 in /application
Bumps [regex](https://github.com/mrabarnett/mrab-regex) from 2024.9.11 to 2024.11.6.
- [Changelog](https://github.com/mrabarnett/mrab-regex/blob/hg/changelog.txt)
- [Commits](https://github.com/mrabarnett/mrab-regex/compare/2024.9.11...2024.11.6)

---
updated-dependencies:
- dependency-name: regex
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-05 01:47:50 +00:00
dependabot[bot]
c873e4ef42 build(deps): bump markupsafe from 2.1.5 to 3.0.2 in /application
Bumps [markupsafe](https://github.com/pallets/markupsafe) from 2.1.5 to 3.0.2.
- [Release notes](https://github.com/pallets/markupsafe/releases)
- [Changelog](https://github.com/pallets/markupsafe/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/markupsafe/compare/2.1.5...3.0.2)

---
updated-dependencies:
- dependency-name: markupsafe
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-05 01:47:42 +00:00
dependabot[bot]
90eb261da6 build(deps): bump transformers from 4.47.0 to 4.47.1 in /application
Bumps [transformers](https://github.com/huggingface/transformers) from 4.47.0 to 4.47.1.
- [Release notes](https://github.com/huggingface/transformers/releases)
- [Commits](https://github.com/huggingface/transformers/compare/v4.47.0...v4.47.1)

---
updated-dependencies:
- dependency-name: transformers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-05 01:47:38 +00:00
Alex
fb46cc9fdf Update dependabot.yml 2025-01-05 01:46:47 +00:00
Alex
2d5a2eb52b Merge pull request #1530 from arc53/dependabot/npm_and_yarn/docs/next-14.2.22
build(deps): bump next from 14.2.20 to 14.2.22 in /docs
2025-01-05 01:45:10 +00:00
ManishMadan2882
fa108126bb (feat:settings) sync with locales 2025-01-05 03:39:33 +05:30
ManishMadan2882
b9540ba2bc (fix:locale) add missing keys/semantics in es 2025-01-05 02:04:18 +05:30
ManishMadan2882
1992acaf61 (fix:locale) add missing keys in jp 2025-01-05 01:44:29 +05:30
ManishMadan2882
8c586a34e7 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2025-01-05 01:04:45 +05:30
ManishMadan2882
44399a03c1 (feat:search) add hover states 2025-01-05 01:04:33 +05:30
dependabot[bot]
3e70af9a57 build(deps): bump next from 14.2.20 to 14.2.22 in /docs
Bumps [next](https://github.com/vercel/next.js) from 14.2.20 to 14.2.22.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v14.2.20...v14.2.22)

---
updated-dependencies:
- dependency-name: next
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-04 02:59:13 +00:00
Alex
475d20b627 Merge pull request #1529 from siiddhantt/refactor/minor-changes
refactor: UI enhancement in tools
2025-01-03 16:25:12 +00:00
ManishMadan2882
69c5c6d6b8 (fix/locale) missing keys in chinese 2025-01-03 19:30:43 +05:30
ManishMadan2882
2480dc83b2 (fix/locale) missing keys in locale 2025-01-03 19:29:57 +05:30
Manish Madan
7c8b617f62 Merge branch 'arc53:main' into basic-ui 2025-01-03 18:13:01 +05:30
Manish Madan
7377fee8ca Merge pull request #1525 from arc53/dependabot/npm_and_yarn/frontend/lint-staged-15.3.0
build(deps-dev): bump lint-staged from 15.2.11 to 15.3.0 in /frontend
2025-01-03 17:31:31 +05:30
dependabot[bot]
bdd78b664f build(deps-dev): bump lint-staged from 15.2.11 to 15.3.0 in /frontend
Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 15.2.11 to 15.3.0.
- [Release notes](https://github.com/lint-staged/lint-staged/releases)
- [Changelog](https://github.com/lint-staged/lint-staged/blob/master/CHANGELOG.md)
- [Commits](https://github.com/lint-staged/lint-staged/compare/v15.2.11...v15.3.0)

---
updated-dependencies:
- dependency-name: lint-staged
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-03 11:58:00 +00:00
Manish Madan
9272d4725a Merge pull request #1522 from arc53/dependabot/npm_and_yarn/frontend/eslint-plugin-react-7.37.3
build(deps-dev): bump eslint-plugin-react from 7.37.2 to 7.37.3 in /frontend
2025-01-03 17:26:52 +05:30
dependabot[bot]
4ae6a8e25d build(deps-dev): bump eslint-plugin-react in /frontend
Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.37.2 to 7.37.3.
- [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases)
- [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.37.2...v7.37.3)

---
updated-dependencies:
- dependency-name: eslint-plugin-react
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-03 11:50:25 +00:00
Manish Madan
6e660140ae Merge pull request #1523 from arc53/dependabot/npm_and_yarn/frontend/react-i18next-15.4.0
build(deps): bump react-i18next from 15.0.2 to 15.4.0 in /frontend
2025-01-03 17:18:20 +05:30
dependabot[bot]
5315429195 build(deps): bump react-i18next from 15.0.2 to 15.4.0 in /frontend
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 15.0.2 to 15.4.0.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v15.0.2...v15.4.0)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-03 11:45:19 +00:00
Alex
abf898e032 Merge pull request #1527 from ManishMadan2882/main
React extensions: Updating Search Bar
2025-01-03 11:43:45 +00:00
Manish Madan
eef112d83d Merge pull request #1521 from arc53/dependabot/npm_and_yarn/frontend/i18next-browser-languagedetector-8.0.2
build(deps): bump i18next-browser-languagedetector from 8.0.0 to 8.0.2 in /frontend
2025-01-03 17:10:28 +05:30
Siddhant Rai
e1784abbeb fix: extra padding in confirmation modal 2025-01-03 12:42:23 +05:30
Siddhant Rai
0031ca3159 refactor: UI enhancement in tools 2025-01-03 12:27:54 +05:30
ManishMadan2882
411115523e (fix:search) ui adjustments 2025-01-03 02:49:40 +05:30
ManishMadan2882
8b206b087c (feat:search) adding buttonTextt prop, minor ui 2025-01-02 19:36:07 +05:30
ManishMadan2882
0d126106c0 (fix: sources) inconcistent capitalisation 2025-01-02 13:32:25 +05:30
ManishMadan2882
0751debff7 (feat:nav) add enter/esc to rename in tile 2025-01-02 02:31:29 +05:30
ManishMadan2882
33a28a64ec (fix:ui/mobile) button squashed 2025-01-02 01:33:49 +05:30
Manish Madan
28e37d8ad2 Merge branch 'arc53:main' into main 2025-01-01 15:14:40 +05:30
ManishMadan2882
190f571718 (feat/search) exacting ui 2025-01-01 15:14:03 +05:30
Alex
c7d7dfbd50 Merge pull request #1518 from arc53/dependabot/pip/application/marshmallow-3.23.2
build(deps): bump marshmallow from 3.22.0 to 3.23.2 in /application
2024-12-31 15:02:26 +00:00
dependabot[bot]
efb018d2b0 build(deps): bump marshmallow from 3.22.0 to 3.23.2 in /application
Bumps [marshmallow](https://github.com/marshmallow-code/marshmallow) from 3.22.0 to 3.23.2.
- [Changelog](https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst)
- [Commits](https://github.com/marshmallow-code/marshmallow/compare/3.22.0...3.23.2)

---
updated-dependencies:
- dependency-name: marshmallow
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-31 14:58:26 +00:00
Alex
cae9a45832 Merge pull request #1517 from arc53/dependabot/pip/application/tiktoken-0.8.0
build(deps): bump tiktoken from 0.7.0 to 0.8.0 in /application
2024-12-31 14:57:35 +00:00
dependabot[bot]
3daeab5186 build(deps): bump tiktoken from 0.7.0 to 0.8.0 in /application
Bumps [tiktoken](https://github.com/openai/tiktoken) from 0.7.0 to 0.8.0.
- [Release notes](https://github.com/openai/tiktoken/releases)
- [Changelog](https://github.com/openai/tiktoken/blob/main/CHANGELOG.md)
- [Commits](https://github.com/openai/tiktoken/compare/0.7.0...0.8.0)

---
updated-dependencies:
- dependency-name: tiktoken
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-31 14:57:29 +00:00
Alex
83914d5a56 Merge pull request #1520 from arc53/dependabot/pip/application/redis-5.2.1
build(deps): bump redis from 5.0.1 to 5.2.1 in /application
2024-12-31 14:55:58 +00:00
dependabot[bot]
0f611eb87b build(deps): bump redis from 5.0.1 to 5.2.1 in /application
Bumps [redis](https://github.com/redis/redis-py) from 5.0.1 to 5.2.1.
- [Release notes](https://github.com/redis/redis-py/releases)
- [Changelog](https://github.com/redis/redis-py/blob/master/CHANGES)
- [Commits](https://github.com/redis/redis-py/compare/v5.0.1...v5.2.1)

---
updated-dependencies:
- dependency-name: redis
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-31 14:52:21 +00:00
Alex
f70b2d0839 Merge pull request #1519 from arc53/dependabot/pip/application/celery-5.4.0
build(deps): bump celery from 5.3.6 to 5.4.0 in /application
2024-12-31 14:42:47 +00:00
ManishMadan2882
2f33a46e89 (feat:search/UX) enhance function 2024-12-31 17:33:06 +05:30
ManishMadan2882
598c7a5d76 (feat:search) load geist font 2024-12-31 16:25:44 +05:30
ManishMadan2882
8724c12c11 (feat:search) new UI 2024-12-31 15:30:24 +05:30
Alex
22d9020331 Merge pull request #1516 from arc53/dependabot/pip/application/langsmith-0.2.6
build(deps): bump langsmith from 0.2.3 to 0.2.6 in /application
2024-12-30 20:29:16 +00:00
dependabot[bot]
b4d77080e8 build(deps): bump i18next-browser-languagedetector in /frontend
Bumps [i18next-browser-languagedetector](https://github.com/i18next/i18next-browser-languageDetector) from 8.0.0 to 8.0.2.
- [Changelog](https://github.com/i18next/i18next-browser-languageDetector/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-browser-languageDetector/compare/v8.0.0...v8.0.2)

---
updated-dependencies:
- dependency-name: i18next-browser-languagedetector
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-30 20:22:47 +00:00
dependabot[bot]
e42fc97d03 build(deps): bump celery from 5.3.6 to 5.4.0 in /application
Bumps [celery](https://github.com/celery/celery) from 5.3.6 to 5.4.0.
- [Release notes](https://github.com/celery/celery/releases)
- [Changelog](https://github.com/celery/celery/blob/main/Changelog.rst)
- [Commits](https://github.com/celery/celery/compare/v5.3.6...v5.4.0)

---
updated-dependencies:
- dependency-name: celery
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-30 20:17:25 +00:00
dependabot[bot]
e45648b389 build(deps): bump langsmith from 0.2.3 to 0.2.6 in /application
Bumps [langsmith](https://github.com/langchain-ai/langsmith-sdk) from 0.2.3 to 0.2.6.
- [Release notes](https://github.com/langchain-ai/langsmith-sdk/releases)
- [Commits](https://github.com/langchain-ai/langsmith-sdk/compare/v0.2.3...v0.2.6)

---
updated-dependencies:
- dependency-name: langsmith
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-30 20:17:15 +00:00
ManishMadan2882
085c4ddf09 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2024-12-27 17:40:22 +05:30
ManishMadan2882
5ddf9bd7ec (feat:search) handle blockquotes in markdown 2024-12-27 17:40:04 +05:30
ManishMadan2882
2420af3b6d (feat:Search) highlight keywords on searching 2024-12-27 16:20:47 +05:30
ManishMadan2882
b8fade251b (feat: searchResults): adding utility to preprocess markdown 2024-12-24 17:15:17 +05:30
Alex
8935dc4e31 feat: add tool parsing 2024-12-24 00:52:14 +00:00
Alex
ae61d89494 Merge pull request #1508 from arc53/dependabot/npm_and_yarn/frontend/react-router-dom-7.1.1
build(deps): bump react-router-dom from 6.8.1 to 7.1.1 in /frontend
2024-12-23 23:30:59 +00:00
dependabot[bot]
753832d701 build(deps): bump react-router-dom from 6.8.1 to 7.1.1 in /frontend
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.8.1 to 7.1.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.1.1/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 22:06:40 +00:00
Alex
8926cf777c Merge pull request #1497 from arc53/dependabot/npm_and_yarn/frontend/lint-staged-15.2.11
build(deps-dev): bump lint-staged from 15.2.10 to 15.2.11 in /frontend
2024-12-23 22:04:57 +00:00
dependabot[bot]
868ea1a1e2 build(deps-dev): bump lint-staged from 15.2.10 to 15.2.11 in /frontend
Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 15.2.10 to 15.2.11.
- [Release notes](https://github.com/lint-staged/lint-staged/releases)
- [Changelog](https://github.com/lint-staged/lint-staged/blob/master/CHANGELOG.md)
- [Commits](https://github.com/lint-staged/lint-staged/compare/v15.2.10...v15.2.11)

---
updated-dependencies:
- dependency-name: lint-staged
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 22:03:05 +00:00
Alex
1e1707ec0b Merge pull request #1496 from arc53/dependabot/npm_and_yarn/frontend/typescript-5.7.2
build(deps-dev): bump typescript from 5.6.2 to 5.7.2 in /frontend
2024-12-23 22:01:45 +00:00
dependabot[bot]
636ac2a56c build(deps-dev): bump typescript from 5.6.2 to 5.7.2 in /frontend
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.6.2 to 5.7.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.6.2...v5.7.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 21:58:40 +00:00
Alex
45076b05f7 Merge pull request #1495 from arc53/dependabot/npm_and_yarn/frontend/postcss-8.4.49
build(deps-dev): bump postcss from 8.4.47 to 8.4.49 in /frontend
2024-12-23 21:56:20 +00:00
dependabot[bot]
ba9e2101bb build(deps-dev): bump postcss from 8.4.47 to 8.4.49 in /frontend
Bumps [postcss](https://github.com/postcss/postcss) from 8.4.47 to 8.4.49.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.47...8.4.49)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 21:52:27 +00:00
Alex
7301b61cb8 Merge pull request #1490 from arc53/dependabot/pip/application/elasticsearch-8.17.0
build(deps): bump elasticsearch from 8.15.1 to 8.17.0 in /application
2024-12-23 21:50:44 +00:00
Alex
ee3f657751 Merge pull request #1507 from arc53/dependabot/npm_and_yarn/frontend/i18next-24.2.0
build(deps): bump i18next from 23.15.1 to 24.2.0 in /frontend
2024-12-23 21:49:47 +00:00
Alex
e30291966a fix: bump elastic transport 2024-12-23 21:47:31 +00:00
dependabot[bot]
2536bd0988 build(deps): bump elasticsearch from 8.15.1 to 8.17.0 in /application
Bumps [elasticsearch](https://github.com/elastic/elasticsearch-py) from 8.15.1 to 8.17.0.
- [Release notes](https://github.com/elastic/elasticsearch-py/releases)
- [Commits](https://github.com/elastic/elasticsearch-py/compare/v8.15.1...v8.17.0)

---
updated-dependencies:
- dependency-name: elasticsearch
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 21:44:39 +00:00
Alex
5234350bde Merge pull request #1510 from arc53/dependabot/pip/application/langchain-openai-0.2.14
build(deps): bump langchain-openai from 0.2.0 to 0.2.14 in /application
2024-12-23 21:43:25 +00:00
Alex
36e4398bcb fix: bump deps 2024-12-23 21:39:33 +00:00
Alex
4b040280c3 Merge branch 'dependabot/pip/application/langchain-openai-0.2.14' of https://github.com/arc53/DocsGPT into dependabot/pip/application/langchain-openai-0.2.14 2024-12-23 21:34:18 +00:00
dependabot[bot]
fdd2300517 build(deps): bump langchain-openai from 0.2.0 to 0.2.14 in /application
Bumps [langchain-openai](https://github.com/langchain-ai/langchain) from 0.2.0 to 0.2.14.
- [Release notes](https://github.com/langchain-ai/langchain/releases)
- [Commits](https://github.com/langchain-ai/langchain/compare/langchain-openai==0.2.0...langchain-openai==0.2.14)

---
updated-dependencies:
- dependency-name: langchain-openai
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 21:31:04 +00:00
Alex
49913b2258 Merge pull request #1509 from arc53/dependabot/pip/application/numpy-2.2.1
build(deps): bump numpy from 1.26.4 to 2.2.1 in /application
2024-12-23 21:30:04 +00:00
Alex
4927b64d27 bump pytest 2024-12-23 21:26:22 +00:00
Alex
fb2df05e3f feat: upgrade python and bump faiss-cpu 2024-12-23 21:23:54 +00:00
dependabot[bot]
ab90a93eec build(deps): bump numpy from 1.26.4 to 2.2.1 in /application
Bumps [numpy](https://github.com/numpy/numpy) from 1.26.4 to 2.2.1.
- [Release notes](https://github.com/numpy/numpy/releases)
- [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst)
- [Commits](https://github.com/numpy/numpy/compare/v1.26.4...v2.2.1)

---
updated-dependencies:
- dependency-name: numpy
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 21:15:46 +00:00
Alex
48c17169b5 Merge pull request #1506 from arc53/dependabot/pip/application/jinja2-3.1.5
build(deps): bump jinja2 from 3.1.4 to 3.1.5 in /application
2024-12-23 21:13:40 +00:00
Alex
41cd83f20e Merge branch 'dependabot/pip/application/jinja2-3.1.5' of https://github.com/arc53/DocsGPT into dependabot/pip/application/jinja2-3.1.5 2024-12-23 21:08:16 +00:00
dependabot[bot]
52dd3f798a build(deps): bump jinja2 from 3.1.4 to 3.1.5 in /application
Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.4 to 3.1.5.
- [Release notes](https://github.com/pallets/jinja/releases)
- [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/jinja/compare/3.1.4...3.1.5)

---
updated-dependencies:
- dependency-name: jinja2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 21:06:38 +00:00
Alex
070efd6951 Merge pull request #1493 from arc53/dependabot/pip/application/yarl-1.18.3
build(deps): bump yarl from 1.11.1 to 1.18.3 in /application
2024-12-23 21:04:35 +00:00
dependabot[bot]
502d82e1c9 build(deps): bump langchain-openai from 0.2.0 to 0.2.14 in /application
Bumps [langchain-openai](https://github.com/langchain-ai/langchain) from 0.2.0 to 0.2.14.
- [Release notes](https://github.com/langchain-ai/langchain/releases)
- [Commits](https://github.com/langchain-ai/langchain/compare/langchain-openai==0.2.0...langchain-openai==0.2.14)

---
updated-dependencies:
- dependency-name: langchain-openai
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 20:58:59 +00:00
dependabot[bot]
7760e779ae build(deps): bump i18next from 23.15.1 to 24.2.0 in /frontend
Bumps [i18next](https://github.com/i18next/i18next) from 23.15.1 to 24.2.0.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.15.1...v24.2.0)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 20:14:33 +00:00
dependabot[bot]
474298c969 build(deps): bump jinja2 from 3.1.4 to 3.1.5 in /application
Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.4 to 3.1.5.
- [Release notes](https://github.com/pallets/jinja/releases)
- [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/jinja/compare/3.1.4...3.1.5)

---
updated-dependencies:
- dependency-name: jinja2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 18:12:13 +00:00
Alex
b2a013c027 fix: remove reqs from scripts folder 2024-12-23 18:11:15 +00:00
Alex
cca5ef098b Merge pull request #1503 from arc53/chunking
test version
2024-12-23 17:53:45 +00:00
Alex
41b4c28430 fix: linting 2024-12-23 17:41:44 +00:00
Alex
90962ee056 fix: debugger in launch json 2024-12-23 17:41:13 +00:00
Alex
953cff09a0 Merge branch 'chunking' of https://github.com/arc53/DocsGPT into chunking 2024-12-23 16:59:44 +00:00
Pavel
b41a989051 test version 2024-12-23 16:59:27 +00:00
Alex
4fcd45c1ae Merge pull request #1473 from arc53/tool-use
Tools + agent
2024-12-20 18:17:39 +00:00
Alex
1f75f0c082 fix: tests 2024-12-20 18:13:37 +00:00
Alex
c2a95b5bec lint: fixing index and classc rag 2024-12-20 17:32:58 +00:00
Alex
0a246d3de7 Merge branch 'main' into tool-use 2024-12-20 17:29:41 +00:00
Alex
2d6238d431 Merge pull request #1502 from siiddhantt/feat/tools-section
feat: tools frontend and endpoints refactor
2024-12-20 16:27:29 +00:00
Pavel
c4f3dc4434 test version 2024-12-20 18:41:47 +03:00
Alex
2aea24afdd depriciate mock backend 2024-12-20 11:01:57 +00:00
Alex
666240f21e Merge pull request #1455 from Niharika0104/FIXES-#1166
Fixed the feedback issue
2024-12-19 18:27:54 +00:00
Alex
fb4ab220d6 Merge pull request #1501 from arc53/dependabot/npm_and_yarn/docs/next-14.2.20
build(deps): bump next from 14.2.12 to 14.2.20 in /docs
2024-12-19 18:25:49 +00:00
Alex
5a882fe37f Merge pull request #1500 from ManishMadan2882/main
Limiting Conversational history
2024-12-19 18:23:44 +00:00
Alex
132326136a added gpt-4o-mini model 2024-12-19 18:17:12 +00:00
Alex
6fc4723d61 feat: flask debugger for vscode 2024-12-19 16:03:39 +00:00
Alex
8564198321 mini-model as default 2024-12-19 16:02:27 +00:00
Siddhant Rai
4c3f990d4b feat: tools agent refactor for custom fields and unique actions 2024-12-19 20:34:20 +05:30
ManishMadan2882
b19c14787e (fix) avoid stringifying list 2024-12-19 17:58:55 +05:30
Siddhant Rai
f67b79f007 fix: missing yield in tool agent 2024-12-19 17:55:58 +05:30
Siddhant Rai
daa332aa20 fix: python lint errors 2024-12-19 10:06:06 +05:30
Siddhant Rai
c3f538c2f6 fix: merge errors 2024-12-19 09:59:38 +05:30
Siddhant Rai
a0e677ea00 Merge branch 'feat/tools-section' of https://github.com/siiddhantt/DocsGPT into feat/tools-section 2024-12-19 09:58:41 +05:30
Siddhant Rai
343569ba19 fix: create_tool endpoint for new fields 2024-12-19 09:58:32 +05:30
ManishMadan2882
9096013e13 (refactor) remove preprocessing in retrieval 2024-12-19 05:20:55 +05:30
ManishMadan2882
89a2f249c1 (feat:conv history) token limit from settings 2024-12-19 05:15:33 +05:30
Manish Madan
4b0e094272 Merge branch 'arc53:main' into main 2024-12-19 02:15:40 +05:30
Siddhant Rai
97713e872a Merge branch 'tool-use' into feat/tools-section 2024-12-18 22:53:31 +05:30
Siddhant Rai
f9a7db11eb feat: tools frontend and endpoints refactor 2024-12-18 22:48:40 +05:30
dependabot[bot]
1448d7e6eb build(deps): bump next from 14.2.12 to 14.2.20 in /docs
Bumps [next](https://github.com/vercel/next.js) from 14.2.12 to 14.2.20.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v14.2.12...v14.2.20)

---
updated-dependencies:
- dependency-name: next
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-18 12:02:03 +00:00
Manish Madan
8e7d5340d7 Merge pull request #1489 from arc53/dependabot/pip/application/sentence-transformers-3.3.1
build(deps): bump sentence-transformers from 3.0.1 to 3.3.1 in /application
2024-12-18 17:30:51 +05:30
Niharika Goulikar
47ecf98e2a Resolved merge conflicts 2024-12-18 10:47:34 +00:00
ManishMadan2882
f8e4e42a36 (feat:limit conv history) add util method 2024-12-17 16:14:17 +05:30
dependabot[bot]
38753c4395 build(deps): bump yarl from 1.11.1 to 1.18.3 in /application
Bumps [yarl](https://github.com/aio-libs/yarl) from 1.11.1 to 1.18.3.
- [Release notes](https://github.com/aio-libs/yarl/releases)
- [Changelog](https://github.com/aio-libs/yarl/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/yarl/compare/v1.11.1...v1.18.3)

---
updated-dependencies:
- dependency-name: yarl
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 20:09:34 +00:00
dependabot[bot]
b473e13b83 build(deps): bump sentence-transformers in /application
Bumps [sentence-transformers](https://github.com/UKPLab/sentence-transformers) from 3.0.1 to 3.3.1.
- [Release notes](https://github.com/UKPLab/sentence-transformers/releases)
- [Commits](https://github.com/UKPLab/sentence-transformers/compare/v3.0.1...v3.3.1)

---
updated-dependencies:
- dependency-name: sentence-transformers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 20:09:08 +00:00
Manish Madan
9092575186 Merge pull request #1488 from arc53/dependabot/pip/application/langsmith-0.2.3
build(deps): bump langsmith from 0.1.125 to 0.2.3 in /application
2024-12-14 15:27:00 +05:30
ManishMadan2882
ffe5ac2aad (update) langchain, core and community 2024-12-14 15:21:52 +05:30
dependabot[bot]
0ab6f75410 build(deps): bump langsmith from 0.1.125 to 0.2.3 in /application
Bumps [langsmith](https://github.com/langchain-ai/langsmith-sdk) from 0.1.125 to 0.2.3.
- [Release notes](https://github.com/langchain-ai/langsmith-sdk/releases)
- [Commits](https://github.com/langchain-ai/langsmith-sdk/compare/v0.1.125...v0.2.3)

---
updated-dependencies:
- dependency-name: langsmith
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-14 09:40:13 +00:00
Manish Madan
099245f27e Merge pull request #1479 from arc53/dependabot/pip/application/transformers-4.47.0
build(deps): bump transformers from 4.44.2 to 4.47.0 in /application
2024-12-14 05:09:25 +05:30
ManishMadan2882
0a0fe20fa0 (update) tokenizers 2024-12-14 04:53:06 +05:30
dependabot[bot]
c2aa5cc994 build(deps): bump transformers from 4.44.2 to 4.47.0 in /application
Bumps [transformers](https://github.com/huggingface/transformers) from 4.44.2 to 4.47.0.
- [Release notes](https://github.com/huggingface/transformers/releases)
- [Commits](https://github.com/huggingface/transformers/compare/v4.44.2...v4.47.0)

---
updated-dependencies:
- dependency-name: transformers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-13 23:19:47 +00:00
Manish Madan
f84e59a7fb Merge pull request #1485 from arc53/dependabot/npm_and_yarn/docs/nanoid-3.3.8
build(deps): bump nanoid from 3.3.7 to 3.3.8 in /docs
2024-12-14 02:47:21 +05:30
Manish Madan
613c032994 Merge pull request #1484 from arc53/dependabot/npm_and_yarn/extensions/react-widget/nanoid-3.3.8
build(deps): bump nanoid from 3.3.7 to 3.3.8 in /extensions/react-widget
2024-12-14 02:46:39 +05:30
Manish Madan
7829db97bf Merge pull request #1469 from arc53/dependabot/npm_and_yarn/frontend/vitejs/plugin-react-4.3.4
build(deps-dev): bump @vitejs/plugin-react from 4.3.1 to 4.3.4 in /frontend
2024-12-14 02:39:50 +05:30
dependabot[bot]
acdfde6752 build(deps-dev): bump @vitejs/plugin-react in /frontend
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.3.1 to 4.3.4.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/v4.3.4/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-13 20:54:30 +00:00
dependabot[bot]
c673c0b245 Merge pull request #1467 from arc53/dependabot/npm_and_yarn/frontend/eslint-plugin-import-2.31.0 2024-12-13 20:50:35 +00:00
dependabot[bot]
4bf4e11cee build(deps-dev): bump eslint-plugin-import in /frontend
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.30.0 to 2.31.0.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.30.0...v2.31.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-import
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-13 20:42:34 +00:00
dependabot[bot]
770175456f Merge pull request #1390 from arc53/dependabot/npm_and_yarn/frontend/eslint-plugin-react-7.37.2 2024-12-13 19:23:05 +00:00
dependabot[bot]
0abbf71f15 build(deps-dev): bump eslint-plugin-react in /frontend
Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.35.0 to 7.37.2.
- [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases)
- [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.35.0...v7.37.2)

---
updated-dependencies:
- dependency-name: eslint-plugin-react
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-13 19:06:16 +00:00
Alex
46b0de367a fix: strings 2024-12-12 10:40:55 +00:00
Alex
30309659d3 Merge pull request #1486 from Srayash/Srayash/Languages
Fix language support for Chinese and add Russian language
2024-12-11 14:44:20 +00:00
Srayash Singh
acadd6bddc Merge branch 'arc53:main' into Srayash/Languages 2024-12-11 16:46:40 +05:30
Srayash
96c57260cb Add Russian and fix Traditional Chinese 2024-12-11 16:45:41 +05:30
dependabot[bot]
f29f58b2ac build(deps): bump nanoid from 3.3.7 to 3.3.8 in /docs
Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.7 to 3.3.8.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.3.7...3.3.8)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-10 23:17:23 +00:00
dependabot[bot]
124a04738c build(deps): bump nanoid from 3.3.7 to 3.3.8 in /extensions/react-widget
Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.7 to 3.3.8.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.3.7...3.3.8)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-10 23:17:21 +00:00
Alex
3a60c31df9 Merge pull request #1483 from ManishMadan2882/main
Fixes: Client.__init__() got an unexpected keyword argument 'proxies'
2024-12-10 23:16:14 +00:00
ManishMadan2882
501cf3973c Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2024-12-11 02:04:31 +05:30
ManishMadan2882
c73251e998 (fix:TypeError) Client Proxies Argument 2024-12-11 02:04:20 +05:30
Alex
201fb61bd4 Delete lexeu-competition.md 2024-12-10 14:23:38 +00:00
Alex
f87ae429f4 fix: edit names 2024-12-09 17:52:20 +00:00
Alex
35e8e2df44 Merge pull request #1475 from ManishMadan2882/main
Highlight Similar substrings in search results
2024-12-09 16:20:57 +00:00
ManishMadan2882
7c3f80f13d (fix: filter search) trim keyword pre processing 2024-12-09 12:47:13 +05:30
ManishMadan2882
17a176ad4e Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2024-12-09 02:44:50 +05:30
ManishMadan2882
ca5eb06de9 (feat:filter results) improve markdown format, add filter 2024-12-09 02:43:26 +05:30
ManishMadan2882
2378548cf1 (feat: filer result) remove iterator; optimisation 2024-12-09 02:41:06 +05:30
ManishMadan2882
fdd265f47f (feat:filter search result) use node iterator 2024-12-09 01:51:06 +05:30
Alex
3e2e1ecddf fix: add status to tools 2024-12-06 23:11:16 +00:00
Alex
863950963f simple user tool handling endpoint 2024-12-06 22:19:01 +00:00
GH Action - Upstream Sync
defa1b28a8 Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-12-06 01:27:00 +00:00
Alex
1f649274d1 feat: tooling init 2024-12-05 22:44:40 +00:00
ManishMadan2882
3ce04de161 (feat:highlightSearch) recursively filter the DOM 2024-12-06 03:33:44 +05:30
Alex
e798d18e70 Merge pull request #1470 from ManishMadan2882/main
Minor frontend changes
2024-12-05 11:47:45 +00:00
Manish Madan
ed2609d3b3 Merge branch 'main' into main 2024-12-05 16:33:55 +05:30
Alex
6d2a2632c5 Merge pull request #1463 from Srayash/feature/drag-and-drop-training
feature: Drag and drop training, from input box
2024-12-05 10:53:19 +00:00
Srayash
dbf95a95a4 default assign renderTab and receivedFiles to null and [] respectively 2024-12-05 16:15:57 +05:30
ManishMadan2882
0e4bd06795 (feat:shared)add meta:og twitter tags 2024-12-05 02:49:00 +05:30
ManishMadan2882
4d38280cfa (fix:title) remove dino emoji 2024-12-04 02:49:10 +05:30
ManishMadan2882
75173473ae (feat:bubble) replace emoji with user profile 2024-12-04 02:47:57 +05:30
Srayash
b314b27260 Internationalization: add translations. 2024-12-02 23:24:26 +05:30
Srayash
cc7e223082 enhancement: style the drag and drop feature. 2024-12-02 23:21:41 +05:30
Srayash
79f87d4c20 add comma 2024-12-02 01:03:20 +05:30
Srayash
8adbd6720a noClick set to true for Dropzone. 2024-12-02 00:53:18 +05:30
Srayash
c3973571a7 feature: Drag and drop training, from input box. 2024-12-02 00:22:16 +05:30
Srayash
bf63509a6e modify upload component to take receivedFile and renderTab as props. 2024-12-02 00:16:47 +05:30
Alex
6552fe831b Merge pull request #1461 from ManishMadan2882/main
(fix:edit-query)delete following queries
2024-11-30 23:49:20 +00:00
ManishMadan2882
05fdf6b93a (fix:edit-query) replace input with textarea 2024-11-30 02:44:24 +05:30
ManishMadan2882
6953c3dbe4 (fix:markdown) no overflowing words 2024-11-29 03:32:36 +05:30
ManishMadan2882
55ecda902d (fix:edit-feat): exacting the UI/UX 2024-11-29 03:28:35 +05:30
Alex
0495610257 Merge pull request #1430 from arc53/dependabot/pip/application/werkzeug-3.1.3 2024-11-28 19:25:37 +00:00
Alex
301bb2dcfe Merge pull request #1409 from arc53/dependabot/npm_and_yarn/frontend/react-dropzone-14.3.5 2024-11-28 19:15:03 +00:00
Alex
598b8f9980 Merge pull request #1448 from arc53/dependabot/github_actions/codecov/codecov-action-5 2024-11-28 19:13:42 +00:00
GH Action - Upstream Sync
9528f34a25 Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-11-28 01:26:19 +00:00
ManishMadan2882
625aed151d (fix:edit-query)delete following queries 2024-11-28 04:02:05 +05:30
Alex
4ffdf3f9a2 Merge pull request #1456 from ManishMadan2882/main
Minor UI adjustments
2024-11-27 15:14:53 +00:00
ManishMadan2882
0a97e5b7be (fix:delete_old) del source from db even when FileNotFound err 2024-11-27 16:57:47 +05:30
ManishMadan2882
bfeae3a95b (fix:settings) truncate long doc names 2024-11-27 16:54:05 +05:30
Manish Madan
4ab12663be Merge branch 'arc53:main' into main 2024-11-27 03:41:23 +05:30
Alex
0584c29781 Merge pull request #1442 from fadingNA/document-table
Table Styling & Add search feature to backend
2024-11-26 20:08:12 +00:00
ManishMadan2882
a8231d375a (fix:markdown) code overflows 2024-11-27 00:45:01 +05:30
ManishMadan2882
a86b342ba5 fix(bubble) smaller fonts on mobile questions 2024-11-26 19:14:50 +05:30
ManishMadan2882
0a7a313e5d (fix:conv) input touches viewport bottom in mobile 2024-11-26 18:57:11 +05:30
Niharika Goulikar
9d4aee5de2 fixed the python error 2024-11-26 13:05:50 +00:00
Niharika Goulikar
faf031ce80 fixed linting issues 2024-11-26 12:28:16 +00:00
Niharika Goulikar
e9a2b8f03a Fixed the feedback issue 2024-11-26 12:16:21 +00:00
fadingNA
d89bd0941d change visible to block 2024-11-25 08:35:24 -05:00
Alex
8d8423b6e0 Merge pull request #1444 from Niharika0104/Fixes-#1260
Fixed edit and resend issue
2024-11-25 11:12:56 +00:00
fadingNA
e22669f91d add text center when no data 2024-11-24 17:05:36 -05:00
fadingNA
b5e5fb7f10 fix table header text wrap 2024-11-24 17:02:57 -05:00
fadingNA
2709994ede update APIKey Table and dark styling 2024-11-24 11:18:42 -05:00
fadingNA
e5bd194b6c Remove dangling console log 2024-11-23 20:04:53 -05:00
fadingNA
f01f76dba7 Move Pagination Outside Scrollable Area | Add smooth transition dropdown rows per page select | adjust sync button 2024-11-23 18:06:54 -05:00
Alex
289bd41570 Merge pull request #1428 from arc53/dependabot/npm_and_yarn/frontend/vite-5.4.11
build(deps-dev): bump vite from 5.4.6 to 5.4.11 in /frontend
2024-11-23 21:30:42 +00:00
dependabot[bot]
6a0d6a8faf build(deps-dev): bump vite from 5.4.6 to 5.4.11 in /frontend
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.6 to 5.4.11.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.11/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.11/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-23 21:01:43 +00:00
Alex
dcc39d954e Merge pull request #1446 from arc53/dependabot/npm_and_yarn/frontend/tailwindcss-3.4.15
build(deps-dev): bump tailwindcss from 3.4.11 to 3.4.15 in /frontend
2024-11-23 21:00:25 +00:00
Niharika Goulikar
8a67f18cd9 Fixed minor ui issues 2024-11-23 06:13:07 +00:00
Alex
2e02304c71 Merge pull request #1450 from ManishMadan2882/main
React Widget: Updating to v0.4.8
2024-11-22 23:23:16 +00:00
ManishMadan2882
ce975c5d93 (documentation): udpate with search bar 2024-11-23 03:09:03 +05:30
ManishMadan2882
fb4bb54aca (upgrade) v0.4.8 2024-11-23 02:44:06 +05:30
ManishMadan2882
dae0942d03 (refactor): separate browser ready builds 2024-11-23 02:29:27 +05:30
fadingNA
25b1173db7 remove table type column 2024-11-22 09:10:58 -05:00
Alex
92d90866ca Merge pull request #1436 from ManishMadan2882/main
React Widget: Search bar component
2024-11-22 13:40:50 +00:00
ManishMadan2882
1595e0210a (fix:search) change toolkit info 2024-11-22 17:55:37 +05:30
ManishMadan2882
ea4ef40a12 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2024-11-22 17:31:06 +05:30
ManishMadan2882
9986fce8bf (fix:search) spacing, minor bug 2024-11-22 17:30:50 +05:30
GH Action - Upstream Sync
628f83172a Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-11-22 01:25:17 +00:00
ManishMadan2882
c855896221 (fix:events): enter on pc, tap on mobile 2024-11-22 00:05:07 +05:30
ManishMadan2882
94b5241e70 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2024-11-21 23:54:34 +05:30
ManishMadan2882
0600f095f5 (feat:widget) append prefilledQuery 2024-11-21 23:54:19 +05:30
Alex
a0a05b676f Merge pull request #1303 from jayantp2003/bugfix/859-large-zip-breaking-stream-endpoint
Bugfix/859 large zip breaking stream endpoint
2024-11-21 17:34:21 +00:00
Alex
a818975823 Update README.md 2024-11-21 14:43:54 +00:00
Niharika Goulikar
8e9f31cc32 Fixed python linting issues 2024-11-21 11:22:33 +00:00
Niharika Goulikar
0d4bc4ec2c Made the requested changes 2024-11-21 11:17:58 +00:00
GH Action - Upstream Sync
7a0118b31c Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-11-21 01:23:51 +00:00
ManishMadan2882
e9a8161811 (feat/widget): autofocus input 2024-11-20 17:11:33 +05:30
ManishMadan2882
a6bface632 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2024-11-20 17:04:55 +05:30
ManishMadan2882
48f47351ee (feat:keydown): listen cross platform events 2024-11-20 17:04:45 +05:30
Alex
9247f16add Merge pull request #1434 from RohittCodes/fix-1231
feat: wrapper modal
2024-11-20 10:48:30 +00:00
GH Action - Upstream Sync
d3eab30d74 Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-11-20 01:24:08 +00:00
Alex
f65ecb9a0f fix: lint import 2024-11-19 19:16:24 +00:00
Alex
312cb9ae70 feat: image parser 2024-11-19 19:06:53 +00:00
Alex
cce60ce101 fix: save convo messages, docsgpt provider format 2024-11-19 16:22:58 +00:00
ManishMadan2882
e0a3b8004c (fix): minor ui; loading state 2024-11-19 04:41:12 +05:30
ManishMadan2882
91239820e3 (feat/search): debounce and abort previous pending req 2024-11-19 04:25:54 +05:30
ManishMadan2882
8641a91182 (feat-search): adding loader, no-results 2024-11-19 03:38:13 +05:30
dependabot[bot]
84bffd24f2 build(deps): bump codecov/codecov-action from 4 to 5
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 5.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 20:43:34 +00:00
dependabot[bot]
9fb37b1179 build(deps-dev): bump tailwindcss from 3.4.11 to 3.4.15 in /frontend
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.4.11 to 3.4.15.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/v3.4.15/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.4.11...v3.4.15)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 20:13:53 +00:00
ManishMadan2882
4eee10b5d5 (feat/search): redirect to sources 2024-11-18 19:06:41 +05:30
ManishMadan2882
c53456876c Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2024-11-18 17:01:05 +05:30
ManishMadan2882
1a9f31174d (search): modal triggers on ctrl k 2024-11-18 17:00:56 +05:30
fadingNA
0493352292 frontend: remove search on localstate, change to backend search use mongo passing searchTerm 2024-11-18 00:06:18 -05:00
fadingNA
13b91193cc backend : update sources/paginated to search document by query 'name' 2024-11-18 00:05:48 -05:00
GH Action - Upstream Sync
9a367c76a0 Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-11-18 01:26:31 +00:00
ManishMadan2882
f58e7cc154 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2024-11-18 03:18:48 +05:30
ManishMadan2882
5ee0f15d94 (feat: search): close on click outside 2024-11-18 03:18:39 +05:30
Alex
250edf26a5 Update README.md 2024-11-17 15:01:39 +00:00
Alex
7a01376828 fix: remove more old files 2024-11-17 13:02:45 +00:00
Alex
63b547ea13 fix: delete old files 2024-11-17 12:59:34 +00:00
Niharika Goulikar
626689cbe0 Merge branch 'arc53:main' into Fixes-#1260 2024-11-17 16:18:11 +05:30
Niharika Goulikar
a44319d815 Fixed edit and resend issue 2024-11-17 10:29:29 +00:00
utin-francis-peter
2c8a2945f0 feat: better sources scroll management 2024-11-17 10:34:22 +01:00
utin-francis-peter
ba59042e5c Merge branch 'main' into feat/sources-in-react-widget 2024-11-17 09:19:20 +01:00
GH Action - Upstream Sync
3273af7f40 Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-11-17 01:36:05 +00:00
Alex
5971ff884e Merge pull request #1443 from siiddhantt/fix/streaming-old-answer
fix: old streaming answer gets appended to new conversation
2024-11-16 22:48:55 +00:00
ManishMadan2882
cbf33e698b Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2024-11-17 03:31:19 +05:30
ManishMadan2882
868e59bca0 (fix: css conflict): replace global keyframes 2024-11-17 03:31:09 +05:30
rohittcodes
04959df194 refactor: upload 2024-11-16 19:45:22 +05:30
Siddhant Rai
47d687b151 fix: old streaming answer gets appended to new conversation 2024-11-16 17:13:15 +05:30
fadingNA
2ad6b4fa4e update table styling 2024-11-15 23:16:58 -05:00
GH Action - Upstream Sync
8e94688b77 Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-11-16 01:23:10 +00:00
ManishMadan2882
fab367f041 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2024-11-16 02:14:02 +05:30
ManishMadan2882
94617c5ef7 (fix:animations) minor fix 2024-11-16 02:13:40 +05:30
Alex
4443bc77fd Merge pull request #1441 from arc53/google-llm 2024-11-15 14:51:11 +00:00
ManishMadan2882
d33246612d (widget) unmount with timeout 2024-11-15 18:16:45 +05:30
Alex
144ab61e07 fix: ruff lint 2024-11-15 12:19:43 +00:00
Alex
a4c95fd62b feat: add google ai 2024-11-15 12:17:25 +00:00
Alex
2245f4690e fix: reddit loader validation 2024-11-15 11:02:27 +00:00
GH Action - Upstream Sync
8eaeaa91f9 Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-11-15 01:25:08 +00:00
ManishMadan2882
7bd0351ee9 (fix): mount only when open 2024-11-15 06:25:24 +05:30
ManishMadan2882
811a20f080 search: add themes, fix css override 2024-11-15 05:52:46 +05:30
Alex
1decff2114 Merge pull request #1422 from fadingNA/multiple-files-bug
upload routes fix for multiple upload
2024-11-14 22:53:36 +00:00
Alex
c97968f6c0 Merge pull request #1439 from RohittCodes/fix-1438
refactor: loader-color
2024-11-14 22:22:52 +00:00
Alex
9deb5adcbf Merge pull request #1435 from mas-who/fix-add-prompt-modal
Improve UX for adding and editing prompts in the settings page
2024-11-14 17:31:28 +00:00
Nonthachai Plodthong
91e7c16d90 Merge branch 'main' into multiple-files-bug 2024-11-14 12:28:51 -05:00
Alex
edc81d8e6e Merge pull request #1385 from AkashJana18/fix/1219-message-box
fix: #1219 Too big top margin of message box separator
2024-11-14 16:52:59 +00:00
rohittcodes
ed8d553491 refactor: loader-color 2024-11-14 20:46:02 +05:30
Alex
a64a5e89db Merge pull request #1437 from siiddhantt/feat/chat-ui-enhancement
refactor: smooth answer appearance
2024-11-14 10:21:53 +00:00
Siddhant Rai
bd636d59dd refactor: smooth answer appearance 2024-11-14 15:35:22 +05:30
GH Action - Upstream Sync
2d15492190 Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-11-14 01:20:08 +00:00
ManishMadan2882
d696f0d081 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2024-11-14 04:52:49 +05:30
ManishMadan2882
9409e4498f (feat:search bar) initiating seach bar 2024-11-14 04:52:15 +05:30
ManishMadan2882
541a6417b7 (refactor): separate widget core 2024-11-14 04:51:26 +05:30
Mason Hu
f6e9f9011d fix: prevent saving prompt with same name as existing prompt 2024-11-13 15:28:16 +02:00
Mason Hu
2fe3cb2b22 fix: hide edit option for default prompts 2024-11-13 14:51:48 +02:00
Mason Hu
6b9519b56f fix: prevent previous prompt name and content from displaying when adding new prompt 2024-11-13 14:36:34 +02:00
Alex
9bbe7564a9 fix: llamacpp 2024-11-13 11:45:42 +00:00
rohittcodes
58af393968 feat: wrapper modal 2024-11-13 02:15:05 +05:30
Alex
bed4939652 Merge pull request #1419 from fadingNA/pagination
Pagination
2024-11-12 09:51:24 +00:00
Alex
ebf6109219 feat: medium size widget docs page 2024-11-11 22:53:00 +00:00
dependabot[bot]
0ef232f731 build(deps): bump werkzeug from 3.0.4 to 3.1.3 in /application
Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.0.4 to 3.1.3.
- [Release notes](https://github.com/pallets/werkzeug/releases)
- [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/werkzeug/compare/3.0.4...3.1.3)

---
updated-dependencies:
- dependency-name: werkzeug
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-11 21:01:52 +00:00
utin-francis-peter
6f83bd8961 Merge branch 'main' into feat/sources-in-react-widget 2024-11-11 14:36:34 +01:00
Alex
ad602f22c8 Merge pull request #1427 from ManishMadan2882/main
(fix:upload) UI enhance
2024-11-11 12:52:18 +00:00
ManishMadan2882
70f44fcaca (fix:upload) UI enhance 2024-11-11 18:16:52 +05:30
Alex
1f32e7cf82 Merge pull request #1426 from ManishMadan2882/main
React Widget v0.4.7
2024-11-11 10:55:59 +00:00
ManishMadan2882
00390200ec (updata:widget) v0.4.7 2024-11-11 16:08:43 +05:30
Alex
0a11a3afee fix: attribution link 2024-11-10 23:23:19 +00:00
Alex
9f77b03643 Merge pull request #1425 from arc53/feat/cooler-bounce
feat: widget bounciness
2024-11-10 22:18:36 +00:00
Alex
c6dc1675d8 fix: smoother animation on large modal close 2024-11-10 22:13:48 +00:00
Alex
e475a4cc7c fix: large size animation 2024-11-10 22:11:20 +00:00
Alex
dfc3cdd5d4 fix: open cooler morph 2024-11-10 21:53:10 +00:00
fadingNA
6974db5fd8 fix manage sync 2024-11-10 15:33:33 -05:00
fadingNA
32c67c2a02 add property sync and etc ... to align with original source 2024-11-10 15:33:19 -05:00
fadingNA
6c585de6d3 add paginated to store, and fix upload docs property 2024-11-10 14:53:52 -05:00
fadingNA
1056c943d3 fix remove button on navigation sidebar and setting/document 2024-11-10 14:39:56 -05:00
fadingNA
839f0a3b95 remove log on api, add paginatedDoc on redux 2024-11-10 14:39:20 -05:00
fadingNA
b19e9cae23 backend fix passing id to paginated docs 2024-11-10 14:38:51 -05:00
Alex
84a15ef54d fix: z-index sidebar bug 2024-11-10 19:38:48 +00:00
Alex
d4b409e166 fix: align buttons 2024-11-10 18:46:26 +00:00
Alex
ba1c0ab6fb fix: large closing 2024-11-10 16:36:14 +00:00
Alex
eddafcfdfb fix: morphing feel 2024-11-10 14:27:07 +00:00
fadingNA
8a225e279f multiple-file missing task ingest
restore upload to pack all file together instead one by one
2024-11-10 03:00:22 -05:00
fadingNA
d5cce88108 Merge branch 'main' of https://github.com/fadingNA/DocsGPT into multiple-files-bug 2024-11-10 01:55:12 -05:00
utin-francis-peter
a7aae3ff7e style: minor adjustments in border-radius and spacings 2024-11-10 03:29:56 +01:00
utin-francis-peter
25feab9a29 chore: removed unused import 2024-11-10 03:11:41 +01:00
utin-francis-peter
97916bf925 chore: returned themes cofig into DocsGPTWidget component 2024-11-10 03:08:35 +01:00
utin-francis-peter
42e2c784c4 Merge branch 'main' of https://github.com/utin-francis-peter/DocsGPT into feat/sources-in-react-widget 2024-11-10 03:06:23 +01:00
fadingNA
e00c6f2c14 add min width for delete button, dropdown dakrtheme 2024-11-09 16:59:00 -05:00
fadingNA
0837295bd3 fix table responsive issue 2024-11-09 16:24:21 -05:00
fadingNA
f3a005a667 remove params on getDocs 2024-11-09 14:57:30 -05:00
fadingNA
d59ffaf0bd fix sorting on /sources 2024-11-09 14:57:15 -05:00
Alex
e133c29b2c feat: widget bounciness 2024-11-09 18:46:31 +00:00
Alex
f64bf7daa0 Merge pull request #1424 from ManishMadan2882/main
React Widget: published v0.4.6
2024-11-09 13:24:07 +00:00
ManishMadan2882
ef24318c17 (upgrade:docs) widget version 2024-11-09 18:42:11 +05:30
ManishMadan2882
33fe0ffc93 (upgrade: widget) v0.4.6 2024-11-09 18:41:18 +05:30
Alex
243b036ae7 Merge pull request #1423 from ManishMadan2882/main
(feat: widget): smooth transitions
2024-11-09 13:04:46 +00:00
ManishMadan2882
06518c209a (feat:Widget) enhanced transition, buttonText param 2024-11-09 18:33:31 +05:30
fadingNA
3482474265 Pagination 2024-11-09 02:12:35 -05:00
fadingNA
5debb48265 Paginated With MongoDB / Create New Endpoint
change routes /combine name, add route /api/source/paginated
add new endpoint source/paginated
fixing table responsive
create new function to handling api/source/paginated
2024-11-09 02:09:01 -05:00
utin-francis-peter
1a8f89573d feat: query sources in widget 2024-11-09 01:09:22 +01:00
ManishMadan2882
84377eed07 (fix:widget) broken for modals 2024-11-09 00:44:56 +05:30
fadingNA
dd9589b37a fixing type error 2024-11-08 11:02:13 -05:00
ManishMadan2882
7c00099919 (feat: widget): smooth transitions 2024-11-08 19:21:19 +05:30
fadingNA
bc840900a3 change logically to upload file one by one instead of send all in one 2024-11-08 02:34:31 -05:00
fadingNA
4429755c09 add paramter type prevent warning lint 2024-11-07 23:23:01 -05:00
fadingNA
a2967afb55 adjust Setting/Document to use pagination data from backend 2024-11-07 23:22:28 -05:00
fadingNA
3d03826db5 add overload function to gettotalpage, and new type 2024-11-07 23:22:03 -05:00
fadingNA
7ff86a2aee remove default value since provide on getDocs 2024-11-07 23:21:26 -05:00
fadingNA
2a68cc9989 calculate totalPage, totalDoc(futreUse) 2024-11-07 23:21:06 -05:00
Alex
855365fba6 Merge pull request #1418 from ManishMadan2882/main
React Widget: udpated to v0.4.5
2024-11-07 10:18:16 +00:00
fadingNA
928303f27b fix small bug name of page 2024-11-06 22:36:59 -05:00
fadingNA
df2f69e85f adjust table of document with mx auto, add pagination to Documents Component 2024-11-06 22:33:26 -05:00
fadingNA
ec3407df7e add 2 fiels for make request to api/combine 2024-11-06 22:32:37 -05:00
fadingNA
5dae074c95 pagination component 2024-11-06 22:31:56 -05:00
fadingNA
a35be6ae57 add arrow icons for pagination 2024-11-06 22:31:41 -05:00
fadingNA
101935ae46 add pagination with default code format 2024-11-06 22:20:25 -05:00
fadingNA
d68e731ffd revert format code 2024-11-06 22:19:16 -05:00
fadingNA
bf0dd6946e add page, row_per_page to api/combine 2024-11-06 22:16:00 -05:00
fadingNA
41cbcbc07f fixing type on env-sample to .env-template 2024-11-06 22:15:35 -05:00
GH Action - Upstream Sync
73f93946b0 Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-11-07 01:19:24 +00:00
ManishMadan2882
181d2504e5 (update:widget) v0.4.5 2024-11-07 02:45:28 +05:30
ManishMadan2882
b0423d987e (update:widget) v0.4.5 2024-11-07 02:45:07 +05:30
ManishMadan2882
9157fe7323 fix(widget): avoid external css override 2024-11-07 02:39:56 +05:30
Alex
e02718947a Merge pull request #1416 from siiddhantt/fix/sources-pending
fix: pending sources even when no sources provided
2024-11-06 16:27:22 +00:00
Siddhant Rai
ebbd47c9cb fix: pending sources even when no sources provided 2024-11-06 21:34:57 +05:30
ManishMadan2882
ad810b3740 (widget): footer tagline 2024-11-06 17:20:12 +05:30
Alex
c3e85d747a Merge pull request #1415 from ManishMadan2882/main
React Widget update - v0.4.4
2024-11-06 11:09:19 +00:00
ManishMadan2882
8e092cbe1c (docs): update widget 2024-11-06 16:32:30 +05:30
ManishMadan2882
9a35609bc7 upgrade(widget): version 0.4.4 2024-11-06 16:30:33 +05:30
Alex
7fed92d6b3 Merge pull request #1407 from zc277584121/main
fix milvus issues
2024-11-06 10:33:27 +00:00
Alex
1f52461cd9 Merge pull request #1414 from ManishMadan2882/main
React widget: Exacting the design
2024-11-06 10:32:18 +00:00
AkashJana18
fe16743d16 fix/scrollbar in input textarea 2024-11-06 12:39:38 +05:30
ChengZi
7fd8e57bdc remove milvus dependency from req.txt
Signed-off-by: ChengZi <chen.zhang@zilliz.com>
2024-11-06 10:30:18 +08:00
GH Action - Upstream Sync
ed6cd9890a Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-11-06 01:01:16 +00:00
ManishMadan2882
f876f9e20e (fix:widget): perfecting design 2024-11-06 05:11:41 +05:30
utin-francis-peter
3e87d83ae8 chore: adjusted spacing in source bubble 2024-11-05 21:50:42 +01:00
Alex
62b15f2d6f Merge pull request #1389 from ayaan-qadri/main
Added custom size and Default widget open in <DocsGPTWidget />
2024-11-05 11:23:25 +00:00
Alex
89529f4df5 Merge pull request #1408 from ManishMadan2882/main
Adding sorting in documents, minor UI changes
2024-11-05 11:17:04 +00:00
dependabot[bot]
fe18d6e638 build(deps): bump react-dropzone from 14.2.3 to 14.3.5 in /frontend
Bumps [react-dropzone](https://github.com/react-dropzone/react-dropzone) from 14.2.3 to 14.3.5.
- [Release notes](https://github.com/react-dropzone/react-dropzone/releases)
- [Commits](https://github.com/react-dropzone/react-dropzone/compare/v14.2.3...v14.3.5)

---
updated-dependencies:
- dependency-name: react-dropzone
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 20:41:57 +00:00
ManishMadan2882
042519005c fix(all sources): text overflows 2024-11-05 01:36:54 +05:30
ManishMadan2882
7e24995afe fix(nav): minor ui 2024-11-05 00:48:12 +05:30
ManishMadan2882
877b165a9a (feat:docs) sort 2024-11-05 00:44:02 +05:30
utin-francis-peter
0784823e21 Merge branch 'main' of https://github.com/utin-francis-peter/DocsGPT into feat/sources-in-react-widget 2024-11-04 16:36:13 +01:00
utin-francis-peter
1a9f47b1bc chore: modified query sources and removed tooltip 2024-11-04 16:33:00 +01:00
ayaan-qadri
64f72ada28 Added sizesConfig for controlling sizes(large, medium, small and custom) from one point 2024-11-04 16:55:49 +05:30
ChengZi
171916e1a4 fix milvus issues
Signed-off-by: ChengZi <chen.zhang@zilliz.com>
2024-11-04 17:58:56 +08:00
Alex
dbfc1bb68f Update labeler.yml 2024-11-03 21:22:34 +00:00
Alex
5d4c067d80 Merge pull request #1394 from arc53/dependabot/github_actions/docker/build-push-action-6
build(deps): bump docker/build-push-action from 4 to 6
2024-11-03 18:39:07 +00:00
Alex
3f10a775ba Merge pull request #1395 from arc53/dependabot/github_actions/docker/setup-qemu-action-3
build(deps): bump docker/setup-qemu-action from 1 to 3
2024-11-03 18:38:48 +00:00
Alex
2f05a47de3 Merge pull request #1396 from arc53/dependabot/github_actions/actions/labeler-5
build(deps): bump actions/labeler from 4 to 5
2024-11-03 18:38:05 +00:00
Alex
9ca079c95a feat: elevenlabs tts 2024-11-02 16:43:28 +00:00
AkashJana18
2d37083719 minor changes 2024-11-02 11:22:39 +05:30
GH Action - Upstream Sync
0b890e1d70 Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-11-01 01:38:22 +00:00
Alex
0bb014c965 Update README.md 2024-10-31 22:24:42 +00:00
Alex
0684449c2a Update lexeu-competition.md 2024-10-31 22:24:19 +00:00
Alex
a23806d16a Merge pull request #1405 from JeevaRamanathan/feature/file-pptx_parser
feat: `.pptx` Presentation parser implementation
2024-10-31 18:01:01 +00:00
Alex
0b7be94d13 fix: dependecy version 2024-10-31 17:56:32 +00:00
Alex
4ac996cfe6 Merge pull request #1382 from shatanikmahanty/fix-safari-font
Fix: Fonts on Safari browser
2024-10-31 17:34:14 +00:00
Alex
78c819f976 fix: history bug 2024-10-31 17:33:09 +00:00
Alex
365537f74e Merge pull request #1362 from CBID2/add-edit-buttons
feat: add edit buttons
2024-10-31 14:55:23 +00:00
JeevaRamanathan M
5c756348a5 feat: Presentation parser implementation
Signed-off-by: JeevaRamanathan M <jeevaramanathan.m@infosys.com>
2024-10-31 11:47:12 +00:00
Alex
ed12c2d527 Merge pull request #1335 from kom-senapati/feature/mongodb-connection-refactor
refactor: use MongoDB singleton for connection management
2024-10-31 11:36:01 +00:00
Alex
82189b0a3c capitalisation 2024-10-31 11:32:39 +00:00
Alex
23889f7f16 Minor word change 2024-10-31 11:32:17 +00:00
Alex
45e14bc2f5 Merge pull request #1386 from AranavMahalpure/patch-1
Update run-with-docker-compose.sh
2024-10-31 11:18:23 +00:00
GH Action - Upstream Sync
0746f30645 Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-10-31 01:25:45 +00:00
Alex
daedfc0a57 Merge pull request #1403 from arc53/discord-fix
fix: bot chunking
2024-10-30 15:28:09 +00:00
Alex
2cc3372b86 fix: bot chunking 2024-10-30 15:27:14 +00:00
Alex
e024452610 Merge pull request #1402 from arc53/discord-fix
fix: slightly better discord bot formatting
2024-10-30 15:18:54 +00:00
Alex
06e4a05e41 fix: slightly better discord bot formatting 2024-10-30 15:17:37 +00:00
Alex
256514fefc Merge pull request #1401 from arc53/discord-fix
fix: discord bot
2024-10-30 13:18:25 +00:00
Alex
3f64ff8194 fix: discord bot 2024-10-30 12:59:28 +00:00
Alex
af2cef1bfc Merge pull request #1381 from Srayash/feature-TTS
Feature: Added Text-To-Speech Functionality
2024-10-30 10:56:33 +00:00
Alex
3be74b1fdd Merge pull request #1343 from JeevaRamanathan/enhancement/conversation-loading-state
Enhancement: Added loading state for conversation list
2024-10-30 10:55:40 +00:00
GH Action - Upstream Sync
e2a705806a Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-10-30 01:24:58 +00:00
Srayash
5c99615edf UI changes: add loading animation while audio response is being fetched 2024-10-30 00:03:08 +05:30
Srayash
605f168c7e remove unused modules (easy-speech) 2024-10-29 23:51:25 +05:30
Srayash
b223cf05d9 use /api/tts endpoint for TTS feature 2024-10-29 23:36:09 +05:30
Srayash
419b98b50f Merge branch 'arc53:main' into feature-TTS 2024-10-29 23:01:12 +05:30
Shatanik Mahanty
b99b3b844a Merge branch 'arc53:main' into fix-safari-font 2024-10-29 21:48:01 +05:30
Alex
d9787e849e Merge pull request #1384 from ManishMadan2882/main
Fix: empty doc selection in /stream
2024-10-29 10:11:22 +00:00
Alex
631e77ce65 Merge pull request #1397 from arc53/tts
Add endpoint for Text-To-Speech conversion
2024-10-29 09:57:57 +00:00
ManishMadan2882
7ff3a31e72 (feat:TTS) create gtts over abstraction 2024-10-29 03:11:51 +05:30
dependabot[bot]
331dfdbab4 build(deps): bump actions/labeler from 4 to 5
Bumps [actions/labeler](https://github.com/actions/labeler) from 4 to 5.
- [Release notes](https://github.com/actions/labeler/releases)
- [Commits](https://github.com/actions/labeler/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/labeler
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 21:07:28 +00:00
dependabot[bot]
c83ff2237c build(deps): bump docker/setup-qemu-action from 1 to 3
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 1 to 3.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v1...v3)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 21:07:26 +00:00
dependabot[bot]
9972435525 build(deps): bump docker/build-push-action from 4 to 6
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4 to 6.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v4...v6)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 21:07:25 +00:00
ayaan-qadri
409d0e4084 Added custom size N Default widget open in <DocsGPTWidget /> 2024-10-29 01:19:47 +05:30
utin-francis-peter
991a38df28 Merge branch 'main' of https://github.com/utin-francis-peter/DocsGPT into feat/sources-in-react-widget 2024-10-28 17:44:50 +01:00
utin-francis-peter
656f4da8f9 feat: rendering of response source 2024-10-28 17:34:35 +01:00
utin-francis-peter
f8d65b84db chore: wrapped the base component with ThemeProvider at the root level to make theme props available globally 2024-10-28 17:33:40 +01:00
kom-senapati
18ed255f5a fix: import settings object of Settings class in mongo_db.py 2024-10-28 19:30:38 +05:30
Srayash
4a8e9bf04e Enhancement: Switched to easy-speech from webspeechAPI.
Enhancement: Switched to easy-speech from webspeechAPI.
2024-10-28 02:56:02 +05:30
Srayash
0b1a302995 Update package.json 2024-10-28 02:53:51 +05:30
Srayash
6978e7439f Update package-lock.json 2024-10-28 02:53:07 +05:30
Srayash
fcb6bec474 Update TextToSpeechButton.tsx 2024-10-28 02:52:13 +05:30
Srayash
91690ff99a Resize speaker icon. 2024-10-27 23:02:52 +05:30
Arnav Mahalpure
45f930a9e2 Update run-with-docker-compose.sh
Source Environment Variables:

source .env loads environment variables from the .env file, making them available within the script.
Conditional Check for Azure Configuration:

The if condition checks if all required Azure variables are set (non-empty).
If they are, it runs Docker Compose with docker-compose-azure.yaml.
Otherwise, it defaults to the standard configuration with docker-compose.yaml.
Build and Run Services:

Depending on the condition, the script either builds and runs services with Azure settings (docker-compose-azure.yaml) or the standard configuration (docker-compose.yaml).
2024-10-27 14:53:47 +05:30
Srayash
09a1879f3e Merge branch 'arc53:main' into feature-TTS 2024-10-27 10:46:36 +05:30
AkashJana18
4bc14dbdd0 fix: 1219 2024-10-27 02:46:27 +05:30
ManishMadan2882
1627d424e7 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2024-10-27 01:28:12 +05:30
ManishMadan2882
0aa9da39a9 fix(isNoneDoc): empty doc assumed as default 2024-10-27 01:27:59 +05:30
shatanikmahanty
8564c2ba72 Fix: Fonts on Safari browser 2024-10-26 22:00:22 +05:30
Alex
1c791f240a Merge pull request #1377 from JeevaRamanathan/feature/file-json
feat: JSON Parser Implementation
2024-10-26 17:28:57 +01:00
Alex
bea0ccaa6c Merge pull request #1337 from Devparihar5/fix-github
fix:GitHubLoader to Handle Binary Files
2024-10-26 16:59:02 +01:00
Srayash
05f756963c Feature: Added Text-To-Speech Functionality 2024-10-26 03:29:54 +05:30
JeevaRamanathan
54ad6ad1c7 Merge branch 'main' into feature/file-json 2024-10-25 16:47:09 +05:30
Alex
c44ff77e09 Merge pull request #1349 from JeevaRamanathan/issue/file_type
hotfix: Added missing file extension `.xlsx` for file processing and recognition
2024-10-25 10:08:27 +01:00
JeevaRamanathan M
c77d415893 feat: JSON parser implementation
Signed-off-by: JeevaRamanathan M <jeevaramanathan.m@infosys.com>
2024-10-24 20:36:47 +00:00
Alex
92c9612dee Merge pull request #1375 from marceloams/fix/help-is-not-aligned-with-settings-1374
Fix alignment of the help button in the navigation bar
2024-10-24 14:59:05 +01:00
Marcelo Amorim
b40417fcfe (#1374) Fix alignment of the help button in the navigation bar 2024-10-23 22:00:31 -03:00
Alex
13c890b212 Merge pull request #1300 from AkashJana18/table-redsign
Feature: Table redesign
2024-10-23 22:59:44 +01:00
Alex
741ab6e43c Merge pull request #1363 from lakshmi930/ln/fix-like-hover-dark
Fix like hovering state in dark mode
2024-10-23 22:57:31 +01:00
Alex
3db46ecd68 Merge pull request #1372 from lakshmi930/ln/fix-discord-icon
Fix Discord icon
2024-10-23 22:53:41 +01:00
Lakshmi N
a972bb8827 Merge branch 'arc53:main' into ln/fix-discord-icon 2024-10-23 14:53:38 +01:00
Lakshmi N
2e4e080329 Merge branch 'arc53:main' into ln/fix-like-hover-dark 2024-10-23 14:53:23 +01:00
lakshmi930
5fe4c40ec1 Fix lint 2024-10-23 14:50:56 +01:00
AkashJana18
d18cb373fc error fixed 2024-10-23 18:56:08 +05:30
AkashJana18
1b1771e4eb Merge remote-tracking branch 'upstream/main' into table-redsign 2024-10-23 18:17:15 +05:30
Alex
51e450cc4b Update README.md 2024-10-23 10:20:25 +01:00
Akash Jana
67a97a7e51 Merge branch 'main' into table-redsign 2024-10-23 12:33:14 +05:30
JeevaRamanathan M
1e88c86378 updated loader state
Signed-off-by: JeevaRamanathan M <jeevaramanathan.m@infosys.com>
2024-10-22 23:34:32 +00:00
JeevaRamanathan M
fcb5f946dd fixed according to suggestion
Signed-off-by: JeevaRamanathan M <jeevaramanathan.m@infosys.com>
2024-10-22 22:37:56 +00:00
JeevaRamanathan
2e69e9bef3 Merge branch 'main' into enhancement/conversation-loading-state 2024-10-23 03:30:13 +05:30
Alex
88623754cf Merge pull request #1370 from arc53/dependabot/github_actions/actions/setup-python-5
Bump actions/setup-python from 4 to 5
2024-10-22 19:34:51 +01:00
Alex
886bcef7b0 Merge pull request #1369 from arc53/dependabot/github_actions/docker/setup-buildx-action-3
Bump docker/setup-buildx-action from 1 to 3
2024-10-22 19:34:36 +01:00
Alex
cc414da744 Merge pull request #1365 from arc53/dependabot/npm_and_yarn/docs/mermaid-10.9.3
Bump mermaid from 10.6.1 to 10.9.3 in /docs
2024-10-22 19:34:17 +01:00
dependabot[bot]
6e88ecc2da Bump actions/setup-python from 4 to 5
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 18:33:10 +00:00
dependabot[bot]
88d2420163 Bump docker/setup-buildx-action from 1 to 3
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 1 to 3.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v1...v3)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 18:32:59 +00:00
Alex
7e71ee1aae Merge pull request #1368 from arc53/dependabot/github_actions/docker/login-action-3
Bump docker/login-action from 2 to 3
2024-10-22 19:32:09 +01:00
Alex
c6d78e27c6 Merge pull request #1367 from arc53/dependabot/github_actions/actions/checkout-4
Bump actions/checkout from 3 to 4
2024-10-22 19:31:46 +01:00
Alex
b6d06dcfc3 Merge pull request #1366 from arc53/dependabot/github_actions/codecov/codecov-action-4
Bump codecov/codecov-action from 3 to 4
2024-10-22 19:31:08 +01:00
dependabot[bot]
756c46c026 Bump docker/login-action from 2 to 3
Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 18:22:16 +00:00
dependabot[bot]
5afba6e30f Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 18:22:14 +00:00
dependabot[bot]
02a23a65e7 Bump codecov/codecov-action from 3 to 4
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 3 to 4.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 18:22:12 +00:00
Alex
e7de16833d Merge pull request #1333 from Juneezee/gh-actions-dependabot
Configure Dependabot for GitHub Actions
2024-10-22 19:21:23 +01:00
dependabot[bot]
990c6d1c64 Bump mermaid from 10.6.1 to 10.9.3 in /docs
Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 10.6.1 to 10.9.3.
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Changelog](https://github.com/mermaid-js/mermaid/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/mermaid-js/mermaid/compare/v10.6.1...v10.9.3)

---
updated-dependencies:
- dependency-name: mermaid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 18:20:50 +00:00
Alex
f78a8c6fea Merge pull request #1346 from mousumi2002/feat/slack_bot
Add slack integration
2024-10-22 16:25:25 +01:00
AkashJana18
5580d19b75 table redesign 2024-10-22 20:41:18 +05:30
Mousumi Pal
c035e3c7c6 Refactor: Remove source_id from payload 2024-10-22 18:59:07 +05:30
kom-senapati
1502adfb85 Merge branch 'feature/mongodb-connection-refactor' of https://github.com/kom-senapati/DocsGPT into feature/mongodb-connection-refactor 2024-10-22 18:03:49 +05:30
kom-senapati
3b76b3ddce fix: Settings import 2024-10-22 18:03:46 +05:30
kom-senapati
e4a1730a5b fix: MongoDB imports 2024-10-22 17:58:41 +05:30
lakshmi930
4aa66170c5 Fix discord icon 2024-10-22 00:03:55 +01:00
lakshmi930
24352b56af Fix like hovering state in dark mode 2024-10-21 23:41:30 +01:00
Christine
cbea17b4d5 feat: add edit buttons
Signed-off-by: Christine <shecoder30@gmail.com>
2024-10-21 20:52:44 +00:00
Alex
4dd0d65db4 Update holopin.yml 2024-10-21 16:23:46 +01:00
Alex
cdfdcc7d03 Update holopin.yml 2024-10-21 16:08:01 +01:00
Alex
b4082b2cfa Merge pull request #1356 from ManishMadan2882/main 2024-10-21 16:37:59 +02:00
ManishMadan2882
fae3cfc58f (help): update support email 2024-10-21 19:56:00 +05:30
ManishMadan2882
ad038784cc (extensions): version update to 0.4.3 2024-10-21 19:55:13 +05:30
ManishMadan2882
7e69dd5ff0 (extensions): version update to 0.4.3 2024-10-21 19:54:59 +05:30
Alex
8720ec65ab Merge pull request #1330 from Niharika0104/Fixes-1292
Fixes - 1292
2024-10-21 15:46:33 +02:00
Alex
3098f99eba Merge pull request #1354 from sayanm16/fix/api-key-list-state
Fix/api key list state
2024-10-21 15:43:50 +02:00
Alex
98b90b82c4 Merge pull request #1355 from Srayash/Srayash/issue#1283
Bug Fix: react web widget prints undefined before printing an answer.
2024-10-21 15:42:10 +02:00
Mousumi Pal
01268a37e3 Remove commented out history fetch operation 2024-10-21 16:49:01 +05:30
sayanm16
0c46f3c205 Remove log 2024-10-21 16:25:19 +05:30
sayanm16
b442cc186a Fix: Handle json correctly on delete response recieved 2024-10-21 16:24:41 +05:30
Srayash
2353276aa7 Bug Fix:react rect web widget prints undefined before printing an answer 2024-10-21 16:21:16 +05:30
JeevaRamanathan M
8c034d3e78 Added missing file extensions
Signed-off-by: JeevaRamanathan M <jeevaramanathan.m@infosys.com>
2024-10-20 21:23:49 +00:00
Alex
2c25f4a4c0 Merge pull request #1345 from ManishMadan2882/main
Bug fix: /api/share route
2024-10-20 20:43:39 +02:00
Alex
d2a988a715 Merge pull request #1339 from Prathamesh010/docsgpt-help
fix: help button margin
2024-10-20 18:35:58 +02:00
Mousumi Pal
bd12eac145 Create Readme and update gitignore 2024-10-20 21:39:46 +05:30
mousumi
ebc44273c9 Add slack integration 2024-10-20 11:15:17 +05:30
ManishMadan2882
b781d78cc6 fix(shared conv): bug fix 2024-10-20 02:11:22 +05:30
Alex
3f7c8bdba5 Merge pull request #1122 from akashAD98/feature_n/lancedb
Feature n/lancedb
2024-10-19 16:22:47 +01:00
Alex
fd8e277530 Merge branch 'main' into feature_n/lancedb 2024-10-19 16:22:39 +01:00
JeevaRamanathan M
6a024b0ced update catch block 2024-10-19 04:46:46 +00:00
JeevaRamanathan M
a185b2a12a retaining original state 2024-10-19 04:45:00 +00:00
JeevaRamanathan M
2366c2cd94 enhancement: added loading state for conversation 2024-10-19 04:24:14 +00:00
Prathamesh Gawas
567c01e302 fix: help button margin 2024-10-18 11:19:02 +00:00
Niharika Goulikar
b3d2c1a5d1 Merge branch 'main' into Fixes-1292 2024-10-18 16:47:34 +05:30
Niharika Goulikar
7b3ecb5c2f resolving merge conflicts 2024-10-18 11:09:40 +00:00
Niharika Goulikar
f4abed43ba resolved merge conflicts 2024-10-18 10:31:53 +00:00
Niharika Goulikar
5854202f22 Fixed the redux state changes 2024-10-18 09:55:33 +00:00
devendra.parihar
d3238de8ab fix: lint error 2024-10-18 12:23:17 +05:30
devendra.parihar
09a2705311 fix:GitHubLoader to Handle Binary Files 2024-10-18 12:08:08 +05:30
devendra.parihar
a4c0861cf4 fix:GitHubLoader to Handle Binary Files 2024-10-18 12:07:44 +05:30
kom-senapati
5ba917c5e4 chore: remove unused imports 2024-10-18 09:22:27 +05:30
kom-senapati
83f2fb1e62 refactor: Use MongoDB singleton for connection management 2024-10-18 09:18:15 +05:30
Alex
7bf79675c1 Merge pull request #1233 from JeevaRamanathan/fix/1227-share_button
fix: share button available in mobile view
2024-10-17 23:55:10 +01:00
Eng Zer Jun
f33aa9c71b Configure Dependabot for GitHub Actions
Reference: https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
2024-10-17 22:32:46 +08:00
Niharika Goulikar
ac1c21c784 Merge branch 'arc53:main' into Fixes-1292 2024-10-17 10:07:48 +05:30
Niharika Goulikar
1757ce23af Removed newChatIcon when current converstation has no queries 2024-10-17 04:35:38 +00:00
Alex
3f1bae3044 Merge pull request #1321 from Juneezee/refactor/share-conversation-isPromptable-parse
refactor(user/routes): simplify parsing of isPromptable
2024-10-17 00:41:40 +01:00
Alex
20bd7ca2cc Merge pull request #1297 from RohittCodes/fix-1291
fix: height for md-devices
2024-10-17 00:41:14 +01:00
AkashJana18
a2b0204a95 Add new button triggers modal 2024-10-17 01:01:17 +05:30
AkashJana18
f7063d03f1 added search funtionality 2024-10-17 00:40:44 +05:30
Alex
9be3043e0f Merge pull request #1188 from prathamesh424/main
Reusable  Attractive  Skeleton  Loader Component is  added  [Fixes #1181]
2024-10-16 00:29:08 +01:00
Niharika Goulikar
4aeeaf185c Made ui/ux changes 2024-10-15 16:43:00 +00:00
Prathamesh Gursal
a25d5d98a4 package installed 2024-10-15 21:23:32 +05:30
Prathamesh Gursal
973304e0d7 changes 2024-10-15 21:11:00 +05:30
Prathamesh Gursal
590a735f99 conflict fixing 2024-10-15 21:10:37 +05:30
Alex
42185a011b Merge pull request #1306 from ayaan-qadri/main
Solved / #1294
2024-10-15 12:14:46 +01:00
Alex
e7b872a5df Merge pull request #1319 from Mayurakshi-mondal/chore/upgrade-python-deps-for-duckduckgo
Upgrade duck duck go dependency constraints
2024-10-15 12:05:36 +01:00
Alex
2bf75c36e4 Merge pull request #1314 from Mayurakshi-mondal/issues/1313
Fix: Pass retriever name to streaming api
2024-10-15 11:58:36 +01:00
Alex
bcd9005b53 Merge pull request #1308 from fadingNA/caching-docsgpt
Caching docsgpt
2024-10-15 11:56:30 +01:00
Alex
cca6297a64 fix: tests 2024-10-15 11:52:33 +01:00
Alex
39e94d4a5e fix: docker compose config 2024-10-15 11:37:11 +01:00
Alex
204b1b1963 fix: add singleton, logging, connection handle 2024-10-15 11:35:37 +01:00
Mayurakshi Mondal
b2e45e8af3 Merge branch 'arc53:main' into chore/upgrade-python-deps-for-duckduckgo 2024-10-15 14:56:45 +05:30
Mayurakshi Mondal
27797581ba Merge branch 'arc53:main' into issues/1313 2024-10-15 14:56:20 +05:30
GH Action - Upstream Sync
a797801d4c Merge branch 'main' of https://github.com/arc53/DocsGPT 2024-10-15 01:24:54 +00:00
Alex
d7c09e3493 Merge pull request #1326 from ManishMadan2882/main
Minor UI adjustments in Navigation > Help
2024-10-14 22:41:21 +01:00
ManishMadan2882
085542c861 feat(help): sync locales 2024-10-15 02:33:20 +05:30
ManishMadan2882
7ccd74b022 fix(help): ui 2024-10-15 02:05:25 +05:30
Eng Zer Jun
047afeebb6 refactor(user/routes): simplify parsing of isPromptable
We can use the `inputs.boolean` from flask-restx [1] to parse boolean
for us.

[1]: https://flask-restx.readthedocs.io/en/latest/api.html?highlight=boolean#flask_restx.inputs.boolean

Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
2024-10-15 01:37:59 +08:00
Mayurakshi Mondal
a6eab324b8 Merge branch 'arc53:main' into issues/1313 2024-10-14 23:01:21 +05:30
Mayurakshi Mondal
74a11da9bd Merge branch 'arc53:main' into chore/upgrade-python-deps-for-duckduckgo 2024-10-14 23:01:01 +05:30
Mayurakshi
473cd79af1 Upgrade duck duck go dependency constraints 2024-10-14 22:27:02 +05:30
fadingNA
b3c075714c restore lock json 2024-10-14 12:32:18 -04:00
fadingNA
f5661b3b1e add comment and align time from gen and stream to 30mins 2024-10-14 12:09:13 -04:00
fadingNA
8ce1fd561d adapt test case to align with function 2024-10-14 11:54:36 -04:00
fadingNA
adb2cf35d4 add redis mock to anthropic and sagemaker 2024-10-14 11:54:22 -04:00
fadingNA
3e32724729 change the method to save the whole conversation history instead of one msg 2024-10-14 11:53:52 -04:00
JeevaRamanathan
b59aa2f3e7 Merge branch 'main' into fix/1227-share_button 2024-10-14 21:11:48 +05:30
Alex
44405b250c Merge pull request #1213 from sccalabr/1204
Replacing About with a Help dropdown that has contact and documentati…
2024-10-14 15:57:48 +01:00
Alex
2b547f71f4 Merge pull request #1316 from shelar1423/main
DocsGPT DEMO UPDATED
2024-10-14 15:09:30 +01:00
utin-francis-peter
bd66d0a987 Merge branch 'main' of https://github.com/utin-francis-peter/DocsGPT into feat/sources-in-react-widget 2024-10-14 13:02:38 +01:00
Digvijay Shelar
56e3a1c3b2 DocsGPT DEMO UPDATED 2024-10-14 17:08:47 +05:30
utin-francis-peter
62802eb138 chore: styled component styles for sources, added showSources prop to widget, handled sources data.type, and rendering sources when available 2024-10-14 12:37:02 +01:00
utin-francis-peter
848beb11df chore: corrected typo in var declaration 2024-10-14 12:33:56 +01:00
utin-francis-peter
0481e766ae chore: updated Query and WidgetProps interface with source property 2024-10-14 12:30:57 +01:00
Mayurakshi
644a66c983 Fix: Pass retriever name to streaming api 2024-10-14 16:53:40 +05:30
sccalabr
5f62c0d57a fixing look 2024-10-13 09:34:32 -07:00
JeevaRamanathan
c440e6f8fa fixed overlapping 2024-10-13 15:32:17 +05:30
JeevaRamanathan
706bd6126a Merge branch 'arc53:main' into fix/1227-share_button 2024-10-13 14:00:16 +05:30
ayaan-qadri
f8544cf14b Added Scrollbar visible when popup is opened 2024-10-13 10:42:35 +05:30
fadingNA
a8bb992569 add possible scenario test case 2024-10-12 18:05:54 -04:00
fadingNA
ddafb96eba adapt cache and add proper comment docs string 2024-10-12 18:05:40 -04:00
fadingNA
1dfb5d29c3 remove unused import from previous cache 2024-10-12 18:05:07 -04:00
fadingNA
3c64abceb8 improve abstract for caching streaming 2024-10-12 15:25:36 -04:00
fadingNA
3c43b87e9f adding time for perform streaming response 2024-10-12 15:25:06 -04:00
fadingNA
d7fe1150dc cache.py for holding help function use on BASE ABC 2024-10-12 10:55:52 -04:00
fadingNA
3e55be910b hashlib helper to gen cachekey 2024-10-12 10:47:33 -04:00
fadingNA
1ae0af56cc add new feature for handling decorator cache , token 2024-10-12 10:47:10 -04:00
fadingNA
b329ede52a add redis configuration 2024-10-12 10:46:37 -04:00
akashmangoai
a9f6a06446 lazy import & fixed other issue 2024-10-11 22:58:18 +05:30
akashmangoai
24383997ef removed cloud based parameter which are not needed 2024-10-11 21:53:29 +05:30
penw0lf
48ec0ae44c Solved / #1294 2024-10-11 21:42:49 +05:30
sccalabr
ea49095b0a Addressing comments 2024-10-11 08:47:38 -07:00
Alex
f3ff3920d9 Merge pull request #1299 from shatanikmahanty/feat/check_docker_daemon_running
Feat: Add ability to start docker if it's not running
2024-10-11 15:27:06 +01:00
jayantp2003
3db07f3a26 Fix #859: Resolve issue with large zip breaking stream endpoint 2024-10-11 17:10:12 +05:30
jayantp2003
a2ef45e13f Fix #859: Resolve issue with large zip breaking stream endpoint 2024-10-11 17:08:04 +05:30
AkashJana18
3e20934e20 Added search bar and button 2024-10-11 12:15:51 +05:30
shatanikmahanty
ec5db5d2c7 Refactor: remove docker start script for windows platform 2024-10-11 11:50:18 +05:30
shatanikmahanty
cc25b5e856 Feat: Add ability to start docker if it's not running 2024-10-11 11:37:12 +05:30
rohittcodes
c06f232589 fix: height for md-devices 2024-10-11 09:14:09 +05:30
utin-francis-peter
aa57984bde build: added missing dependency 2024-10-11 03:55:35 +01:00
sccalabr
e1a8184c2e Fixing build issues 2024-10-10 11:33:13 -07:00
sccalabr
fc24eb08cb Changing dropdown to support not going off screen. 2024-10-10 11:33:13 -07:00
sccalabr
345ab8ea9e Addressing comments and using dropdown instead of button 2024-10-10 11:33:13 -07:00
Alex
65547bad87 Merge pull request #1288 from AkashJana18/tab-redesign
🚀 Feature: Tabs in settings redesign
2024-10-10 18:13:46 +01:00
Prathamesh Gursal
4402442e54 updated chatbot loader 2024-10-10 21:00:31 +05:30
Alex
5bfd7d5e6c Merge pull request #1274 from RohittCodes/fix-1210
fix upload
2024-10-10 10:42:13 +01:00
Alex
09537ec0dd Merge pull request #1235 from ovindu-a/issue-1230
Fix formatting of mobile retry button
2024-10-09 23:02:06 +01:00
rohittcodes
5ad4ba6abd wait text-color 2024-10-10 01:56:32 +05:30
rohittcodes
4decb34f99 Merge branch 'main' of https://github.com/RohittCodes/DocsGPT into fix-1210 2024-10-10 01:54:20 +05:30
AkashJana18
947014945f feat:hover-effect for better UI/UX 2024-10-09 21:23:03 +05:30
Ovindu Atukorala
b6710beadc Conditionally render retry button 2024-10-09 10:26:17 +00:00
Alex
c2c5f07ffa Merge pull request #1249 from shatanikmahanty/patch-1
Update localhost port to 3000 in readme
2024-10-09 10:13:30 +01:00
Alex
95a60adfcc Update lexeu-competition.md 2024-10-09 10:10:44 +01:00
Alex
59eeb73b60 Update HACKTOBERFEST.md 2024-10-09 10:09:14 +01:00
Alex
0173a4d7fa Update CONTRIBUTING.md 2024-10-09 10:07:01 +01:00
Alex
e2e7ee1893 Merge pull request #1281 from ANDROIDHASSAN/patch-1
Update lexeu-competition.md
2024-10-09 10:03:01 +01:00
Hassan Kazi - Web Dev / Software Engineer
58dfc58622 Update lexeu-competition.md
I have corrected the spelling of gather in the documentation
2024-10-09 14:15:41 +05:30
rohittcodes
c8bfc52fab fix gap b/w buttons 2024-10-09 06:11:36 +05:30
rohittcodes
3e50fe1aa9 fix button-color 2024-10-09 05:51:21 +05:30
rohittcodes
e7c760e68b Merge branch 'main' of https://github.com/RohittCodes/DocsGPT into fix-1210 2024-10-09 05:40:13 +05:30
Alex
fa9ca221b4 Merge pull request #1042 from PeterDaveHelloKitchen/Add-zhTW-locale
Add Traditional Chinese(zhTW) locale
2024-10-08 23:33:32 +01:00
Alex
cff76c672c Merge pull request #1280 from yeger00/Fix-typos
Fix some typos
2024-10-08 23:30:47 +01:00
Alex
2395785337 Merge pull request #1279 from mousumi2002/issues/1262
Fix: Prevent flash on dark theme
2024-10-08 23:30:00 +01:00
Alex
862ea5fa36 Merge pull request #1278 from anasKhafaga/feat/ci-enable-images-tagging
Feat(273): CI enable images tagging
2024-10-08 23:26:23 +01:00
Alex
aa0964d99f Merge pull request #1263 from utin-francis-peter/fix/issue#1261
Remove Icon Next to Question Bubble and Label Change
2024-10-08 23:18:36 +01:00
Prathamesh Gursal
5b5281e50c added customize loader for each section 2024-10-09 01:28:54 +05:30
Peter Dave Hello
8bcf7bdade Add Traditional Chinese(zhTW) locale 2024-10-09 03:22:53 +08:00
GURSAL PRATHAMESH APPASAHEB
57cfafeb34 Merge branch 'arc53:main' into main 2024-10-09 00:32:11 +05:30
yeger00
5ea8706ba9 Fix some typos 2024-10-08 21:11:21 +03:00
Mousumi Pal
68f497517d Merge branch 'arc53:main' into issues/1262 2024-10-08 23:00:29 +05:30
Mousumi Pal
8308bd0039 Fix: Prevent flash in dark mode 2024-10-08 23:00:11 +05:30
Anas Khafaga
b7f00324bc feat(CI): Build docker images 2024-10-08 18:37:53 +03:00
Anas Khafaga
77f5328ab9 feat(CI): Build docker images for development purposes 2024-10-08 18:37:38 +03:00
Alex
bb82b9a9d3 Merge pull request #1277 from arc53/fix-paths-2 2024-10-08 16:20:21 +01:00
Alex
355fd2b5d7 fix: file check 2024-10-08 15:56:48 +01:00
Ovindu Atukorala
1e6cc95f09 Replace copy icon with retry icon 2024-10-08 12:17:21 +00:00
utin-francis-peter
bb8b4cae79 style: adjusted left padding in ConversationTile 2024-10-08 12:36:36 +01:00
rohittcodes
faef061d74 fix upload 2024-10-08 17:04:53 +05:30
utin-francis-peter
62af7549c7 chore: removed mssg icon that's beside a conversationTile name 2024-10-08 10:34:22 +01:00
utin-francis-peter
04b4db763c chore: updated lang variant of "Source" across locales 2024-10-08 10:18:55 +01:00
utin-francis-peter
c95b4d1305 Revert "chore: rm icon next to question bubble"
This reverts commit 565b0c5a9c.
2024-10-08 10:12:06 +01:00
Shatanik Mahanty
40b8aa42cc Merge branch 'arc53:main' into patch-1 2024-10-08 12:52:28 +05:30
Alex
e66535c572 Merge pull request #1264 from PROSENJIT-RONI/issues/1256
Fix: Menu position on conversation list scroll
2024-10-08 00:33:01 +01:00
Prathamesh Gursal
81c8511316 added single loader with window responsiveness 2024-10-08 01:20:34 +05:30
Prathamesh Gursal
b59170078d make single loader more responsive 2024-10-08 01:19:26 +05:30
GURSAL PRATHAMESH APPASAHEB
453c653975 Merge branch 'arc53:main' into main 2024-10-08 00:39:20 +05:30
Prosenjit Swarnakar
976e7b6765 Fix: Menu position on conversation list scroll 2024-10-07 22:11:26 +05:30
Alex
94a8c42311 Merge pull request #1248 from shatanikmahanty/issues/1226
Fix: Minimise sidebar on nav item click on Mobile
2024-10-07 17:05:36 +01:00
shatanikmahanty
534b650c10 Merge branch 'issues/1226' of https://github.com/shatanikmahanty/DocsGPT into issues/1226 2024-10-07 21:17:25 +05:30
shatanikmahanty
f01c04bb24 Fix: Add type to parameter in handlePostDocumentSelect callback 2024-10-07 21:14:13 +05:30
utin-francis-peter
fcc0449076 chore: Source Docs is now Source 2024-10-07 16:44:00 +01:00
utin-francis-peter
565b0c5a9c chore: rm icon next to question bubble 2024-10-07 16:39:47 +01:00
Shatanik Mahanty
c204d37ac7 Merge branch 'arc53:main' into issues/1226 2024-10-07 21:07:45 +05:30
Alex
c5adea6993 Merge pull request #1259 from utin-francis-peter/fix/issue#1222
fix: hard breaking long string words and intelligent word breaks
2024-10-07 16:11:30 +01:00
utin-francis-peter
c8648101a7 build: style key fix 2024-10-07 15:57:47 +01:00
utin-francis-peter
1f9c167bd2 fix: hard breaking long string words and intelligently breaking or skipping hyphenated/whitespace to next line for good reading XP 2024-10-07 12:54:11 +01:00
Alex
cbae7bd500 Merge pull request #1246 from kom-senapati/llm/groq
Groq llms added
2024-10-07 11:17:13 +01:00
shatanikmahanty
27f97bc55d Fix: Close nav bar on conversation click 2024-10-07 10:12:18 +05:30
shatanikmahanty
601ba40cb0 Merge remote-tracking branch 'origin/main' into issues/1226 2024-10-07 10:11:05 +05:30
Alex
4632531f2d Merge pull request #1242 from Piyush-Tilokani/main
Make logo clickable
2024-10-07 00:05:05 +01:00
Alex
c9e95a9146 Merge pull request #1184 from Devparihar5/ExcelParser
new: added ExcelParser(tested) to read .xlsx files
2024-10-06 23:19:37 +01:00
Piyush Tilokani
c48d4ae7df Adjust positioning of logo 2024-10-06 18:48:16 +05:30
Alex
4895d389e4 Merge pull request #1243 from ayaan-qadri/main 2024-10-06 13:53:46 +01:00
Alex
92916e42c1 Merge pull request #1247 from anasKhafaga/feat/1228-mobile-settings-menu 2024-10-06 11:42:46 +01:00
Shatanik Mahanty
1a8499cf26 Update localhost port to 3000 in readme
Yarn dev by default runs the application on port 3000. Changed the port accordingly in readme to maintain consistency.
2024-10-06 13:52:01 +05:30
shatanikmahanty
81a912c93f Merge remote-tracking branch 'origin/main' into issues/1226 2024-10-06 12:26:05 +05:30
shatanikmahanty
989d6eee0f Fix: Minimise sidebar on nav item click on Mobile 2024-10-06 11:56:26 +05:30
Prathamesh Gursal
a8d371045b updated the loader in settings 2024-10-06 11:40:58 +05:30
Prathamesh Gursal
b80726e942 updated logs and analytics 2024-10-06 11:32:23 +05:30
Prathamesh Gursal
0fc48ea03f applying loader in the settings respective components 2024-10-06 11:13:01 +05:30
Alex
afc86efe28 Merge pull request #1238 from ManishMadan2882/main
Bug Fix: Crash, abnormal update while switching conversation Ids
2024-10-05 23:14:01 +01:00
Alex
ab1ebeb7e0 Merge pull request #1205 from arc53/dartpain/add-github-loader
Github remote loader
2024-10-05 22:06:00 +01:00
Alex
6932c7e3e9 feat: add filename to the top 2024-10-05 21:56:47 +01:00
Alex
c04687fdd1 fix: github loader metadata clickable 2024-10-05 21:53:30 +01:00
Alex
7717242112 fix(lint): ruff var 2024-10-05 21:37:55 +01:00
Alex
1ad82c22d9 fix: headers 2024-10-05 21:36:04 +01:00
Alex
8fa88175c1 fix: translation + auth 2024-10-05 21:33:58 +01:00
Anas Khafaga
b05fec93bb feat: enhance the appearance of scrollable setting menu in the mobile view 2024-10-05 19:17:13 +03:00
Anas Khafaga
802311a06a fix: remove the extra margin on screens greater than medium size 2024-10-05 17:45:48 +03:00
kom-senapati
dc0f26d3d8 fix: unused import of setting 2024-10-05 19:05:20 +05:30
Alex
36c32fd968 Merge pull request #1236 from anasKhafaga/fix/1220-border-styles
Fix(1220): border styles
2024-10-05 14:12:33 +01:00
kom-senapati
0001963a04 feat: groq llms added 2024-10-05 18:36:12 +05:30
penw0lf
6a264a45e2 Removed @vercel/analytics from frontend due to being flagged by AdBlocker, causing rendering issues. 2024-10-05 17:46:40 +05:30
Piyush Tilokani
d897315355 Make logo clickable 2024-10-05 17:26:58 +05:30
Alex
d536b9d8c6 Merge pull request #1203 from negativenagesh/hacktoberfest
Documentation error in "Hacktoberfest.md"
2024-10-05 12:35:16 +01:00
ManishMadan2882
6af7d4e6e8 Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2024-10-05 02:46:55 +05:30
ManishMadan2882
67dddcb224 fix(stream): while updating conv id 2024-10-05 02:46:32 +05:30
Anas Khafaga
aad12aa227 fix: update tables styles 2024-10-04 23:07:17 +03:00
Anas Khafaga
d71675f3d2 feat: create a custom global tailwind component (table) styles 2024-10-04 23:07:05 +03:00
Anas Khafaga
88fb35552a fix: folloup cards borders 2024-10-04 23:06:25 +03:00
Ovindu Atukorala
8a084a05c9 Fix formatting of mobile retry button 2024-10-04 19:40:54 +00:00
Alex
90ef7ddacb Merge pull request #1209 from JeevaRamanathan/bugfix/conversation_reset
fix: navigation and deletion issues in conversations
2024-10-04 20:28:12 +01:00
GURSAL PRATHAMESH APPASAHEB
034dfffb85 added the skeleton loader reusable component 2024-10-04 23:47:37 +05:30
Devendra Parihar
09a15e2e59 Delete mlb_teams_2012.csv:Zone.Identifier 2024-10-04 22:59:40 +05:30
Alex
7859a0d001 Merge pull request #1198 from Yash-2707/patch-1
Update migrate_to_v1_vectorstore.py
2024-10-04 18:17:31 +01:00
JeevaRamanathan
085e1b6c41 fix: share button available in mobile view
Signed-off-by: JeevaRamanathan <jeevaramanathan.m@infosys.com>
2024-10-04 21:34:40 +05:30
Alex
5b01664d53 Update README.md 2024-10-03 21:42:39 +01:00
JeevaRamanathan
03adfd4898 fix:navigation and deletion issues in conversations
Signed-off-by: JeevaRamanathan <jeevaramanathan.m@infosys.com>
2024-10-03 23:34:56 +05:30
negativenagesh
1616124fa2 Documentation error in Hacktoberfest.md 2024-10-03 16:22:54 +05:30
Alex
2611550ffd 2024-10-02 23:44:29 +01:00
YASH
2989be47cc Update migrate_to_v1_vectorstore.py
Enhancement made in the code by  error handling and logging batch processing and new functionalities like backup , progress tracking
2024-10-02 22:38:43 +05:30
Devendra Parihar
9b7a346380 Merge branch 'main' into ExcelParser 2024-10-02 22:25:09 +05:30
Alex
8c8bf8702f Merge pull request #1183 from Devparihar5/main
Refactor FaissStore to enhance error handling, add improve type hints, and document methods for better maintainability and usability
2024-10-02 12:17:54 +01:00
Alex
eb8c2a9277 Merge pull request #1178 from anasKhafaga/feat/1169-empty-tables
Feat(1169): Handle state of empty tables
2024-10-02 10:57:53 +01:00
Alex
350c91889e Update HACKTOBERFEST.md 2024-10-02 10:35:31 +01:00
Alex
43018840d1 Update HACKTOBERFEST.md 2024-10-02 10:35:00 +01:00
Alex
4daf443db8 Merge pull request #1190 from kom-senapati/feature/math-equations-support
feat: Add support for mathematical equations in Markdown
2024-10-02 10:25:06 +01:00
Anas Khafaga
a85f214fdb fix: sharp corner of the cell 2024-10-02 07:01:27 +03:00
Kom Senapati
ab77c4e616 feat: Add support for mathematical equations in Markdown 2024-10-02 03:59:24 +00:00
Alex
19315f72a0 Update README.md 2024-10-01 23:15:33 +01:00
Prathamesh Gursal
3683d4a759 loader component is created 2024-10-01 23:07:44 +05:30
devendra.parihar
e9a7722915 new: added ExcelParser(tested) to read .xlsx files 2024-10-01 22:11:17 +05:30
devendra.parihar
7794129929 new: added ExcelParser(tested) to read .xlsx files 2024-10-01 22:03:10 +05:30
Devendra Parihar
2ee2067634 Merge pull request #2 from Devparihar5/test_v1
fix: Fix unused exception variable in FaissStore.
2024-10-01 20:48:16 +05:30
Devendra Parihar
ef6ec3fcb8 fix: Fix unused exception variable in FaissStore. 2024-10-01 14:32:08 +00:00
Devendra Parihar
c57ff3ae51 Merge pull request #1 from Devparihar5/test_v1
fix: Refactor FaissStore to enhance error handling, improve type hint…
2024-10-01 19:43:26 +05:30
Devendra Parihar
aa7f59f88c fix: Refactor FaissStore to enhance error handling, improve type hints, and document methods for better maintainability and usability 2024-10-01 14:10:06 +00:00
Alex
3b4a95ef33 Merge pull request #1177 from DhruvKadam-git/master
Master
2024-10-01 14:55:38 +01:00
Anas Khafaga
09ba14b8ca feat: add a row for no chatbot state 2024-10-01 15:38:53 +03:00
Anas Khafaga
b5dc7281f9 feat: add a row for no document state 2024-10-01 15:29:58 +03:00
DhruvKadam-git
deca7726f4 Merge remote-tracking branch 'upstream/main'
This merge includes several important updates:

1. Error Handling: Added try-except blocks for file operations and network requests.
2. Logging Enhancements: Improved logging to capture more detailed information.
3. Code Refactoring: Created download_file and upload_index functions to avoid code repetition.
4. Configuration: Used constants for MIN_TOKENS, MAX_TOKENS, and RECURSION_DEPTH.
2024-10-01 17:55:33 +05:30
DhruvKadam-git
058e0279b4 Merge remote-tracking branch 'upstream/main'
This merge includes several important updates:

1. Error Handling: Added try-except blocks for file operations and network requests.
2. Logging Enhancements: Improved logging to capture more detailed information.
3. Code Refactoring: Created download_file and upload_index functions to avoid code repetition.
4. Configuration: Used constants for MIN_TOKENS, MAX_TOKENS, and RECURSION_DEPTH.
2024-10-01 17:44:30 +05:30
DhruvKadam-git
5e604950c5 Add .env-template 2024-10-01 17:39:31 +05:30
Alex
af1b81097f datetime sources 2024-10-01 11:55:30 +01:00
Manish Madan
08e713d381 Merge pull request #1163 from arc53/dependabot/npm_and_yarn/frontend/prettier-plugin-tailwindcss-0.6.8
chore(deps-dev): bump prettier-plugin-tailwindcss from 0.6.6 to 0.6.8 in /frontend
2024-10-01 16:16:12 +05:30
dependabot[bot]
a2c228c09f chore(deps-dev): bump prettier-plugin-tailwindcss in /frontend
Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.6.6 to 0.6.8.
- [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.6.6...v0.6.8)

---
updated-dependencies:
- dependency-name: prettier-plugin-tailwindcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-01 10:42:26 +00:00
Manish Madan
4e6afebf9e Merge pull request #1161 from arc53/dependabot/npm_and_yarn/frontend/vercel/analytics-1.3.1
chore(deps): bump @vercel/analytics from 0.1.10 to 1.3.1 in /frontend
2024-10-01 16:10:50 +05:30
dependabot[bot]
13d274202e chore(deps): bump @vercel/analytics from 0.1.10 to 1.3.1 in /frontend
Bumps [@vercel/analytics](https://github.com/vercel/analytics/tree/HEAD/packages/web) from 0.1.10 to 1.3.1.
- [Release notes](https://github.com/vercel/analytics/releases)
- [Commits](https://github.com/vercel/analytics/commits/1.3.1/packages/web)

---
updated-dependencies:
- dependency-name: "@vercel/analytics"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-01 10:35:57 +00:00
Manish Madan
f56acac656 Merge pull request #1162 from arc53/dependabot/npm_and_yarn/frontend/eslint-plugin-unused-imports-4.1.4
chore(deps-dev): bump eslint-plugin-unused-imports from 2.0.0 to 4.1.4 in /frontend
2024-10-01 16:04:05 +05:30
dependabot[bot]
68d325b5b5 chore(deps-dev): bump eslint-plugin-unused-imports in /frontend
Bumps [eslint-plugin-unused-imports](https://github.com/sweepline/eslint-plugin-unused-imports) from 2.0.0 to 4.1.4.
- [Commits](https://github.com/sweepline/eslint-plugin-unused-imports/commits/v4.1.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-unused-imports
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-01 10:25:46 +00:00
Manish Madan
40907a2584 Merge pull request #1164 from arc53/dependabot/npm_and_yarn/frontend/typescript-5.6.2
chore(deps-dev): bump typescript from 4.9.5 to 5.6.2 in /frontend
2024-10-01 15:52:42 +05:30
Alex
f4f5d99ec9 Merge pull request #1172 from ManishMadan2882/main
Fix: Auto select newly trained document
2024-10-01 11:16:27 +01:00
Alex
0475e55518 Merge pull request #1173 from sahil9001/system-theme-unless-set
feat: added theme check unless already set
2024-10-01 10:56:04 +01:00
Alex
872b390cfa Merge pull request #1154 from siiddhantt/feat/openapi-spec
feature: OpenAPI specification compliant endpoints
2024-10-01 10:51:51 +01:00
Alex
dc4c539607 Update HACKTOBERFEST.md 2024-10-01 10:43:14 +01:00
Alex
69f8c76ce2 Update HACKTOBERFEST.md 2024-10-01 10:36:50 +01:00
Alex
cbdcca7fd8 Create lexeu-competition.md 2024-10-01 10:35:52 +01:00
Sahil Silare
1e7fa988da feat: added theme check unless already set 2024-10-01 10:02:51 +05:30
Manish Madan
3cfe771b8b Merge branch 'arc53:main' into main 2024-10-01 03:15:00 +05:30
ManishMadan2882
8b4d6d0868 (fix:upload): select the newbie doc 2024-10-01 03:14:15 +05:30
Alex
ba35e1422b Update README.md 2024-09-30 22:41:06 +01:00
dependabot[bot]
8db9b09c96 chore(deps-dev): bump typescript from 4.9.5 to 5.6.2 in /frontend
Bumps [typescript](https://github.com/microsoft/TypeScript) from 4.9.5 to 5.6.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v4.9.5...v5.6.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 20:37:44 +00:00
Alex
78e99d1171 Merge pull request #1156 from anasKhafaga/feat/docker/enable-debugging
feat(Docker): Configure debugging with vscode and chrome
2024-09-30 16:43:37 +03:00
Alex
6a12f96fdc Update HACKTOBERFEST.md 2024-09-30 13:42:50 +01:00
Alex
b79a20151c fix: uploads 2024-09-30 13:28:42 +01:00
Siddhant Rai
c9976020dd fix: lint error 2024-09-30 01:15:36 +05:30
Siddhant Rai
e8988e82d0 refactor: answer routes to comply with OpenAPI spec using flask-restx 2024-09-30 00:41:34 +05:30
Anas Khafaga
ff95570da6 feat(Docker): Configure debugging with vscode and chrome 2024-09-29 14:39:16 +03:00
Dhruv Kadam
6698a000e6 Update worker.py
1. Error Handling: Added try-except blocks for file operations and 
    network requests.

2. Logging Enhancements: Improved logging to capture more 
    detailed information.

3. Code Refactoring: Created download_file and upload_index 
   functions to avoid code repetition.

4. Configuration: Used constants for MIN_TOKENS, MAX_TOKENS, 
    and RECURSION_DEPTH.
2024-09-29 14:49:40 +05:30
Siddhant Rai
b084e3074d refactor: user routes to comply with OpenAPI spec using flask-restx 2024-09-27 20:08:46 +05:30
Alex
bc4f9c3442 Merge pull request #1153 from utin-francis-peter/update-run-with-docker-compose
fix: updated docker execution script from `docker-compose` to `docker…
2024-09-26 14:30:56 +01:00
utin-francis-peter
ecf88e7ea1 fix: updated docker execution script from docker-compose to docker compose so it works on latest versions of docker used across contributors machine 2024-09-26 12:09:44 +01:00
Alex
d6cb66cd2f Update README.md 2024-09-26 11:04:01 +01:00
Alex
bc2241f67a Merge pull request #1152 from siiddhantt/feature/sync-remote
feat: sync remote sources
2024-09-25 14:17:57 +01:00
Siddhant Rai
3d292aa485 feat: sync remote sources through celery periodic tasks 2024-09-25 15:20:11 +05:30
Manish Madan
21f46a8aea Merge pull request #1148 from arc53/dependabot/npm_and_yarn/frontend/lint-staged-15.2.10
chore(deps-dev): bump lint-staged from 15.2.8 to 15.2.10 in /frontend
2024-09-24 21:06:37 +05:30
dependabot[bot]
ba6d61cc35 chore(deps-dev): bump lint-staged from 15.2.8 to 15.2.10 in /frontend
Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 15.2.8 to 15.2.10.
- [Release notes](https://github.com/lint-staged/lint-staged/releases)
- [Changelog](https://github.com/lint-staged/lint-staged/blob/master/CHANGELOG.md)
- [Commits](https://github.com/lint-staged/lint-staged/compare/v15.2.8...v15.2.10)

---
updated-dependencies:
- dependency-name: lint-staged
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-24 15:30:57 +00:00
Manish Madan
27b43c11bd Merge pull request #1151 from arc53/dependabot/npm_and_yarn/frontend/rollup-4.22.4
chore(deps): bump rollup from 4.20.0 to 4.22.4 in /frontend
2024-09-24 18:20:33 +05:30
Alex
a5292c4473 Update README.md 2024-09-24 12:50:27 +01:00
Alex
f3923488a5 Merge pull request #1143 from arc53/dependabot/pip/application/tzdata-2024.2
chore(deps): bump tzdata from 2024.1 to 2024.2 in /application
2024-09-23 23:33:53 +01:00
Alex
d964ebfff8 Merge pull request #1149 from arc53/dependabot/npm_and_yarn/frontend/react-i18next-15.0.2
chore(deps): bump react-i18next from 15.0.1 to 15.0.2 in /frontend
2024-09-23 23:33:43 +01:00
Alex
e420eeece4 Merge pull request #1144 from arc53/dependabot/pip/application/elasticsearch-8.15.1
chore(deps): bump elasticsearch from 8.14.0 to 8.15.1 in /application
2024-09-23 23:30:15 +01:00
dependabot[bot]
f34713545e chore(deps): bump react-i18next from 15.0.1 to 15.0.2 in /frontend
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 15.0.1 to 15.0.2.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v15.0.1...v15.0.2)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 22:30:09 +00:00
Alex
2b513c7d87 Merge pull request #1146 from arc53/dependabot/npm_and_yarn/frontend/i18next-23.15.1
chore(deps): bump i18next from 23.14.0 to 23.15.1 in /frontend
2024-09-23 23:29:09 +01:00
Alex
7e28893613 Merge pull request #1145 from arc53/dependabot/pip/application/pandas-2.2.3
chore(deps): bump pandas from 2.2.2 to 2.2.3 in /application
2024-09-23 23:26:41 +01:00
dependabot[bot]
822674ca78 chore(deps): bump i18next from 23.14.0 to 23.15.1 in /frontend
Bumps [i18next](https://github.com/i18next/i18next) from 23.14.0 to 23.15.1.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.14.0...v23.15.1)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 22:21:26 +00:00
dependabot[bot]
35ebf97fdf chore(deps): bump rollup from 4.20.0 to 4.22.4 in /frontend
Bumps [rollup](https://github.com/rollup/rollup) from 4.20.0 to 4.22.4.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v4.20.0...v4.22.4)

---
updated-dependencies:
- dependency-name: rollup
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 22:20:49 +00:00
Alex
b456c0ca9f Merge pull request #1147 from arc53/dependabot/npm_and_yarn/frontend/eslint-plugin-import-2.30.0
chore(deps-dev): bump eslint-plugin-import from 2.27.5 to 2.30.0 in /frontend
2024-09-23 23:19:49 +01:00
dependabot[bot]
bae49891be chore(deps-dev): bump eslint-plugin-import in /frontend
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.27.5 to 2.30.0.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.27.5...v2.30.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-import
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 20:32:45 +00:00
dependabot[bot]
dfb4a67d87 chore(deps): bump pandas from 2.2.2 to 2.2.3 in /application
Bumps [pandas](https://github.com/pandas-dev/pandas) from 2.2.2 to 2.2.3.
- [Release notes](https://github.com/pandas-dev/pandas/releases)
- [Commits](https://github.com/pandas-dev/pandas/compare/v2.2.2...v2.2.3)

---
updated-dependencies:
- dependency-name: pandas
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 20:14:39 +00:00
dependabot[bot]
8e727a3253 chore(deps): bump elasticsearch from 8.14.0 to 8.15.1 in /application
Bumps [elasticsearch](https://github.com/elastic/elasticsearch-py) from 8.14.0 to 8.15.1.
- [Release notes](https://github.com/elastic/elasticsearch-py/releases)
- [Commits](https://github.com/elastic/elasticsearch-py/compare/v8.14.0...v8.15.1)

---
updated-dependencies:
- dependency-name: elasticsearch
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 20:14:33 +00:00
dependabot[bot]
d6f03d7a07 chore(deps): bump tzdata from 2024.1 to 2024.2 in /application
Bumps [tzdata](https://github.com/python/tzdata) from 2024.1 to 2024.2.
- [Release notes](https://github.com/python/tzdata/releases)
- [Changelog](https://github.com/python/tzdata/blob/master/NEWS.md)
- [Commits](https://github.com/python/tzdata/compare/2024.1...2024.2)

---
updated-dependencies:
- dependency-name: tzdata
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 20:14:30 +00:00
Alex
5ada5bf1a0 Create HACKTOBERFEST.md 2024-09-23 17:30:58 +01:00
Alex
ae9c935c5c Merge pull request #1140 from ManishMadan2882/main
Stream sources
2024-09-23 15:18:41 +01:00
Alex
95618001aa Merge pull request #1135 from anasKhafaga/fix/mock-json-server
fix(deps): downgrade json-server to v0.17.4
2024-09-23 11:48:16 +01:00
ManishMadan2882
40c361968e feat(shared): sync sources flow; clean up 2024-09-23 01:33:41 +05:30
Manish Madan
757abda654 Merge branch 'arc53:main' into main 2024-09-21 17:53:08 +05:30
ManishMadan2882
862807e863 feat(conv): sync source stream in fe 2024-09-21 17:51:36 +05:30
ManishMadan2882
d188db887c feat(stream): stream sources before ans 2024-09-21 17:50:56 +05:30
ManishMadan2882
59b6c56262 feat(stream): yield sources in stream 2024-09-21 01:50:02 +05:30
Manish Madan
f92658de82 Merge pull request #1095 from arc53/dependabot/npm_and_yarn/extensions/react-widget/micromatch-4.0.8
chore(deps): bump micromatch from 4.0.7 to 4.0.8 in /extensions/react-widget
2024-09-20 18:20:12 +05:30
Alex
f2b3402c17 Merge pull request #1124 from arc53/dependabot/pip/application/openapi3-parser-1.1.18
chore(deps): bump openapi3-parser from 1.1.16 to 1.1.18 in /application
2024-09-20 12:59:05 +01:00
Alex
24badf65a4 Merge pull request #1126 from arc53/dependabot/pip/application/html2text-2024.2.26
chore(deps): bump html2text from 2020.1.16 to 2024.2.26 in /application
2024-09-20 12:58:38 +01:00
dependabot[bot]
86442f212f chore(deps): bump html2text from 2020.1.16 to 2024.2.26 in /application
Bumps [html2text](https://github.com/Alir3z4/html2text) from 2020.1.16 to 2024.2.26.
- [Release notes](https://github.com/Alir3z4/html2text/releases)
- [Changelog](https://github.com/Alir3z4/html2text/blob/master/ChangeLog.rst)
- [Commits](https://github.com/Alir3z4/html2text/compare/2020.1.16...2024.2.26)

---
updated-dependencies:
- dependency-name: html2text
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-20 11:13:59 +00:00
dependabot[bot]
9b6d6ecc32 chore(deps): bump openapi3-parser from 1.1.16 to 1.1.18 in /application
Bumps [openapi3-parser](https://github.com/manchenkoff/openapi3-parser) from 1.1.16 to 1.1.18.
- [Release notes](https://github.com/manchenkoff/openapi3-parser/releases)
- [Commits](https://github.com/manchenkoff/openapi3-parser/compare/v1.1.16...v1.1.18)

---
updated-dependencies:
- dependency-name: openapi3-parser
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-20 11:13:57 +00:00
Alex
1f51277004 Merge pull request #1139 from arc53/dependabot/pip/application/langchain-core-0.3.2
chore(deps): bump langchain-core from 0.2.38 to 0.3.2 in /application
2024-09-20 12:12:55 +01:00
Alex
68cc646a3e fix(test): better test + cov 2024-09-20 12:07:17 +01:00
dependabot[bot]
420ca1b3b4 chore(deps): bump micromatch in /extensions/react-widget
Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.7 to 4.0.8.
- [Release notes](https://github.com/micromatch/micromatch/releases)
- [Changelog](https://github.com/micromatch/micromatch/blob/4.0.8/CHANGELOG.md)
- [Commits](https://github.com/micromatch/micromatch/compare/4.0.7...4.0.8)

---
updated-dependencies:
- dependency-name: micromatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-20 11:02:34 +00:00
Alex
a83e68815a fix(test): only 3.11 python 2024-09-20 11:53:50 +01:00
Alex
d87aebb718 fix(deps): now it works better 2024-09-20 11:51:57 +01:00
Alex
a9a4d14e8a Merge pull request #1132 from ManishMadan2882/main
Fix UI for mobile devices
2024-09-20 11:39:57 +01:00
dependabot[bot]
9ed2fc7359 chore(deps): bump langchain-core from 0.2.38 to 0.3.2 in /application
Bumps [langchain-core](https://github.com/langchain-ai/langchain) from 0.2.38 to 0.3.2.
- [Release notes](https://github.com/langchain-ai/langchain/releases)
- [Commits](https://github.com/langchain-ai/langchain/compare/langchain-core==0.2.38...langchain-core==0.3.2)

---
updated-dependencies:
- dependency-name: langchain-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-20 10:37:01 +00:00
Alex
caad382a95 Merge pull request #1128 from arc53/dependabot/pip/application/anthropic-0.34.2
chore(deps): bump anthropic from 0.34.0 to 0.34.2 in /application
2024-09-20 11:35:26 +01:00
Alex
ea39fc9c48 Merge pull request #1133 from arc53/dependabot/pip/scripts/langchain-0.2.10
chore(deps): bump langchain from 0.1.4 to 0.2.10 in /scripts
2024-09-20 11:33:18 +01:00
ManishMadan2882
bf7cce52db fix(conv): /search after setting id 2024-09-20 02:59:15 +05:30
ManishMadan2882
63a15a3359 fix(retry btn): overlflow in mobile 2024-09-20 02:25:00 +05:30
ManishMadan2882
db34392210 fix(conv): scroll btn; css clean up 2024-09-20 01:06:58 +05:30
Alex
cc4e0ba6c1 Merge pull request #1138 from anasKhafaga/fix/local-docker-bind-mount
fix(Docker): Integrate a bind mount in the local docker compose file
2024-09-19 19:24:27 +01:00
Anas Khafaga
38989f9c68 fix(Docker): Integrate a bind mount in the local docker compose file 2024-09-19 17:48:26 +03:00
Anas Khafaga
c78c92e539 fix(deps): downgrade json-server to v0.17.4 2024-09-19 16:34:35 +03:00
Alex
31e694f50d Merge pull request #1069 from arc53/dependabot/npm_and_yarn/frontend/reduxjs/toolkit-2.2.7
chore(deps): bump @reduxjs/toolkit from 1.9.2 to 2.2.7 in /frontend
2024-09-18 23:36:49 +01:00
ManishMadan2882
5368199517 fix(store.ts): type err 2024-09-19 01:10:16 +05:30
ManishMadan2882
6bbb9176fc Merge branch 'dependabot/npm_and_yarn/frontend/reduxjs/toolkit-2.2.7' of https://github.com/arc53/docsgpt into dependabot/npm_and_yarn/frontend/reduxjs/toolkit-2.2.7 2024-09-18 14:48:25 +05:30
dependabot[bot]
4209eee2f8 chore(deps): bump @reduxjs/toolkit from 1.9.2 to 2.2.7 in /frontend
Bumps [@reduxjs/toolkit](https://github.com/reduxjs/redux-toolkit) from 1.9.2 to 2.2.7.
- [Release notes](https://github.com/reduxjs/redux-toolkit/releases)
- [Commits](https://github.com/reduxjs/redux-toolkit/compare/v1.9.2...v2.2.7)

---
updated-dependencies:
- dependency-name: "@reduxjs/toolkit"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-18 09:01:06 +00:00
Manish Madan
f65ebb6b71 Merge pull request #1096 from arc53/dependabot/npm_and_yarn/frontend/types/react-syntax-highlighter-15.5.13
chore(deps-dev): bump @types/react-syntax-highlighter from 15.5.6 to 15.5.13 in /frontend
2024-09-18 14:29:11 +05:30
dependabot[bot]
ef8107e56a chore(deps-dev): bump @types/react-syntax-highlighter in /frontend
Bumps [@types/react-syntax-highlighter](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-syntax-highlighter) from 15.5.6 to 15.5.13.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-syntax-highlighter)

---
updated-dependencies:
- dependency-name: "@types/react-syntax-highlighter"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-18 08:52:35 +00:00
Manish Madan
2293a30f19 Merge pull request #1130 from arc53/dependabot/npm_and_yarn/frontend/eslint-8.57.1
chore(deps-dev): bump eslint from 8.33.0 to 8.57.1 in /frontend
2024-09-18 14:20:14 +05:30
dependabot[bot]
d7678fd355 chore(deps-dev): bump eslint from 8.33.0 to 8.57.1 in /frontend
Bumps [eslint](https://github.com/eslint/eslint) from 8.33.0 to 8.57.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v8.33.0...v8.57.1)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-18 08:40:22 +00:00
Manish Madan
27d8a5cf99 Merge pull request #1098 from arc53/dependabot/npm_and_yarn/frontend/eslint-config-prettier-9.1.0
chore(deps-dev): bump eslint-config-prettier from 8.6.0 to 9.1.0 in /frontend
2024-09-18 14:09:04 +05:30
dependabot[bot]
03f6c58ac6 chore(deps-dev): bump eslint-config-prettier in /frontend
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 8.6.0 to 9.1.0.
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v8.6.0...v9.1.0)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-18 08:30:58 +00:00
Manish Madan
4fb52dc6fc Merge pull request #1131 from arc53/dependabot/npm_and_yarn/frontend/vite-5.4.6
chore(deps-dev): bump vite from 5.3.5 to 5.4.6 in /frontend
2024-09-18 13:59:20 +05:30
Alex
0232ba3f25 Merge pull request #1134 from arc53/dependabot/npm_and_yarn/docs/next-14.2.12
chore(deps): bump next from 14.1.1 to 14.2.12 in /docs
2024-09-18 09:18:01 +01:00
dependabot[bot]
5987e4c8e1 chore(deps): bump next from 14.1.1 to 14.2.12 in /docs
Bumps [next](https://github.com/vercel/next.js) from 14.1.1 to 14.2.12.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v14.1.1...v14.2.12)

---
updated-dependencies:
- dependency-name: next
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-18 01:11:06 +00:00
ManishMadan2882
18ce7c8f2f fix(mobile): minor changes 2024-09-18 03:21:46 +05:30
dependabot[bot]
177c9da8b5 chore(deps): bump langchain from 0.1.4 to 0.2.10 in /scripts
Bumps [langchain](https://github.com/langchain-ai/langchain) from 0.1.4 to 0.2.10.
- [Release notes](https://github.com/langchain-ai/langchain/releases)
- [Commits](https://github.com/langchain-ai/langchain/compare/langchain-ai21==0.1.4...langchain==0.2.10)

---
updated-dependencies:
- dependency-name: langchain
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-17 21:45:01 +00:00
ManishMadan2882
b5f1a8e90f fix(mobile): vertical overflows 2024-09-18 01:44:34 +05:30
dependabot[bot]
494c3dd1bd chore(deps-dev): bump vite from 5.3.5 to 5.4.6 in /frontend
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.3.5 to 5.4.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-17 20:06:05 +00:00
dependabot[bot]
ad8f78d51e chore(deps): bump anthropic from 0.34.0 to 0.34.2 in /application
Bumps [anthropic](https://github.com/anthropics/anthropic-sdk-python) from 0.34.0 to 0.34.2.
- [Release notes](https://github.com/anthropics/anthropic-sdk-python/releases)
- [Changelog](https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md)
- [Commits](https://github.com/anthropics/anthropic-sdk-python/compare/v0.34.0...v0.34.2)

---
updated-dependencies:
- dependency-name: anthropic
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-16 20:24:48 +00:00
Alex
5112801c37 Merge pull request #1123 from ManishMadan2882/main 2024-09-13 16:02:41 +01:00
ManishMadan2882
226adfdba2 fix: mobile overflows 2024-09-13 19:13:53 +05:30
ManishMadan2882
22c0375dca fix(ui): overflow in queries 2024-09-13 19:01:38 +05:30
akashAD98
66ebfef619 added lancedb in pacage 2024-09-12 18:55:01 +05:30
akashAD98
7e75513151 added support for lacedb as vectordb 2024-09-12 18:51:29 +05:30
Alex
e77f6c9f6f Merge pull request #1097 from arc53/dependabot/npm_and_yarn/frontend/prettier-plugin-tailwindcss-0.6.6
chore(deps-dev): bump prettier-plugin-tailwindcss from 0.2.2 to 0.6.6 in /frontend
2024-09-12 09:27:18 +01:00
dependabot[bot]
5bd7c0ab8b chore(deps-dev): bump prettier-plugin-tailwindcss in /frontend
Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.2.2 to 0.6.6.
- [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.2.2...v0.6.6)

---
updated-dependencies:
- dependency-name: prettier-plugin-tailwindcss
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-11 22:53:49 +00:00
Alex
97f7f6f7d2 Merge pull request #1121 from arc53/dependabot/npm_and_yarn/frontend/tailwindcss-3.4.11
chore(deps-dev): bump tailwindcss from 3.2.4 to 3.4.11 in /frontend
2024-09-11 23:52:34 +01:00
dependabot[bot]
d65fc70f07 chore(deps-dev): bump tailwindcss from 3.2.4 to 3.4.11 in /frontend
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.2.4 to 3.4.11.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/v3.4.11/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.2.4...v3.4.11)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-11 22:32:46 +00:00
Alex
dcae85eae8 Merge pull request #1114 from Shubham-EV/patch-1
Removed repetitive text in docs
2024-09-11 23:30:13 +01:00
Alex
686a48298b Merge pull request #1120 from ManishMadan2882/main
Load sources on shared conversations
2024-09-11 20:02:54 +01:00
Alex
8ca590559d fix(lint): types 2024-09-11 19:01:42 +01:00
ManishMadan2882
70251222cc Merge: branch main from upstream 2024-09-11 23:12:15 +05:30
Alex
e55c68d27e Merge pull request #1116 from siiddhantt/feat/analytics-and-logs
Feature: Analytics and Logs Dashboard
2024-09-11 15:10:40 +01:00
Siddhant Rai
da4f2ef6b3 fix: linting issue 2024-09-11 18:02:47 +05:30
Siddhant Rai
dbf2cabd38 fix: linting issue 2024-09-11 18:01:23 +05:30
Siddhant Rai
72e68a163c Merge branch 'main' into feat/analytics-and-logs 2024-09-11 17:58:04 +05:30
ManishMadan2882
919a87bf47 fix: load sources on shared conversations 2024-09-11 17:55:31 +05:30
Siddhant Rai
bea0bbfcdb feat: user logs section in settings 2024-09-11 17:45:54 +05:30
Alex
c12d7a8d82 Merge pull request #1102 from arc53/dependabot/pip/application/flask-3.0.3
chore(deps): bump flask from 3.0.1 to 3.0.3 in /application
2024-09-10 14:16:42 +01:00
Alex
711ad1750a Merge pull request #1100 from arc53/dependabot/pip/application/werkzeug-3.0.4
chore(deps): bump werkzeug from 3.0.3 to 3.0.4 in /application
2024-09-10 14:16:31 +01:00
dependabot[bot]
825567d449 chore(deps): bump flask from 3.0.1 to 3.0.3 in /application
Bumps [flask](https://github.com/pallets/flask) from 3.0.1 to 3.0.3.
- [Release notes](https://github.com/pallets/flask/releases)
- [Changelog](https://github.com/pallets/flask/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/flask/compare/3.0.1...3.0.3)

---
updated-dependencies:
- dependency-name: flask
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-10 13:12:34 +00:00
dependabot[bot]
800439d29e chore(deps): bump werkzeug from 3.0.3 to 3.0.4 in /application
Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.0.3 to 3.0.4.
- [Release notes](https://github.com/pallets/werkzeug/releases)
- [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/werkzeug/compare/3.0.3...3.0.4)

---
updated-dependencies:
- dependency-name: werkzeug
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-10 13:11:59 +00:00
Alex
e3517dde13 Merge pull request #1104 from arc53/dependabot/pip/application/transformers-4.44.2
chore(deps): bump transformers from 4.44.0 to 4.44.2 in /application
2024-09-10 14:10:48 +01:00
dependabot[bot]
f2da8473a4 chore(deps): bump transformers from 4.44.0 to 4.44.2 in /application
Bumps [transformers](https://github.com/huggingface/transformers) from 4.44.0 to 4.44.2.
- [Release notes](https://github.com/huggingface/transformers/releases)
- [Commits](https://github.com/huggingface/transformers/compare/v4.44.0...v4.44.2)

---
updated-dependencies:
- dependency-name: transformers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-10 13:02:52 +00:00
Alex
9cc9a6e9b4 Merge pull request #1103 from arc53/dependabot/pip/application/tqdm-4.66.5
chore(deps): bump tqdm from 4.66.3 to 4.66.5 in /application
2024-09-10 14:01:55 +01:00
dependabot[bot]
873406732f chore(deps): bump tqdm from 4.66.3 to 4.66.5 in /application
Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.66.3 to 4.66.5.
- [Release notes](https://github.com/tqdm/tqdm/releases)
- [Commits](https://github.com/tqdm/tqdm/compare/v4.66.3...v4.66.5)

---
updated-dependencies:
- dependency-name: tqdm
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-10 12:13:16 +00:00
Alex
14ab950a6c fix: pinning sentence-transformers==3.0.1 2024-09-10 13:12:00 +01:00
Alex
6cd8e71f4f Merge pull request #1119 from arc53/dependabot/npm_and_yarn/mock-backend/multi-4314d4edfb
chore(deps): bump path-to-regexp and json-server in /mock-backend
2024-09-10 12:42:16 +01:00
Alex
4aeaec9dc7 Merge pull request #1117 from ManishMadan2882/main
Adding option to collect feedback in React widget
2024-09-10 12:18:08 +01:00
ManishMadan2882
e318228a08 purge unwanted linting 2024-09-10 16:26:13 +05:30
dependabot[bot]
d22efbf745 chore(deps): bump path-to-regexp and json-server in /mock-backend
Removes [path-to-regexp](https://github.com/pillarjs/path-to-regexp). It's no longer used after updating ancestor dependency [json-server](https://github.com/typicode/json-server). These dependencies need to be updated together.


Removes `path-to-regexp`

Updates `json-server` from 0.17.4 to 1.0.0-beta.2
- [Release notes](https://github.com/typicode/json-server/releases)
- [Commits](https://github.com/typicode/json-server/compare/v0.17.4...v1.0.0-beta.2)

---
updated-dependencies:
- dependency-name: path-to-regexp
  dependency-type: indirect
- dependency-name: json-server
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-10 09:47:05 +00:00
Alex
90309d5552 feat: user logging api operations level 2024-09-10 01:30:47 +01:00
Alex
72842ecd7a Merge pull request #1118 from arc53/1059-migrating-database-to-new-model 2024-09-10 00:17:59 +01:00
Alex
a1b32ffca9 fix: type 2024-09-10 00:06:43 +01:00
Alex
44d225e6ca Merge branch 'main' into 1059-migrating-database-to-new-model 2024-09-09 23:55:25 +01:00
ManishMadan2882
37ab5f9d7a Merge branch 'main' of https://github.com/ManishMadan2882/docsgpt 2024-09-10 03:28:09 +05:30
ManishMadan2882
61fdcec511 minor change 2024-09-10 03:27:49 +05:30
Manish Madan
45cc4fd97a Merge branch 'arc53:main' into main 2024-09-10 03:01:37 +05:30
ManishMadan2882
3228b88312 widget: minor changes 2024-09-10 02:44:10 +05:30
Alex
a1d3592d08 fix: typo 2024-09-09 21:06:30 +01:00
Alex
c686d950d0 Merge pull request #1062 from ManishMadan2882/1059-migrating-database-to-new-model
Migrating database to new model
2024-09-09 21:01:04 +01:00
Alex
ca779bb0af lint: ruff fix 2024-09-09 20:24:15 +01:00
Alex
90f64e2527 fix: references on shar / api keys 2024-09-09 20:22:03 +01:00
Alex
444d50f751 fix: faiss source name 2024-09-09 16:43:20 +01:00
Alex
2f9c72c1cf feat: migrate store to source_id 2024-09-09 15:46:18 +01:00
Alex
1bb81614a5 fix: metadata things 2024-09-09 13:37:11 +01:00
Alex
888e13e198 feat: mongo vector migrate script 2024-09-09 13:01:58 +01:00
Alex
8166642ff9 fix: write id instead of old path on remote db's 2024-09-09 12:00:59 +01:00
ManishMadan2882
51c42790b7 widget: add option to collect feedback 2024-09-09 16:20:07 +05:30
Alex
f105fd1b2c lint: final fix 2024-09-08 23:19:10 +01:00
Alex
fe78e9a336 lint: more lintingg 2024-09-08 22:55:45 +01:00
Alex
2fce25b0c8 fix: Doc type 2024-09-08 22:52:09 +01:00
Alex
6c0da2ea94 lint: ruff fix 2024-09-08 17:02:48 +01:00
Alex
a353e69648 feat: new vectors structure 2024-09-08 16:59:51 +01:00
Siddhant Rai
ac930d5504 feat: analytics dashboard with respective endpoints 2024-09-07 14:44:35 +05:30
Shubham
d4cf8037b7 Removed repetitive text in docs 2024-09-06 06:06:26 +05:30
Alex
fb1fd851b0 Merge pull request #1045 from Jacksonxhx/Jackson
Integrated Milvus Vector DB into main
2024-09-05 23:57:41 +01:00
Alex
2ff8c0b128 Merge branch 'main' into Jackson 2024-09-05 23:43:17 +01:00
Alex
d232229abf feat Milvus integration 2024-09-05 23:41:51 +01:00
Alex
490e58fb52 Merge pull request #1113 from ManishMadan2882/main
Refining the scrolling functionality while streaming
2024-09-05 00:03:45 +01:00
ManishMadan2882
a8582be54d smooth transition to new input 2024-09-05 03:17:14 +05:30
ManishMadan2882
30bb8449e9 fix: wrap code without a match 2024-09-05 03:07:32 +05:30
ManishMadan2882
adb7132e02 conversation: refined scrolling 2024-09-05 02:34:15 +05:30
Manish Madan
4a1e488bd7 Merge branch 'arc53:main' into main 2024-09-04 00:21:01 +05:30
ManishMadan2882
d200db0eeb clean pkg json after publish 2024-09-04 00:20:42 +05:30
Siddhant Rai
28e06fa684 fix: minor ui inconsistencies 2024-09-03 16:11:24 +05:30
Alex
c4cb9b07cb Merge pull request #1112 from arc53/feat/openai-proxy
feat: added easy way to proxy
2024-09-02 20:14:29 +01:00
Alex
817fc5d4b3 fix: little nextra edit 2024-09-02 20:11:31 +01:00
Alex
2de1e5f71a chore: open ai compatable data 2024-09-02 20:09:16 +01:00
Alex
5246d85f11 fix: ruff 2024-09-02 20:00:24 +01:00
Alex
9526ed0258 feat: added easy way to proxy 2024-09-02 19:46:25 +01:00
Alex
736add031c Merge pull request #1111 from ManishMadan2882/main
Widget: Replaced deprecated dependency
2024-09-02 16:29:01 +01:00
ManishMadan2882
d4042ebaa2 minor change 2024-09-02 17:44:46 +05:30
ManishMadan2882
54e31be3b2 adding markdown-it 2024-09-02 17:12:03 +05:30
Alex
b630be8c8a fix: remove logtail 2024-09-01 11:10:54 +01:00
Alex
0aca41f9a6 fix: faiss dependency 2024-09-01 11:09:24 +01:00
Alex
a3fed0f84b Merge pull request #1101 from arc53/dependabot/pip/application/pandas-2.2.2
chore(deps): bump pandas from 2.2.0 to 2.2.2 in /application
2024-08-31 19:21:02 +01:00
Alex
1414ad6d50 Merge pull request #1109 from aameraryan/csv-upload
CSV upload
2024-08-31 19:18:22 +01:00
Alex
ed6b4dabf8 Merge pull request #1110 from arc53/logging
feat: logging
2024-08-31 19:17:46 +01:00
Alex
d9309ebc6e feat: better token counter 2024-08-31 17:07:40 +01:00
Alex
c49b7613e0 fix: langchain warning 2024-08-31 12:53:37 +01:00
Alex
4f88b6dc71 feat: logging 2024-08-31 12:30:03 +01:00
Aamer Aryan
5c9e6404cc fix: bump eslint-plugin-prettier from 4.2.1 to 5.2.1
Committer: Aamer Aryan <aameraryan@gmail.com>
2024-08-31 04:58:47 +05:30
Aamer Aryan
80df494787 fix: add .csv support to file upload input 2024-08-31 04:54:01 +05:30
Alex
c0886c2785 Merge pull request #1107 from ManishMadan2882/main
React-widget: Adding "large" option for widget size
2024-08-28 23:30:28 +01:00
ManishMadan2882
a83a56eecd update script 2024-08-29 03:14:57 +05:30
ManishMadan2882
130eb56d09 add script: automate publish 2024-08-29 03:10:27 +05:30
ManishMadan2882
b60b473e02 fix(warn): update prop name 2024-08-29 03:08:33 +05:30
Alex
e0504eb957 Merge pull request #1105 from arc53/dependabot/npm_and_yarn/extensions/chrome/braces-3.0.3
chore(deps-dev): bump braces from 3.0.2 to 3.0.3 in /extensions/chrome
2024-08-28 18:14:41 +01:00
dependabot[bot]
3886e41e94 chore(deps-dev): bump braces from 3.0.2 to 3.0.3 in /extensions/chrome
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-28 17:04:55 +00:00
ManishMadan2882
edc54c7120 update script 2024-08-28 16:03:43 +05:30
ManishMadan2882
cef1167ef1 update script 2024-08-28 16:02:10 +05:30
ManishMadan2882
f456500f3a size: add large 2024-08-28 04:30:47 +05:30
dependabot[bot]
59328ea44d chore(deps): bump pandas from 2.2.0 to 2.2.2 in /application
Bumps [pandas](https://github.com/pandas-dev/pandas) from 2.2.0 to 2.2.2.
- [Release notes](https://github.com/pandas-dev/pandas/releases)
- [Commits](https://github.com/pandas-dev/pandas/compare/v2.2.0...v2.2.2)

---
updated-dependencies:
- dependency-name: pandas
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-26 20:48:56 +00:00
Alex
0dc840dc8e Merge pull request #1094 from ManishMadan2882/main
Update docs: minor fixes, version update
2024-08-26 11:15:44 +01:00
ManishMadan2882
6700028bd1 fix: docs, update version; update readme 2024-08-26 02:29:04 +05:30
Alex
213b1d1d0d Merge pull request #1093 from shelar1423/main
Widget Documentation update
2024-08-25 11:00:18 +01:00
Alex
feab64b09a fix: numbered list 2024-08-25 10:58:28 +01:00
digvijay shelar
f9f096cca8 Widget Documentation update 2024-08-25 13:09:57 +05:30
Alex
535d174c2b Merge pull request #1092 from ManishMadan2882/main
React widget: Sync with the Stream endpoint, error handling
2024-08-23 14:41:23 +01:00
ManishMadan2882
11d2401970 version update 2024-08-23 18:25:37 +05:30
ManishMadan2882
232b36d4ae fix: sync with the error handling 2024-08-23 17:58:57 +05:30
Alex
b38b159f4e Merge pull request #1089 from ManishMadan2882/main
Upgrading options in React widget
2024-08-23 12:10:12 +01:00
Alex
606bf1ff58 Merge pull request #1090 from siiddhantt/fix/minor-bugs
fix: minor ui bug
2024-08-23 12:05:08 +01:00
Siddhant Rai
46cec638dd fix: chatbot table out of bounds 2024-08-23 11:57:24 +05:30
ManishMadan2882
8637397c86 options: theme, button icon and bg 2024-08-23 02:55:00 +05:30
Alex
7502e1881f Merge pull request #1087 from shriyaMadan/main
Fix streaming issue on new conversation ID
2024-08-22 11:22:42 +01:00
Alex
734d5e50c5 Merge pull request #1088 from ManishMadan2882/main
React Widget: Fix for Next.js
2024-08-21 23:46:01 +01:00
Alex
052ff6727b Merge pull request #1082 from arc53/dependabot/pip/application/anthropic-0.34.0
chore(deps): bump anthropic from 0.12.0 to 0.34.0 in /application
2024-08-21 21:42:29 +01:00
Alex
2962dbd6b8 Merge pull request #1081 from arc53/dependabot/pip/application/qdrant-client-1.11.0
chore(deps): bump qdrant-client from 1.9.0 to 1.11.0 in /application
2024-08-21 21:42:21 +01:00
ManishMadan2882
392afd6f33 fix(Next): window is not defined 2024-08-22 00:26:09 +05:30
“Shriya
fc3f4dff10 Merge remote-tracking branch 'refs/remotes/origin/main' 2024-08-21 06:00:19 +05:30
“Shriya
24d6889b24 abort stream when conversationId updates 2024-08-21 05:50:04 +05:30
Alex
27e3e22703 Merge pull request #1076 from arc53/dependabot/pip/scripts/nltk-3.9
chore(deps): bump nltk from 3.8.1 to 3.9 in /scripts
2024-08-20 23:29:55 +01:00
dependabot[bot]
7b7f609c47 chore(deps): bump qdrant-client from 1.9.0 to 1.11.0 in /application
Bumps [qdrant-client](https://github.com/qdrant/qdrant-client) from 1.9.0 to 1.11.0.
- [Release notes](https://github.com/qdrant/qdrant-client/releases)
- [Commits](https://github.com/qdrant/qdrant-client/compare/v1.9.0...v1.11.0)

---
updated-dependencies:
- dependency-name: qdrant-client
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-20 22:25:35 +00:00
Alex
5389c8858a Merge pull request #1083 from arc53/dependabot/pip/application/pymongo-4.8.0
chore(deps): bump pymongo from 4.6.3 to 4.8.0 in /application
2024-08-20 23:24:27 +01:00
Alex
c2d2fbba96 Merge pull request #1086 from siiddhantt/fix/remark-gfm-incompatible
fix: updated both remark-gfm and react-markdown to compatible versions
2024-08-20 18:02:18 +01:00
Siddhant Rai
cfc039dae1 fix: refactor code for react-markdown 9.0.1 2024-08-20 22:06:55 +05:30
Siddhant Rai
edf24dc992 fix: updated both remark-gfm and react-markdown to compatible versions 2024-08-20 14:18:15 +05:30
Alex
97710296ac Merge pull request #1085 from siiddhantt/fix/remark-gfm-incompatible
fix: revert to remark-gfm 3.0.1
2024-08-20 09:32:34 +01:00
Siddhant Rai
acbfc0bb81 fix: remark-gfm 4.0.0 incompatible with react-markdown 8.0.7 2024-08-20 13:56:20 +05:30
Alex
e1fe2fb093 Merge pull request #1084 from ManishMadan2882/main
Extensions: Add size option to react-widget
2024-08-20 00:34:09 +01:00
ManishMadan2882
dd5c1ec9ed minor design change 2024-08-20 04:23:16 +05:30
dependabot[bot]
c7f7614646 chore(deps): bump @reduxjs/toolkit from 1.9.2 to 2.2.7 in /frontend
Bumps [@reduxjs/toolkit](https://github.com/reduxjs/redux-toolkit) from 1.9.2 to 2.2.7.
- [Release notes](https://github.com/reduxjs/redux-toolkit/releases)
- [Commits](https://github.com/reduxjs/redux-toolkit/compare/v1.9.2...v2.2.7)

---
updated-dependencies:
- dependency-name: "@reduxjs/toolkit"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 21:43:00 +00:00
Alex
d604398642 Merge pull request #1080 from arc53/dependabot/npm_and_yarn/frontend/postcss-8.4.41
chore(deps-dev): bump postcss from 8.4.40 to 8.4.41 in /frontend
2024-08-19 22:38:01 +01:00
Alex
d40b1d8937 Merge pull request #1079 from arc53/dependabot/npm_and_yarn/frontend/multi-ec30208de6
chore(deps): bump react-dom and @types/react-dom in /frontend
2024-08-19 22:37:52 +01:00
Alex
49b4b476dc Merge pull request #1078 from arc53/dependabot/npm_and_yarn/frontend/vitejs/plugin-react-4.3.1
chore(deps-dev): bump @vitejs/plugin-react from 4.2.1 to 4.3.1 in /frontend
2024-08-19 22:37:36 +01:00
Alex
c0ec689be9 Merge pull request #1077 from arc53/dependabot/npm_and_yarn/frontend/i18next-23.14.0
chore(deps): bump i18next from 23.11.5 to 23.14.0 in /frontend
2024-08-19 22:37:00 +01:00
Alex
8e26decb5b Merge pull request #1075 from siiddhantt/feat/new-conversation-ui
feat: new ui for sources in conversation
2024-08-19 22:36:35 +01:00
ManishMadan2882
921efcbf4b add size prop - small/medium 2024-08-20 02:25:39 +05:30
dependabot[bot]
705ab58bfb chore(deps): bump pymongo from 4.6.3 to 4.8.0 in /application
Bumps [pymongo](https://github.com/mongodb/mongo-python-driver) from 4.6.3 to 4.8.0.
- [Release notes](https://github.com/mongodb/mongo-python-driver/releases)
- [Changelog](https://github.com/mongodb/mongo-python-driver/blob/master/doc/changelog.rst)
- [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.6.3...4.8.0)

---
updated-dependencies:
- dependency-name: pymongo
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 20:54:54 +00:00
dependabot[bot]
b42e32a955 chore(deps): bump anthropic from 0.12.0 to 0.34.0 in /application
Bumps [anthropic](https://github.com/anthropics/anthropic-sdk-python) from 0.12.0 to 0.34.0.
- [Release notes](https://github.com/anthropics/anthropic-sdk-python/releases)
- [Changelog](https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md)
- [Commits](https://github.com/anthropics/anthropic-sdk-python/compare/v0.12.0...v0.34.0)

---
updated-dependencies:
- dependency-name: anthropic
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 20:54:50 +00:00
dependabot[bot]
dec60a0fdd chore(deps-dev): bump postcss from 8.4.40 to 8.4.41 in /frontend
Bumps [postcss](https://github.com/postcss/postcss) from 8.4.40 to 8.4.41.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.40...8.4.41)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 20:40:15 +00:00
dependabot[bot]
fa84d5c502 chore(deps): bump react-dom and @types/react-dom in /frontend
Bumps [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) and [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom). These dependencies needed to be updated together.

Updates `react-dom` from 18.2.0 to 18.3.1
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v18.3.1/packages/react-dom)

Updates `@types/react-dom` from 18.0.10 to 18.3.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

---
updated-dependencies:
- dependency-name: react-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: "@types/react-dom"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 20:40:08 +00:00
dependabot[bot]
34c763caf5 chore(deps-dev): bump @vitejs/plugin-react in /frontend
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.2.1 to 4.3.1.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/v4.3.1/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 20:39:57 +00:00
dependabot[bot]
e5709dfabc chore(deps): bump i18next from 23.11.5 to 23.14.0 in /frontend
Bumps [i18next](https://github.com/i18next/i18next) from 23.11.5 to 23.14.0.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.11.5...v23.14.0)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 20:39:49 +00:00
Siddhant Rai
5f4f4a8ab9 fix: skeleton shown for 0 chunks and 'None' doc 2024-08-19 18:14:49 +05:30
Siddhant Rai
ca9e71087b fix: revert changes 2024-08-19 17:40:46 +05:30
Siddhant Rai
6da483b3ef fix: minor ui fix + added req changes 2024-08-19 17:33:15 +05:30
Alex
e300145263 Merge pull request #1070 from arc53/dependabot/npm_and_yarn/frontend/typescript-eslint/parser-5.62.0
chore(deps-dev): bump @typescript-eslint/parser from 5.51.0 to 5.62.0 in /frontend
2024-08-19 10:28:55 +01:00
dependabot[bot]
eb3f0035fe chore(deps): bump nltk from 3.8.1 to 3.9 in /scripts
Bumps [nltk](https://github.com/nltk/nltk) from 3.8.1 to 3.9.
- [Changelog](https://github.com/nltk/nltk/blob/develop/ChangeLog)
- [Commits](https://github.com/nltk/nltk/compare/3.8.1...3.9)

---
updated-dependencies:
- dependency-name: nltk
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 09:28:28 +00:00
Alex
6be3a2a142 Merge pull request #1072 from arc53/dependabot/npm_and_yarn/frontend/eslint-plugin-n-15.7.0
chore(deps-dev): bump eslint-plugin-n from 15.6.1 to 15.7.0 in /frontend
2024-08-19 10:28:26 +01:00
Alex
e23893a419 Merge pull request #1073 from arc53/dependabot/npm_and_yarn/frontend/react-i18next-15.0.1
chore(deps): bump react-i18next from 14.1.2 to 15.0.1 in /frontend
2024-08-19 10:28:08 +01:00
Alex
7b4c1dcde0 Merge pull request #1071 from arc53/dependabot/npm_and_yarn/frontend/remark-gfm-4.0.0
chore(deps): bump remark-gfm from 3.0.1 to 4.0.0 in /frontend
2024-08-19 10:27:34 +01:00
Siddhant Rai
4b7cb2a22a fix: minor fix 2024-08-17 15:26:22 +05:30
Siddhant Rai
344a8a3887 fix: added required changes 2024-08-17 14:42:48 +05:30
Siddhant Rai
0afda5dc27 feat: new sources section + sidebar component 2024-08-15 18:23:13 +05:30
ManishMadan2882
0891ef6d0a frontend: adapting to migration 2024-08-14 17:15:20 +05:30
dependabot[bot]
cdb64ecb19 chore(deps): bump react-i18next from 14.1.2 to 15.0.1 in /frontend
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 14.1.2 to 15.0.1.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v14.1.2...v15.0.1)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 20:56:04 +00:00
dependabot[bot]
b05ac4f2a4 chore(deps-dev): bump eslint-plugin-n from 15.6.1 to 15.7.0 in /frontend
Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 15.6.1 to 15.7.0.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Changelog](https://github.com/eslint-community/eslint-plugin-n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/15.6.1...15.7.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-n
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 20:55:59 +00:00
dependabot[bot]
411189a076 chore(deps): bump remark-gfm from 3.0.1 to 4.0.0 in /frontend
Bumps [remark-gfm](https://github.com/remarkjs/remark-gfm) from 3.0.1 to 4.0.0.
- [Release notes](https://github.com/remarkjs/remark-gfm/releases)
- [Commits](https://github.com/remarkjs/remark-gfm/compare/3.0.1...4.0.0)

---
updated-dependencies:
- dependency-name: remark-gfm
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 20:55:53 +00:00
dependabot[bot]
63cf4d46c9 chore(deps-dev): bump @typescript-eslint/parser in /frontend
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.51.0 to 5.62.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.62.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 20:55:46 +00:00
Alex
3c683f2192 Merge pull request #1067 from arc53/dependabot/pip/application/elasticsearch-8.14.0
chore(deps): bump elasticsearch from 8.12.0 to 8.14.0 in /application
2024-08-12 21:49:51 +01:00
Alex
d46e59bcd4 Merge pull request #1065 from arc53/dependabot/pip/application/pydantic-settings-2.4.0
chore(deps): bump pydantic-settings from 2.1.0 to 2.4.0 in /application
2024-08-12 21:45:07 +01:00
Alex
c45e76ec31 Merge pull request #1068 from arc53/dependabot/pip/application/transformers-4.44.0
chore(deps): bump transformers from 4.43.4 to 4.44.0 in /application
2024-08-12 21:42:00 +01:00
Alex
44828707ea Merge pull request #1066 from arc53/dependabot/pip/application/gunicorn-23.0.0
chore(deps): bump gunicorn from 22.0.0 to 23.0.0 in /application
2024-08-12 21:39:05 +01:00
dependabot[bot]
74c047d249 chore(deps): bump transformers from 4.43.4 to 4.44.0 in /application
Bumps [transformers](https://github.com/huggingface/transformers) from 4.43.4 to 4.44.0.
- [Release notes](https://github.com/huggingface/transformers/releases)
- [Commits](https://github.com/huggingface/transformers/compare/v4.43.4...v4.44.0)

---
updated-dependencies:
- dependency-name: transformers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 20:22:59 +00:00
dependabot[bot]
50abfb98fe chore(deps): bump elasticsearch from 8.12.0 to 8.14.0 in /application
Bumps [elasticsearch](https://github.com/elastic/elasticsearch-py) from 8.12.0 to 8.14.0.
- [Release notes](https://github.com/elastic/elasticsearch-py/releases)
- [Commits](https://github.com/elastic/elasticsearch-py/compare/v8.12.0...v8.14.0)

---
updated-dependencies:
- dependency-name: elasticsearch
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 20:22:27 +00:00
dependabot[bot]
6104657970 chore(deps): bump gunicorn from 22.0.0 to 23.0.0 in /application
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 22.0.0 to 23.0.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/22.0.0...23.0.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 20:22:24 +00:00
dependabot[bot]
02116d4c05 chore(deps): bump pydantic-settings from 2.1.0 to 2.4.0 in /application
Bumps [pydantic-settings](https://github.com/pydantic/pydantic-settings) from 2.1.0 to 2.4.0.
- [Release notes](https://github.com/pydantic/pydantic-settings/releases)
- [Commits](https://github.com/pydantic/pydantic-settings/compare/v2.1.0...v2.4.0)

---
updated-dependencies:
- dependency-name: pydantic-settings
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 20:22:21 +00:00
Alex
23f993bb54 Merge pull request #1064 from arc53/dartpain-patch-1
Upgrade unstructured
2024-08-12 16:44:11 +01:00
Alex
16aedd61da fix: ruff lint 2024-08-12 16:37:03 +01:00
Alex
5a2f3ad616 feat: remove dep 2024-08-12 16:35:23 +01:00
Alex
54971104f8 Upgrade unstructured 2024-08-12 16:03:02 +01:00
ManishMadan2882
deeffbf77d fix(retriever):classic should not override 2024-08-12 15:52:36 +05:30
ManishMadan2882
7e8dd6bba8 fix: get api keys endpoint 2024-08-12 01:06:21 +05:30
ManishMadan2882
dc4078d744 migration(fixes): retriver/sharing endpoints 2024-08-11 21:26:30 +05:30
ManishMadan2882
1eb168be55 vector indexes to be named after mongo _id 2024-08-11 19:33:31 +05:30
ManishMadan2882
3c6fd365fb store only local docs as location 2024-08-09 18:27:54 +05:30
Siddhant Rai
53c9184057 Merge pull request #1061 from arc53/dependabot/pip/application/transformers-4.43.4
chore(deps): bump transformers from 4.36.2 to 4.43.4 in /application
2024-08-07 21:14:04 +05:30
Siddhant Rai
16c9872571 Merge pull request #1052 from arc53/dependabot/pip/application/dataclasses-json-0.6.7
chore(deps): bump dataclasses-json from 0.6.3 to 0.6.7 in /application
2024-08-07 20:28:11 +05:30
Siddhant Rai
17160bc467 Merge pull request #1051 from arc53/dependabot/pip/application/duckduckgo-search-6.2.6
chore(deps): bump duckduckgo-search from 5.3.0 to 6.2.6 in /application
2024-08-07 20:23:28 +05:30
Siddhant Rai
3b39e58cf3 Merge pull request #1058 from arc53/dependabot/npm_and_yarn/frontend/lint-staged-15.2.8
chore(deps-dev): bump lint-staged from 13.1.1 to 15.2.8 in /frontend
2024-08-07 15:17:28 +05:30
dependabot[bot]
7db055116c chore(deps-dev): bump lint-staged from 13.1.1 to 15.2.8 in /frontend
Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 13.1.1 to 15.2.8.
- [Release notes](https://github.com/lint-staged/lint-staged/releases)
- [Changelog](https://github.com/lint-staged/lint-staged/blob/master/CHANGELOG.md)
- [Commits](https://github.com/lint-staged/lint-staged/compare/v13.1.1...v15.2.8)

---
updated-dependencies:
- dependency-name: lint-staged
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-07 09:19:07 +00:00
Siddhant Rai
0262ff1aac Merge pull request #1054 from arc53/dependabot/npm_and_yarn/frontend/prettier-3.3.3
chore(deps-dev): bump prettier from 2.8.4 to 3.3.3 in /frontend
2024-08-07 14:47:52 +05:30
dependabot[bot]
14def09ce3 chore(deps-dev): bump prettier from 2.8.4 to 3.3.3 in /frontend
Bumps [prettier](https://github.com/prettier/prettier) from 2.8.4 to 3.3.3.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.8.4...3.3.3)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-07 09:09:10 +00:00
Siddhant Rai
96e59da6bc Merge pull request #1057 from arc53/dependabot/npm_and_yarn/frontend/eslint-plugin-react-7.35.0
chore(deps-dev): bump eslint-plugin-react from 7.32.2 to 7.35.0 in /frontend
2024-08-07 14:37:56 +05:30
Siddhant Rai
8f75b0a0c0 Merge pull request #1056 from arc53/dependabot/npm_and_yarn/frontend/vite-5.3.5
chore(deps-dev): bump vite from 5.0.13 to 5.3.5 in /frontend
2024-08-07 14:35:26 +05:30
dependabot[bot]
70a40cfc45 chore(deps-dev): bump eslint-plugin-react in /frontend
Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.32.2 to 7.35.0.
- [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases)
- [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.32.2...v7.35.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-react
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-07 09:01:23 +00:00
Siddhant Rai
ef6b8b9ebc Merge pull request #1053 from arc53/dependabot/npm_and_yarn/frontend/eslint-plugin-promise-6.6.0
chore(deps-dev): bump eslint-plugin-promise from 6.1.1 to 6.6.0 in /frontend
2024-08-07 14:30:08 +05:30
ManishMadan2882
f9dbaa9407 migrate: link source to vector collection 2024-08-07 03:41:31 +05:30
dependabot[bot]
ed338668d1 chore(deps): bump transformers from 4.36.2 to 4.43.4 in /application
Bumps [transformers](https://github.com/huggingface/transformers) from 4.36.2 to 4.43.4.
- [Release notes](https://github.com/huggingface/transformers/releases)
- [Commits](https://github.com/huggingface/transformers/compare/v4.36.2...v4.43.4)

---
updated-dependencies:
- dependency-name: transformers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 20:32:46 +00:00
Alex
1e5d94a958 Merge pull request #1060 from siiddhantt/fix/conversation-textarea
fix: no safe-area for iOS browser, input not fixed
2024-08-05 18:12:38 +01:00
Siddhant Rai
51553c565f feat: replaced select source modal with hook to set default doc 2024-08-05 22:28:58 +05:30
Alex
ae36805aa1 Merge pull request #1050 from arc53/dependabot/pip/application/boto3-1.34.153
chore(deps): bump boto3 from 1.34.6 to 1.34.153 in /application
2024-08-05 16:54:18 +01:00
Siddhant Rai
22b7445ac4 fix: no safe-area for iOS browser, input not fixed 2024-08-05 19:05:34 +05:30
dependabot[bot]
9c278d7d0b chore(deps-dev): bump vite from 5.0.13 to 5.3.5 in /frontend
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.13 to 5.3.5.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.3.5/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 10:13:09 +00:00
dependabot[bot]
3a1592692e chore(deps-dev): bump eslint-plugin-promise in /frontend
Bumps [eslint-plugin-promise](https://github.com/eslint-community/eslint-plugin-promise) from 6.1.1 to 6.6.0.
- [Release notes](https://github.com/eslint-community/eslint-plugin-promise/releases)
- [Changelog](https://github.com/eslint-community/eslint-plugin-promise/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint-community/eslint-plugin-promise/compare/v6.1.1...v6.6.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-promise
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 10:12:55 +00:00
dependabot[bot]
bdec956708 chore(deps): bump dataclasses-json from 0.6.3 to 0.6.7 in /application
Bumps [dataclasses-json](https://github.com/lidatong/dataclasses-json) from 0.6.3 to 0.6.7.
- [Release notes](https://github.com/lidatong/dataclasses-json/releases)
- [Commits](https://github.com/lidatong/dataclasses-json/compare/v0.6.3...v0.6.7)

---
updated-dependencies:
- dependency-name: dataclasses-json
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 10:12:52 +00:00
dependabot[bot]
d0d8a8a3af chore(deps): bump duckduckgo-search from 5.3.0 to 6.2.6 in /application
Bumps [duckduckgo-search](https://github.com/deedy5/duckduckgo_search) from 5.3.0 to 6.2.6.
- [Release notes](https://github.com/deedy5/duckduckgo_search/releases)
- [Commits](https://github.com/deedy5/duckduckgo_search/compare/v5.3.0...v6.2.6)

---
updated-dependencies:
- dependency-name: duckduckgo-search
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 10:12:50 +00:00
dependabot[bot]
f787962be8 chore(deps): bump boto3 from 1.34.6 to 1.34.153 in /application
Bumps [boto3](https://github.com/boto/boto3) from 1.34.6 to 1.34.153.
- [Release notes](https://github.com/boto/boto3/releases)
- [Commits](https://github.com/boto/boto3/compare/1.34.6...1.34.153)

---
updated-dependencies:
- dependency-name: boto3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 10:12:48 +00:00
Alex
57b9b369b7 Create dependabot.yml 2024-08-05 11:12:00 +01:00
Alex
ccda5bdb7e Merge pull request #1049 from siiddhantt/fix/conversation-textarea
fix: changed query box from div to textarea
2024-08-05 10:06:57 +01:00
Siddhant Rai
bd5fa83fe0 fix: handleInput after submission of query 2024-08-05 14:25:21 +05:30
Siddhant Rai
59caf381f7 fix: changed query box from div to textarea for handling paste, autoscroll 2024-08-05 14:17:21 +05:30
Alex
181cb1b1bd Update README.md 2024-08-02 16:08:21 +01:00
Alex
ba2dd2d872 chore: run triage only on main 2024-08-01 17:40:28 +01:00
Alex
4dc5acd68e Update README.md 2024-08-01 17:32:23 +01:00
Alex
f57116afbe Merge pull request #1048 from PeterDaveHelloKitchen/Dockerfile
Optimize Dockerfile to reduce image size and improve build efficiency
2024-08-01 17:16:59 +01:00
Peter Dave Hello
99c41c7e34 Optimize Dockerfile to reduce image size and improve build efficiency
- Merge apt-related RUN commands in builder and final stages
- Remove redundant apt-get clean (automatically handled by base image)
- Consolidate cleanup operations within the same layer for effective
  size reduction

Reference:
- https://docs.docker.com/build/building/best-practices/#apt-get
2024-08-01 23:45:13 +08:00
Alex
d7b38d9513 Change api key name to chatbots 2024-07-31 10:40:35 +01:00
Alex
2c7aad1dcd Merge pull request #1043 from PeterDaveHelloKitchen/Dockerfile
Optimize Dockerfile by unifying download tools to `wget`
2024-07-30 16:42:07 +01:00
Alex
593dba72a8 Merge pull request #1047 from ManishMadan2882/main
UI Fixes
2024-07-30 16:24:11 +01:00
ManishMadan2882
09f2f2a9e7 (fix) dark theme,train modal 2024-07-30 18:01:49 +05:30
Jackson
6c583eedb9 Merge branch 'arc53:main' into Jackson 2024-07-30 17:45:06 +08:00
Jacksonxhx
1c4d7a6ad1 integrated milvus db 2024-07-30 17:44:27 +08:00
Alex
f75ed4bc66 Merge pull request #1039 from ManishMadan2882/main
Feature(Sharing): Introducing Promptable conversations
2024-07-29 21:25:20 +01:00
Alex
f487deb7b9 Merge pull request #1044 from arc53/fix/minor-bugs
fix: delete all method type
2024-07-29 21:25:12 +01:00
ManishMadan2882
ad30a8476c fix(shared): UI 2024-07-30 01:13:47 +05:30
Siddhant Rai
60db807443 Update Navigation.tsx 2024-07-29 12:17:05 +05:30
Siddhant Rai
d1dedff9ca fix: delete all method type 2024-07-29 12:15:18 +05:30
Peter Dave Hello
9a04506b0d Optimize Dockerfile by unifying download tools to wget
Replace curl with wget to streamline the build process. Remove
unnecessary curl installation to reduce dependency complexity and
installation time.
2024-07-29 00:48:16 +08:00
ManishMadan2882
a58369fbb1 share modal :translate option 2024-07-28 20:06:24 +05:30
ManishMadan2882
d63b5d71a1 prevent event bubble, open menu onhover 2024-07-28 19:48:48 +05:30
ManishMadan2882
360d790282 save further queries to localstorage 2024-07-28 00:58:55 +05:30
ManishMadan2882
a0dd8f8e0f integrated stream for shared(prompt) conv 2024-07-27 02:42:33 +05:30
ManishMadan2882
db7c001076 exclude the models only in root 2024-07-26 15:47:51 +05:30
Alex
c96f905d2b Merge pull request #1041 from arc53/dependabot/pip/scripts/langchain-community-0.2.9
chore(deps): bump langchain-community from 0.0.16 to 0.2.9 in /scripts
2024-07-26 11:10:21 +01:00
ManishMadan2882
4b3f04083b synced with upstream 2024-07-26 15:36:27 +05:30
ManishMadan2882
8276b6c9a9 (shared conv) centralised into redux state 2024-07-26 15:19:38 +05:30
Alex
43d6e788dc Merge pull request #1040 from siiddhantt/enhancement/reusable-api-client
enhancement: reusable api client in frontend
2024-07-25 11:48:31 +01:00
Siddhant Rai
0c062a8485 enhancement: implement api client in remaining places 2024-07-24 23:08:42 +05:30
dependabot[bot]
99b649f24e chore(deps): bump langchain-community from 0.0.16 to 0.2.9 in /scripts
Bumps [langchain-community](https://github.com/langchain-ai/langchain) from 0.0.16 to 0.2.9.
- [Release notes](https://github.com/langchain-ai/langchain/releases)
- [Commits](https://github.com/langchain-ai/langchain/commits/langchain-community==0.2.9)

---
updated-dependencies:
- dependency-name: langchain-community
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-24 17:36:19 +00:00
Siddhant Rai
7c6532f145 enhancement: reusable api client setup + replaced in settings, conversation 2024-07-24 21:33:36 +05:30
ManishMadan2882
052669a0b0 complete_stream: no storing for api key req, fe:update shared conv 2024-07-24 02:03:53 +05:30
ManishMadan2882
0cf86d3bbc share api key through response 2024-07-20 03:35:57 +05:30
Alex
56a16b862a Merge pull request #1038 from nayelimdejesus/ux-ehancement
Ux Enhancement
2024-07-19 12:28:23 +01:00
ManishMadan2882
b2fffb2e23 feat(share): enable route to share promptable conv 2024-07-19 03:24:35 +05:30
Nayeli De Jesus
3f7a27cdbb Updated Ux-enhancement
I worked on deleting the button since we want training modal to close automatically upon completion. I added the set variables into TrainingProgress().
2024-07-18 05:35:12 -07:00
Nayeli De Jesus
58e30b8c88 Created Branch 2024-07-18 05:28:30 -07:00
Alex
4025e55b95 Merge pull request #1028 from utin-francis-peter/fix/issue#1023
Fix: adjusted alignment of submit query icon within its container
2024-07-17 00:25:42 +01:00
utin-francis-peter
e1e63ebd64 Merge branch 'main' of https://github.com/utin-francis-peter/DocsGPT into fix/issue#1023 2024-07-16 22:05:12 +01:00
utin-francis-peter
8279df48bf removed shrink 2024-07-16 22:04:26 +01:00
Alex
d86a06fab0 Merge pull request #1027 from utin-francis-peter/feat/issue#1017
Feat Implementation for issue#1017
2024-07-16 14:35:18 +01:00
Siddhant Rai
90b24dd915 fix: removed unused TextArea component 2024-07-16 18:20:13 +05:30
Alex
bacd2a6893 Merge pull request #1034 from ManishMadan2882/main
Feat: sharing endpoints
2024-07-16 12:28:59 +01:00
Alex
0f059f247d fix: ruff lint 2024-07-16 12:28:43 +01:00
ManishMadan2882
e2b76d9c29 feat(share): share btn above conversations 2024-07-16 02:09:36 +05:30
ManishMadan2882
1107a2f2bc refactor App.tsx: better convention 2024-07-15 17:56:23 +05:30
ManishMadan2882
efd43013da minor fix 2024-07-15 05:13:28 +05:30
ManishMadan2882
7b8458b47d fix layout 2024-07-15 05:00:13 +05:30
ManishMadan2882
84eed09a17 feedback visible conditioned, update meta info in shared 2024-07-15 02:55:38 +05:30
ManishMadan2882
35b1a40d49 feat(share) translate 2024-07-14 04:13:25 +05:30
ManishMadan2882
81d7fe3fdb refactor App, add /shared/id page 2024-07-14 03:29:06 +05:30
ManishMadan2882
02187fed4e add timetamp in iso, remove sources 2024-07-14 03:27:53 +05:30
ManishMadan2882
019bf013ac add css class: no-scrollbar 2024-07-12 02:51:59 +05:30
ManishMadan2882
d6e59a6a0a conversation tile: add menu, add share modal 2024-07-11 21:45:47 +05:30
utin-francis-peter
46aa862943 Merge branch 'main' of https://github.com/utin-francis-peter/DocsGPT into feat/issue#1017 2024-07-09 13:34:49 +01:00
utin-francis-peter
0413cab0d9 chore: removed all TextArea related entities from branch as it's outiside scope of branch/issue 2024-07-09 13:32:46 +01:00
Manish Madan
3357ce8f33 Merge branch 'arc53:main' into main 2024-07-09 16:29:04 +05:30
Alex
1776f6e7fd Merge pull request #1024 from blackviking27/feat-bubble-width 2024-07-09 09:06:39 +04:00
ManishMadan2882
edfe5e1156 restrict redundant sharing, add user field 2024-07-08 15:59:19 +05:30
ManishMadan2882
0768992848 add route to share and fetch public conversations 2024-07-08 03:03:46 +05:30
FIRST_NAME LAST_NAME
1224f94879 moved the three icons to the bottom of conversation bubble 2024-07-07 21:52:20 +05:30
Alex
b58c5344b8 Merge pull request #1033 from arc53/dependabot/npm_and_yarn/extensions/web-widget/braces-3.0.3
chore(deps-dev): bump braces from 3.0.2 to 3.0.3 in /extensions/web-widget
2024-07-07 17:24:03 +04:00
dependabot[bot]
7175bc0595 chore(deps-dev): bump braces in /extensions/web-widget
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-07 13:20:00 +00:00
Alex
b7a6f5696d Merge pull request #1032 from utin-francis-peter/fix/issue#1016
FEAT: Auto Language Detection using User's Browser Default
2024-07-07 17:19:32 +04:00
utin-francis-peter
abf5b89c28 refactor: handling applied styles based on colorVariant in a neater manner 2024-07-07 08:33:02 +01:00
utin-francis-peter
d554444b0e chore: updated Input prop from hasSilverBorder to colorVariant 2024-07-06 21:22:41 +01:00
utin-francis-peter
16ae0725e6 chore: took off the option of looking-up docsgpt-locale lang key in localStorage on first load 2024-07-06 20:41:21 +01:00
utin-francis-peter
61feced541 Merge branch 'feat/issue#1017' of https://github.com/utin-francis-peter/DocsGPT into feat/issue#1017 2024-07-05 21:57:46 +01:00
utin-francis-peter
a1d4db2f1e Merge branch 'main' of https://github.com/utin-francis-peter/DocsGPT into feat/issue#1017 2024-07-05 12:15:38 +01:00
Utin Francis Peter
357e9af627 chore: typo elimination
Co-authored-by: Siddhant Rai <47355538+siiddhantt@users.noreply.github.com>
2024-07-05 12:07:33 +01:00
utin-francis-peter
a41519be63 fix: minor typo 2024-07-05 11:41:12 +01:00
FIRST_NAME LAST_NAME
870e6b07c8 Merge branch 'main' of https://github.com/blackviking27/DocsGPT into feat-bubble-width 2024-07-04 19:12:04 +05:30
utin-francis-peter
6f41759519 Merge branch 'main' of https://github.com/utin-francis-peter/DocsGPT into fix/issue#1016 2024-07-04 10:11:57 +01:00
utin-francis-peter
6727c42f18 feat: auto browser lang detection on first visit 2024-07-04 10:05:54 +01:00
utin-francis-peter
90c367842f chore: added browser lang detector package by i18next 2024-07-04 09:00:14 +01:00
Alex
a0bb6e370e Merge pull request #1018 from utin-francis-peter/fix/issue#1014 2024-07-04 00:35:29 +04:00
Alex
f2910ab9d1 Merge pull request #1029 from arc53/dependabot/npm_and_yarn/docs/braces-3.0.3
chore(deps): bump braces from 3.0.2 to 3.0.3 in /docs
2024-07-03 23:11:43 +04:00
utin-francis-peter
b4bfed2ccb style: query submission icon centering 2024-07-03 15:46:35 +01:00
dependabot[bot]
2fcde61b6d chore(deps): bump braces from 3.0.2 to 3.0.3 in /docs
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-03 13:10:18 +00:00
Alex
ffddf10de5 Merge pull request #1026 from ManishMadan2882/main 2024-07-03 17:09:46 +04:00
utin-francis-peter
6e3bd5e6f3 fix: adjusted alignment of submit query icon within its container 2024-07-03 13:29:34 +01:00
utin-francis-peter
b21230c4d6 chore: migrated to using custom Input component to address redundant twClasses 2024-07-03 12:34:13 +01:00
utin-francis-peter
0a533b64e1 chore: migrated prop type definition into a types declaration file for components. other components prop types will live here 2024-07-03 11:49:49 +01:00
utin-francis-peter
15b0e321bd chore: TextArea component to replace Div contentEditable for entering prompts 2024-07-03 11:24:29 +01:00
ManishMadan2882
4d749340a2 fix: lint error - semantic ambiguity 2024-07-03 13:25:47 +05:30
utin-francis-peter
0ef6ffa452 gap between y-borders and prompts input + border-radius reduction as prompts input grows 2024-07-02 19:48:19 +01:00
FIRST_NAME LAST_NAME
d7b1310ba3 conversation bubble width fix 2024-07-02 22:11:21 +05:30
utin-francis-peter
7408454a75 chore: prompts input now uses useState hook for state change and inbuilt autoFocus 2024-07-01 19:54:31 +01:00
utin-francis-peter
07b71468cc style: removed custom padding and used twClasses 2024-06-29 20:45:33 +01:00
utin-francis-peter
522e966194 refactor: custom input component is used. inputRef is also replaced with state value 2024-06-29 18:58:13 +01:00
utin-francis-peter
937c60c9cf style: updated custom css class to match textInput component's 2024-06-29 18:55:10 +01:00
utin-francis-peter
bbb1e22163 style: spacings... 2024-06-28 20:19:01 +01:00
utin-francis-peter
a16e83200a style fix: gap between conversations wrapper and prompts input wrapper 2024-06-28 15:16:55 +01:00
utin-francis-peter
d437521710 style fix: response bubble padding and radius 2024-06-28 14:45:14 +01:00
utin-francis-peter
5cbf4cf352 style fix: padding and radius of question bubble 2024-06-28 14:24:34 +01:00
Alex
2985e3b75b Merge pull request #1013 from arc53/fix/singleton-llama-cpp
fix: use singleton in llama_cpp
2024-06-25 18:25:01 +01:00
Alex
f34a75fc5b Merge pull request #1004 from utin-francis-peter/fix/traning-progress
Fix/training progress
2024-06-25 14:57:26 +01:00
Alex
5aa88714b8 refactor: Add thread lock 2024-06-25 14:41:04 +01:00
Alex
ce56a414e0 fix: use singleton 2024-06-25 14:37:00 +01:00
Alex
ba4a7dcd45 Merge pull request #1012 from siiddhantt/fix/input-box-cutting-content
fix: input box improvements
2024-06-25 13:38:08 +01:00
Siddhant Rai
85c648da6c fix: large spacing + padding issue in input box 2024-06-25 17:58:16 +05:30
Alex
483f8eb690 Merge pull request #1011 from arc53/dependabot/npm_and_yarn/braces-3.0.3
chore(deps-dev): bump braces from 3.0.2 to 3.0.3
2024-06-25 13:10:18 +01:00
dependabot[bot]
93c868d698 chore(deps-dev): bump braces from 3.0.2 to 3.0.3
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-25 12:05:49 +00:00
Alex
a14e70e3f4 Merge pull request #1006 from arc53/dependabot/npm_and_yarn/frontend/braces-3.0.3
chore(deps-dev): bump braces from 3.0.2 to 3.0.3 in /frontend
2024-06-25 13:04:35 +01:00
Alex
a6ff606cae Merge pull request #1008 from utin-francis-peter/fix/issue#998
Fix/issue#998
2024-06-24 22:14:24 +01:00
utin-francis-peter
651eb3374c chore: on language change when active tab is general, active tab is persisted as general 2024-06-23 23:33:27 +01:00
utin-francis-peter
68c71adc5a chore: i18n "General" tab title 2024-06-23 23:29:59 +01:00
utin-francis-peter
0c4ca9c94d refactor: selected language gets stored in local state, triggering an effect that updates lang value in local storage and change language 2024-06-23 23:27:43 +01:00
utin-francis-peter
8c04f5b3f1 chore: selected language isn't included in language options 2024-06-23 23:19:14 +01:00
Alex
35b29a0a1e Merge pull request #1005 from siiddhantt/fix/modals-and-sidebar
fix: modals close on clicking outside
2024-06-23 12:51:51 +01:00
dependabot[bot]
d289f432b1 chore(deps-dev): bump braces from 3.0.2 to 3.0.3 in /frontend
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-21 18:49:54 +00:00
Siddhant Rai
e16e269775 fix: dropdown closes on clicking outside 2024-06-21 23:35:03 +05:30
utin-francis-peter
4e5d0c2e84 Merge branch 'main' of https://github.com/utin-francis-peter/DocsGPT into fix/traning-progress 2024-06-21 18:06:55 +01:00
utin-francis-peter
c9a2034936 chore: adjusted delay time before training starts 2024-06-21 18:04:30 +01:00
Alex
b70fc1151d fix: print error to console 2024-06-21 14:54:32 +01:00
utin-francis-peter
c11034edcd chore: slight delay between uploading and learning progress transition 2024-06-20 23:35:39 +01:00
utin-francis-peter
804d9b42a5 Merge branch 'main' of https://github.com/utin-francis-peter/DocsGPT into fix/traning-progress 2024-06-20 22:33:44 +01:00
utin-francis-peter
b1bb4e6758 fix: uploading/training progress bar 2024-06-20 22:18:18 +01:00
Alex
76ed8f0ba2 Merge pull request #1002 from ManishMadan2882/main
Better Error handling on /stream endpoint
2024-06-20 20:00:55 +01:00
Alex
4dde7eaea1 feat: Improve error handling in /stream route 2024-06-20 19:51:35 +01:00
Alex
2e2149c110 fix: stream stuff 2024-06-20 19:40:29 +01:00
ManishMadan2882
70bb9477c5 update err msg, if req fails from client 2024-06-20 18:21:19 +05:30
Alex
ec5363e9c1 Merge pull request #1001 from utin-francis-peter/latest-srcdoc-as-active
Fix: Set Uploaded/Trained/Latest Source Doc as Selected/Active Source Doc
2024-06-20 13:31:10 +01:00
ManishMadan2882
dba3b1c559 sort local vectors in latest first order 2024-06-20 17:58:59 +05:30
utin-francis-peter
9606e3f80c chore: handleDeleteClick now accepts only doc as param 2024-06-20 06:00:32 +01:00
utin-francis-peter
7bc7b500f5 refactor/chore: migrated away from manually removing a deleted source doc from UI / latest docs are fetched after deletion to update UI 2024-06-20 05:58:39 +01:00
utin-francis-peter
c6e804fa10 Merge branch 'main' of https://github.com/utin-francis-peter/DocsGPT into latest-srcdoc-as-active 2024-06-20 00:19:09 +01:00
utin-francis-peter
1cbaf9bd9d chore: updates from upstream 2024-06-20 00:05:14 +01:00
utin-francis-peter
45145685d5 fix: upon successful training of newly uploaded src doc, the latest doc is auto set as selected doc 2024-06-19 23:41:38 +01:00
utin-francis-peter
2fbec6f21f chore: added cleanup fxn for TrainingProgress timeout fxn 2024-06-19 23:39:16 +01:00
ManishMadan2882
ad29d2765f fix: add reducers to raise error, handle complete_stream() 2024-06-20 00:10:29 +05:30
Alex
e47e751142 fix link 2024-06-19 12:35:30 +01:00
Alex
c63d4ccf3e Merge pull request #1000 from arc53/feat/upgrade-ubuntu-docker
upgrade docker to 24.04
2024-06-19 11:57:37 +01:00
Alex
e5c30cf841 upgrade docker to 24.04 2024-06-19 11:45:37 +01:00
Alex
c80678aac5 Merge pull request #994 from xucailiang/fix-celery-import-error
rename celery.py
2024-06-19 09:47:52 +01:00
xucai
1754570057 rename celery_init.py 2024-06-19 16:17:09 +08:00
xucailiang
d87b411193 Merge branch 'arc53:main' into fix-celery-import-error 2024-06-19 15:16:39 +08:00
utin-francis-peter
8fc6284317 chore: on deleting an uploaded doc, default doc gets set as selected source doc 2024-06-18 23:33:49 +01:00
Alex
eae49d2367 Merge pull request #996 from arc53/feat/memory-embedding-singleton
chore: Refactor embeddings instantiation to use a singleton pattern
2024-06-18 11:52:27 +01:00
ManishMadan2882
69287c5198 feat: err handling /stream 2024-06-18 16:12:18 +05:30
Alex
e6b3984f78 Merge pull request #988 from utin-francis-peter/fix/retry-btn
Fix/retry-btn
2024-06-15 11:36:46 +01:00
Alex
547fe888d4 Merge pull request #991 from vedantbhatter/vedant-branch
Adding in Mandarin translation into DocsGPT
2024-06-14 15:13:45 +01:00
Alex
3454309cbc chore: Refactor embeddings instantiation to use a singleton pattern 2024-06-14 12:58:35 +01:00
utin-francis-peter
544c46cd44 chore: retry btn is side-by-side with error mssg 2024-06-14 00:31:33 +01:00
utin-francis-peter
2c100825cc Merge branch 'main' of https://github.com/utin-francis-peter/DocsGPT into fix/retry-btn 2024-06-13 23:25:33 +01:00
Alex
558ecd84a6 Merge pull request #993 from siiddhantt/fix/input-bar-hidden-safari
fix: input field covered by url bar in safari
2024-06-13 14:18:26 +01:00
utin-francis-peter
df24cfff4f style: improve visibility of bottom-most message bubble 2024-06-12 22:52:43 +01:00
Siddhant Rai
bd5d93a964 fix: unfixed input bar + safe area inset for Safari (iOS) 2024-06-13 00:21:51 +05:30
xucai
ae2ded119f rename celery_init.py 2024-06-12 19:48:28 +08:00
Siddhant Rai
abdb80a6be fix: input field covered by url bar in safari 2024-06-12 15:55:55 +05:30
utin-francis-peter
2f9cbe2bf1 chore: if user types in a new prompt after failed generation (instead of hitting retry btn), the failed query is updated with the new prompt before response is fetched. Ensuring every query object remains useful & relevant 2024-06-11 20:30:12 +01:00
utin-francis-peter
2cca7d60d5 chore: modified "retry" generation flow to give users the option of retrying with prev failed response or entering a new prompt into the provided field 2024-06-11 18:19:35 +01:00
Alex
3df745d1d2 Merge pull request #990 from IlyasOsman/token-format
Denominations on tokens
2024-06-11 10:19:28 +01:00
Alex
9862083e0b Update README.md 2024-06-11 10:11:09 +01:00
Vedant Bhatter
7a4976c470 Addign in Mandarin translation into DocsGPT 2024-06-10 17:47:49 -07:00
ilyasosman
8834a19743 Denominations on tokens 2024-06-10 22:50:35 +03:00
Alex
6e15403f60 Merge pull request #989 from SDanielDev/working
Updated nextra docs with new html code block installation instruction
2024-06-10 10:57:45 +01:00
utin-francis-peter
7e1cf10cb2 style: reduced retry container padding 2024-06-09 13:49:26 +01:00
utin-francis-peter
ee762c3c68 chore: modified handleQuestion params for more clarity 2024-06-09 13:47:51 +01:00
utin-francis-peter
32c06414c5 style: added theme adaptable RetryIcon component to Retry btn 2024-06-08 03:29:18 +01:00
SamDanielDev
e97e1ba4bc Updated nextra docs with new html code block installation instruction 2024-06-07 18:16:50 +01:00
utin-francis-peter
2f580f7800 feat: japan locale config 2024-06-07 17:40:33 +01:00
utin-francis-peter
1ce1459455 Merge branch 'main' of https://github.com/utin-francis-peter/DocsGPT into fix/retry-btn 2024-06-07 17:38:03 +01:00
utin-francis-peter
c26573482e style: retry query generation btn 2024-06-07 17:28:13 +01:00
utin-francis-peter
414ec08dee refactor: modified prepResponseView to prioritize query.response and trigger re-render after a failed generation is retried 2024-06-07 17:26:19 +01:00
Alex
1cc78191eb Merge pull request #987 from charlesnilsson/main
my-japanese-translation
2024-06-07 16:14:25 +01:00
Alex
75c6c6081a feat: Add Japanese translation support fix 2024-06-07 16:08:36 +01:00
utin-francis-peter
8d2ebe9718 feat: "Retry" btn conditionally renders in place of query input when a generation fails. Uses prev query to fetch answer when clicked. 2024-06-07 15:59:56 +01:00
Charles Nilsson
eed974b883 my-japanese-translation 2024-06-07 16:44:16 +02:00
utin-francis-peter
ae846dac4d chore: received changes from upstream 2024-06-07 15:33:24 +01:00
utin-francis-peter
0b09c00b50 chore: modified handleQuestion to favor "Retry" action after a failed response generation 2024-06-07 14:47:29 +01:00
Alex
f7a1874cb3 Merge pull request #979 from arc53/dependabot/pip/application/qdrant-client-1.9.0
chore(deps): bump qdrant-client from 1.8.2 to 1.9.0 in /application
2024-06-04 19:13:55 +01:00
dependabot[bot]
28fb04eb7b chore(deps): bump qdrant-client from 1.8.2 to 1.9.0 in /application
Bumps [qdrant-client](https://github.com/qdrant/qdrant-client) from 1.8.2 to 1.9.0.
- [Release notes](https://github.com/qdrant/qdrant-client/releases)
- [Commits](https://github.com/qdrant/qdrant-client/compare/v1.8.2...v1.9.0)

---
updated-dependencies:
- dependency-name: qdrant-client
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-04 17:53:28 +00:00
Alex
34310cf420 Merge pull request #974 from siiddhantt/fix/pr-960
fix/pr-960
2024-06-03 22:44:36 +01:00
Alex
e1d61d7190 Merge pull request #961 from arc53/dependabot/pip/application/requests-2.32.0
build(deps): bump requests from 2.31.0 to 2.32.0 in /application
2024-06-03 22:43:11 +01:00
Alex
9c14ac84cb Merge pull request #977 from shelar1423/main
DocsGPT link update
2024-06-03 17:26:54 +01:00
Siddhant Rai
1d1ea7b6f2 fix: version update 2024-06-03 20:59:52 +05:30
digvijay shelar
92401f5b7c link fix 2024-06-03 20:59:30 +05:30
Siddhant Rai
38ac9218ec fix: unpkg link in readme 2024-06-03 20:43:43 +05:30
Siddhant Rai
48497c749a fix: dompurify import error 2024-06-03 20:36:52 +05:30
Siddhant Rai
72a1892058 fix: added targets for browser environment 2024-06-03 12:57:53 +05:30
Siddhant Rai
f2c328d212 fix: empty types.d.ts generated during build + updated README.md 2024-06-01 14:10:12 +05:30
Alex
e9eafc40a7 Merge pull request #971 from shelar1423/main
FIX: improved documentation
2024-05-30 15:32:48 +01:00
digvijay shelar
933ca1bf81 updated the llm instructions for OS version 2024-05-30 18:51:56 +05:30
digvijay shelar
b4fc9aa7eb new home demo 2024-05-30 18:27:40 +05:30
Digvijay Shelar
dcc475bbef Merge branch 'arc53:main' into main 2024-05-30 18:22:56 +05:30
Alex
1fe35ad0cd Merge pull request #970 from siiddhantt/feature/link-to-source
feat: remote sources have clickable links to original url
2024-05-30 12:06:05 +01:00
Siddhant Rai
f1ed1e0f14 fix: type error 2024-05-30 15:33:16 +05:30
Alex
fcc746fb98 Merge pull request #972 from ManishMadan2882/main
Fix: added translation for the conversation history dropdown
2024-05-29 18:37:43 +01:00
ManishMadan2882
95934a5b7a (i18n): updated for conv history 2024-05-29 22:54:46 +05:30
Digvijay Shelar
d38b101820 Merge branch 'arc53:main' into main 2024-05-29 19:45:35 +05:30
Siddhant Rai
91d730a7bc feat: remote sources have clickable links 2024-05-29 19:07:08 +05:30
Alex
0cfa77b628 chats word in translations 2024-05-29 11:29:00 +01:00
Alex
ca4881ad51 Merge pull request #969 from ManishMadan2882/main
Internationalisation with i18next
2024-05-29 11:23:45 +01:00
digvijay shelar
8c2c064fe2 updated emoji's 2024-05-29 15:25:23 +05:30
Digvijay Shelar
10646b9b86 Merge branch 'arc53:main' into main 2024-05-29 15:04:16 +05:30
Alex
967b195946 Merge pull request #967 from starkgate/empty-response-after-streaming
Fix empty response in the conversation
2024-05-28 23:06:46 +01:00
ManishMadan2882
1ae7771290 add spacing in general, minor change 2024-05-29 03:27:53 +05:30
ManishMadan2882
a585fe4d54 refactored locale json 2024-05-28 21:38:42 +05:30
ManishMadan2882
fa3a9fe70e fix: minor changes 2024-05-28 21:35:10 +05:30
ManishMadan2882
99952a393f feat(i18n): modals, Hero, Nav 2024-05-28 20:50:07 +05:30
digvijay shelar
920a41e3ca api section fixed 2024-05-28 20:47:22 +05:30
digvijay shelar
e5bec957a1 issue #962 2024-05-28 20:32:35 +05:30
Alex
41cb765255 Update README.md 2024-05-28 10:09:06 +01:00
Alex
2d12a3cd7a Merge pull request #965 from siiddhantt/feature/set-tokens-message-history
feat: dropdown to adjust conversational history limits
2024-05-28 09:43:21 +01:00
starkgate
df4fe0176c Fix empty response in the conversation 2024-05-28 10:40:55 +02:00
ManishMadan2882
4fcc80719e feat(i18n): settings static content 2024-05-28 01:39:37 +05:30
Alex
f6c66f6ee4 Merge pull request #964 from ManishMadan2882/main
Feature: Token count for vectors
2024-05-27 11:44:11 +01:00
Siddhant Rai
220d137e66 feat: dropdown to adjust conversational history limits 2024-05-26 23:13:01 +05:30
Alex
425803a1b6 chore: Refactor source assignment in api_answer route 2024-05-24 16:50:00 +01:00
Manish Madan
c794ea614a Merge branch 'arc53:main' into main 2024-05-24 21:12:07 +05:30
ManishMadan2882
9000838aab (feat:vectors): calc, add token in db 2024-05-24 21:10:50 +05:30
Alex
2790bda1e9 feat: Update Kubernetes deployment instructions for DocsGPT 2024-05-24 16:16:32 +01:00
Alex
e13d4daa9a chore: Remove unused VECTOR_STORE variable in docsgpt-secrets.yaml 2024-05-24 16:09:31 +01:00
Alex
2f504a4e03 Merge pull request #963 from arc53/feat/kubes-deployment
feat: k8s deployment
2024-05-24 14:48:22 +01:00
Alex
598a50a133 feat: Add Kubernetes deployment instructions for DocsGPT 2024-05-24 14:40:28 +01:00
Alex
1b06a5a3e0 feat: k8s deployment 2024-05-23 18:23:01 +01:00
Alex
9f1d3b0269 Update README.md 2024-05-22 16:34:04 +01:00
Alex
a09543d38b Update README.md 2024-05-22 16:33:48 +01:00
dependabot[bot]
2ab3539925 ---
updated-dependencies:
- dependency-name: requests
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-21 05:53:49 +00:00
Alex
23ddf53abe Update ci.yml 2024-05-20 12:09:11 +01:00
ilyasosman
d8720d0849 Add DocsGPTWidget embedding support for HTML 2024-05-19 22:08:18 +03:00
Alex
6753b55160 Merge pull request #955 from sossost/feat/add_copy_button_on_code_snippet
Feat : add copy button on code snippet
2024-05-18 13:08:25 +01:00
Alex
7f7f48ad56 Merge pull request #958 from arc53/feat-pre-loading-embeds
chore: Update Docker build platforms for application and frontend and…
2024-05-18 12:49:19 +01:00
jang_yoonsu
149ca01029 fix : Add group property to code block parent element and add copy button condition 2024-05-18 20:43:13 +09:00
Alex
5c8133a810 chore: Update Docker build platforms for application and frontend and optimised embedding import 2024-05-18 12:10:24 +01:00
Alex
2adccdd1b0 Merge pull request #957 from ManishMadan2882/main
Update Sidebar
2024-05-17 14:37:44 +01:00
ManishMadan2882
b91068d658 (navbar): shrink navbar 2024-05-17 18:07:06 +05:30
Alex
4534cafd3f Merge pull request #949 from ManishMadan2882/main
Updating Hero
2024-05-16 23:32:49 +01:00
Alex
405e79d729 removed space 2024-05-16 23:32:12 +01:00
ManishMadan2882
4df2349e9d (hero) minor update 2024-05-17 00:59:47 +05:30
jang_yoonsu
a9b61d3e13 design : add style invisible when lg and visible when hover 2024-05-16 23:29:33 +09:00
jang_yoonsu
3767d14e5c feat: add copy button in code snippet 2024-05-16 23:23:46 +09:00
jang_yoonsu
889a050f25 feat : add copy button component 2024-05-16 23:23:06 +09:00
ManishMadan2882
0701fac807 (hero): hover button outline 2024-05-16 18:42:19 +05:30
ManishMadan2882
9fba91069a lint fix 2024-05-16 18:27:36 +05:30
ManishMadan2882
4f9ce70ff8 (hero): demo queries on click 2024-05-16 18:23:45 +05:30
Alex
5e00d4ded7 Merge pull request #953 from shelar1423/main
FIX: Spinner
2024-05-16 10:51:40 +01:00
digvijay shelar
95cd9ee5bb spinner fixed 2024-05-16 15:15:48 +05:30
Alex
40f16f8ef1 Merge pull request #952 from ManishMadan2882/fix-api-key-parse
FIx: API Key Parsing
2024-05-15 16:27:43 +01:00
ManishMadan2882
3d9288f82f fix: override chunks,promps with api-key-data 2024-05-15 20:23:02 +05:30
ManishMadan2882
c51f12f88b (conversation)- taller input field 2024-05-15 16:31:41 +05:30
Alex
0618153390 fix: object id bug 2024-05-14 19:01:45 +01:00
Alex
a7c066291b Update README.md 2024-05-13 17:08:12 +01:00
Alex
a69ac372fa Merge pull request #946 from siiddhantt/refactor/ui-elements
refactor: several small ui refactor for generalisation
2024-05-13 11:47:20 +01:00
Alex
16b2a54981 Merge pull request #936 from Fagner-lourenco/patch-1
Update Dockerfile
2024-05-12 22:36:52 +01:00
Alex
3f68e0d66f chore: Update Dockerfile 2024-05-12 22:33:43 +01:00
Alex
12d483fde6 chore: update documentation links to use the new domain 2024-05-12 11:40:09 +01:00
Siddhant Rai
96034a9712 fix: minor change 2024-05-12 12:56:34 +05:30
Siddhant Rai
d2def4479b refactor: several small ui refactor for generalisation 2024-05-12 12:41:12 +05:30
ManishMadan2882
afbbb913e7 (hero): updating the UI 2024-05-10 16:21:42 +05:30
Alex
ad76f239a3 Merge pull request #943 from arc53/dependabot/npm_and_yarn/docs/next-14.1.1
build(deps): bump next from 14.0.4 to 14.1.1 in /docs
2024-05-10 11:29:37 +01:00
dependabot[bot]
e6b096c9e0 build(deps): bump next from 14.0.4 to 14.1.1 in /docs
Bumps [next](https://github.com/vercel/next.js) from 14.0.4 to 14.1.1.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v14.0.4...v14.1.1)

---
updated-dependencies:
- dependency-name: next
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-10 04:27:40 +00:00
Alex
6e26b4e6c7 Merge pull request #942 from ManishMadan2882/main
Fix: Abnormal overflow on mobile screens and arbitrary word breaks.
2024-05-09 16:29:42 +01:00
ManishMadan2882
ea79494b6d fix(conversation): overflows in sources, removed tagline below input 2024-05-08 20:50:20 +05:30
ManishMadan2882
afb18a3e4d (conversation) makes overflow auto 2024-05-08 16:17:16 +05:30
ManishMadan2882
f9c9853102 fix(conversation) word breaks 2024-05-08 16:07:49 +05:30
ManishMadan2882
b3eb9fb6fa fix(conversation): mobile abnormal overflows 2024-05-08 15:56:52 +05:30
Alex
d3b97bf51a Merge pull request #941 from ManishMadan2882/main
fix(UI):conversation,settings
2024-05-08 09:50:30 +01:00
ManishMadan2882
7a2e491199 fix(UI):conversation,settings 2024-05-07 20:37:05 +05:30
Alex
25efaf08b7 Merge pull request #935 from arc53/dependabot/pip/application/tqdm-4.66.3
build(deps): bump tqdm from 4.66.1 to 4.66.3 in /application
2024-05-07 09:52:09 +01:00
Alex
f893ea6b98 Merge pull request #934 from arc53/dependabot/pip/scripts/tqdm-4.66.3
build(deps): bump tqdm from 4.66.1 to 4.66.3 in /scripts
2024-05-07 09:51:57 +01:00
dependabot[bot]
500745b62c build(deps): bump tqdm from 4.66.1 to 4.66.3 in /application
Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.66.1 to 4.66.3.
- [Release notes](https://github.com/tqdm/tqdm/releases)
- [Commits](https://github.com/tqdm/tqdm/compare/v4.66.1...v4.66.3)

---
updated-dependencies:
- dependency-name: tqdm
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-07 08:24:51 +00:00
Alex
9ebe5bf1a7 Merge pull request #939 from arc53/dependabot/pip/application/werkzeug-3.0.3
build(deps): bump werkzeug from 3.0.1 to 3.0.3 in /application
2024-05-07 09:23:58 +01:00
dependabot[bot]
4aecb86daa build(deps): bump werkzeug from 3.0.1 to 3.0.3 in /application
Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.0.1 to 3.0.3.
- [Release notes](https://github.com/pallets/werkzeug/releases)
- [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/werkzeug/compare/3.0.1...3.0.3)

---
updated-dependencies:
- dependency-name: werkzeug
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-06 19:28:27 +00:00
Fagner-lourenco
6924dd6df6 Update Dockerfile 2024-05-04 20:50:11 -03:00
Alex
431755144e fix: Update count_tokens function in utils.py 2024-05-04 10:39:23 +01:00
dependabot[bot]
d182f81754 build(deps): bump tqdm from 4.66.1 to 4.66.3 in /scripts
Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.66.1 to 4.66.3.
- [Release notes](https://github.com/tqdm/tqdm/releases)
- [Commits](https://github.com/tqdm/tqdm/compare/v4.66.1...v4.66.3)

---
updated-dependencies:
- dependency-name: tqdm
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-03 21:48:38 +00:00
Alex
de0193fffc Merge pull request #933 from siiddhantt/fix/remote-upload-issue
fix: remote upload error
2024-05-03 14:54:12 +01:00
Siddhant Rai
53e86205ad fix: added more headers from default 2024-05-03 18:47:30 +05:30
Siddhant Rai
aa670efe3a fix: connection aborted in WebBaseLoader 2024-05-03 18:25:01 +05:30
Alex
e693fe49a7 fix: fixed Dockerfile python path bug 2024-05-03 11:55:51 +01:00
Alex
7eaa32d85f remove gunicorn from final 2024-05-02 14:43:09 +01:00
Alex
ab40d2c37a remove pip from final container 2024-05-01 14:11:16 +01:00
Alex
784206b39b chore: Update Dockerfile to use Ubuntu mantic as base image and upgrade gunicorn to version 22.0.0 2024-05-01 13:19:16 +01:00
Alex
7c8264e221 Merge pull request #929 from TomasMatarazzo/issue-button-to-clean-chat-history
Issue button to clean chat history
2024-05-01 10:54:34 +01:00
TomasMatarazzo
db7195aa30 Update Navigation.tsx 2024-04-29 17:02:22 -03:00
TomasMatarazzo
eb7bbc1612 TS2741 2024-04-27 11:04:28 -03:00
TomasMatarazzo
ee3792181d probando 2024-04-26 20:35:36 -03:00
TomasMatarazzo
9804965a20 style in button and user in back route delete all conv 2024-04-25 23:43:45 -03:00
TomasMatarazzo
b84842df3d Fixing types 2024-04-22 16:35:44 -03:00
TomasMatarazzo
fc170d3033 Update package.json 2024-04-22 16:19:00 -03:00
TomasMatarazzo
8fa4ec7ad8 delete console.log 2024-04-22 16:17:26 -03:00
TomasMatarazzo
480825ddd7 now is working in settings 2024-04-22 16:16:19 -03:00
TomasMatarazzo
260e328cc1 first change 2024-04-22 14:41:59 -03:00
Alex
8873428b4b Merge pull request #926 from siiddhantt/feature
Feature: Logging token usage info to MongoDB
2024-04-22 12:10:00 +01:00
Alex
ab43c20b8f delete test output 2024-04-22 12:08:11 +01:00
TomasMatarazzo
88d9d4f4a3 Update DeleteConvModal.tsx 2024-04-18 13:56:03 -03:00
TomasMatarazzo
d4840f85c0 change text in modal 2024-04-18 13:50:08 -03:00
TomasMatarazzo
6f9ddeaed0 Button to clean chat history 2024-04-17 19:51:29 -03:00
Siddhant Rai
af5e73c8cb fix: user_api_key capturing 2024-04-16 15:31:11 +05:30
Siddhant Rai
333b6e60e1 fix: anthropic llm positional arguments 2024-04-16 10:02:04 +05:30
Siddhant Rai
1b61337b75 fix: skip logging to db during tests 2024-04-16 01:08:39 +05:30
Siddhant Rai
77991896b4 fix: api_key capturing + pytest errors 2024-04-15 22:32:24 +05:30
Siddhant Rai
60a670ce29 fix: changes to llm classes according to base 2024-04-15 19:47:24 +05:30
Siddhant Rai
c1c69ed22b fix: pytest issues 2024-04-15 19:35:59 +05:30
Siddhant Rai
d71c74c6fb Merge branch 'feature' of https://github.com/siiddhantt/DocsGPT into feature 2024-04-15 18:57:46 +05:30
Siddhant Rai
590aa8b43f update: apply decorator to abstract classes 2024-04-15 18:57:28 +05:30
Siddhant Rai
607e0166f6 Merge branch 'arc53:main' into feature 2024-04-15 18:55:09 +05:30
Alex
130c83ee92 Merge pull request #911 from arc53/dependabot/pip/application/pymongo-4.6.3
Bump pymongo from 4.6.1 to 4.6.3 in /application
2024-04-15 12:57:22 +01:00
Alex
fd5e418abf Merge pull request #919 from arc53/dependabot/npm_and_yarn/docs/multi-4407677fd1
build(deps): bump tar and npm in /docs
2024-04-15 12:29:26 +01:00
Siddhant Rai
262d160314 Merge with branch main 2024-04-15 15:18:48 +05:30
Siddhant Rai
9146827590 fix: removed unused import 2024-04-15 15:14:17 +05:30
Siddhant Rai
062b108259 Merge branch 'arc53:main' into feature 2024-04-15 15:04:10 +05:30
Siddhant Rai
ba796b6be1 feat: logging token usage to database 2024-04-15 15:03:00 +05:30
Alex
3d763235e1 Merge pull request #925 from ManishMadan2882/main
Untraced types in react widget
2024-04-14 11:43:03 +01:00
Manish Madan
c30c6d9f10 Merge branch 'arc53:main' into main 2024-04-13 16:20:56 +05:30
ManishMadan2882
311716ed18 refactored fs, fix: untracked dir 2024-04-13 16:01:46 +05:30
Alex
19bb1b4aa4 Create SECURITY.md 2024-04-12 09:39:33 +01:00
Alex
b8749e36b9 Merge pull request #921 from siiddhantt/bugfix
fix for missing fields in API Keys section
2024-04-10 10:25:26 +01:00
Siddhant Rai
00b6639155 fix: minor ui changes 2024-04-10 12:37:29 +05:30
Siddhant Rai
71d7daaef3 fix: minor ui changes 2024-04-10 12:23:37 +05:30
Siddhant Rai
8654c5d471 Merge branch 'bugfix' of https://github.com/siiddhantt/DocsGPT into bugfix 2024-04-10 12:11:51 +05:30
Siddhant Rai
02124b3d38 fix: missing fields from API Keys section 2024-04-10 12:11:34 +05:30
dependabot[bot]
340dcfb70d build(deps): bump tar and npm in /docs
Removes [tar](https://github.com/isaacs/node-tar). It's no longer used after updating ancestor dependency [npm](https://github.com/npm/cli). These dependencies need to be updated together.


Removes `tar`

Updates `npm` from 10.5.0 to 10.5.1
- [Release notes](https://github.com/npm/cli/releases)
- [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md)
- [Commits](https://github.com/npm/cli/compare/v10.5.0...v10.5.1)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
- dependency-name: npm
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-09 21:09:48 +00:00
Alex
a37b92223a Merge pull request #915 from arc53/feat/retrievers-class
Update application files and fix LLM models, create new retriever class
2024-04-09 22:09:11 +01:00
Alex
7d2b8cb4fc Merge pull request #917 from arc53/multiple-uploads
Multiple file upload
2024-04-09 18:13:52 +01:00
Alex
8d7a134cb4 lint: ruff 2024-04-09 17:25:08 +01:00
Alex
4b849d7201 Fix SagemakerAPILLM test 2024-04-09 17:20:26 +01:00
Alex
e03e185d30 Add Brave Search retriever and update application files 2024-04-09 17:11:09 +01:00
Pavel
7a02df5588 Multiple uploads 2024-04-09 19:56:07 +04:00
Alex
19494685ba Update application files, fix LLM models, and create new retriever class 2024-04-09 16:38:42 +01:00
Alex
1e26943c3e Update application files, fix LLM models, and create new retriever class 2024-04-09 15:45:24 +01:00
dependabot[bot]
83fa850142 Bump pymongo from 4.6.1 to 4.6.3 in /application
Bumps [pymongo](https://github.com/mongodb/mongo-python-driver) from 4.6.1 to 4.6.3.
- [Release notes](https://github.com/mongodb/mongo-python-driver/releases)
- [Changelog](https://github.com/mongodb/mongo-python-driver/blob/master/doc/changelog.rst)
- [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.6.1...4.6.3)

---
updated-dependencies:
- dependency-name: pymongo
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-09 14:22:15 +00:00
Alex
968a116d14 Merge pull request #916 from siiddhantt/bugfix
fix: updated qdrant-client to v1.8.2
2024-04-09 15:20:46 +01:00
Siddhant Rai
fb55b494d7 Merge branch 'arc53:main' into bugfix 2024-04-09 19:09:44 +05:30
Siddhant Rai
59b6a83d7d fix: issue #884 2024-04-09 19:08:59 +05:30
Alex
aabc4f0d7b Merge pull request #907 from siiddhantt/main
refactor: clean up settings file for better structure
2024-04-09 14:17:56 +01:00
Alex
391f686173 Update application files and fix LLM models, create new retriever class 2024-04-09 14:02:33 +01:00
Siddhant Rai
8e6f6d46ec fix: issue during build 2024-04-09 16:34:51 +05:30
Siddhant Rai
2ba7a55439 Merge branch 'arc53:main' into main 2024-04-09 13:54:48 +05:30
Alex
e07df29ab9 Update FLASK_DEBUG_MODE setting to use value from settings module 2024-04-08 13:27:43 +01:00
Alex
abf24fe60f Update FLASK_DEBUG_MODE setting to use value from settings module 2024-04-08 13:15:58 +01:00
Siddhant Rai
fad5f5b81f fix: added requested changes 2024-04-08 17:45:56 +05:30
Siddhant Rai
6961f49a0c Merge branch 'arc53:main' into main 2024-04-08 17:43:21 +05:30
Alex
6911f8652a Fix vectorstore path in check_docs function 2024-04-08 13:06:05 +01:00
Alex
6658cec6a0 Merge pull request #897 from arc53/dependabot/npm_and_yarn/frontend/vite-5.0.13
Bump vite from 5.0.12 to 5.0.13 in /frontend
2024-04-08 13:03:20 +01:00
Alex
14011b9d84 Merge pull request #891 from arc53/dependabot/npm_and_yarn/mock-backend/express-4.19.2
Bump express from 4.18.2 to 4.19.2 in /mock-backend
2024-04-08 13:02:58 +01:00
Alex
bd2d0b6790 Merge pull request from GHSA-p5qc-vj2x-9rjp
advisory-fix
2024-04-08 12:58:36 +01:00
Alex
d36f58230a advisory-fix 2024-04-08 12:56:27 +01:00
Alex
018f950ca3 Merge pull request #908 from arc53/api-keys-documentation-guide
API keys guide
2024-04-08 10:36:35 +01:00
Alex
db8db9fae9 Add prompt_id and chunks fields in create_api_key function 2024-04-08 10:35:15 +01:00
Pavel
79ce8d6563 guide 2024-04-07 20:14:16 +04:00
Alex
13eaa9a35a Merge pull request #904 from arc53/fix/update-docs-widget
Update api key to new data
2024-04-06 11:39:32 +01:00
Siddhant Rai
39f0d76b4b refactor: clean up settings file for better structure 2024-04-05 23:38:59 +05:30
Siddhant Rai
0a5832ec75 refactor: clean up settings file for better structure 2024-04-05 23:33:27 +05:30
Alex
6e147b3ed2 Update api key to new data 2024-04-05 14:49:32 +01:00
Alex
c162f79daa Merge pull request #903 from arc53/feature/api-key-create
Feature/api key create
2024-04-05 13:18:11 +01:00
Alex
87585be687 Merge branch 'main' into feature/api-key-create 2024-04-05 13:01:42 +01:00
Alex
ea08d6413c Merge pull request #902 from ManishMadan2882/feature/api-key-create
Add Prompt, Chunks in Create Key
2024-04-04 12:45:33 +01:00
Alex
879905edf6 Refactor create_api_key function to include prompt_id and chunks in routes.py 2024-04-04 12:38:23 +01:00
Alex
6fd80a5582 Merge pull request #899 from siiddhantt/main
feat: added prompts section under general in settings
2024-04-04 10:25:08 +01:00
Siddhant Rai
0dc7333563 fix: added API Keys in tabs 2024-04-04 14:42:14 +05:30
Siddhant Rai
f61c3168d2 fix: issue with editing new prompts 2024-04-04 14:29:37 +05:30
Siddhant Rai
9cadd74a96 fix: minor ui changes 2024-04-04 13:42:32 +05:30
Siddhant Rai
729fa2352b feat: added prompts section under general in settings 2024-04-04 00:48:49 +05:30
dependabot[bot]
b673aaf9f0 Bump vite from 5.0.12 to 5.0.13 in /frontend
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.12 to 5.0.13.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.0.13/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.0.13/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-03 17:53:09 +00:00
Alex
3132cc6005 Merge pull request #895 from sarfarazsiddiquii/new_branch
added feature #887
2024-04-03 17:09:06 +01:00
ManishMadan2882
ac994d3077 add prompt,chunks in create key 2024-04-03 19:19:53 +05:30
sarfaraz siddiqui
02d4f7f2da functions can accept null 2024-04-03 18:08:46 +05:30
Alex
d99569f005 Merge pull request #896 from arc53/api-update
api update
2024-04-01 18:22:13 +01:00
Pavel
ec5166249a api update
A description of 3 more api methods in documentation.
2024-04-01 21:07:27 +04:00
Alex
dadd12adb3 Update API key in DocsGPTWidget.tsx 2024-04-01 11:25:59 +01:00
Alex
88b4fb8c2a Update API key in DocsGPTWidget.tsx 2024-04-01 11:25:31 +01:00
sarfaraz siddiqui
afecae3786 added feature #887 2024-03-31 03:50:11 +05:30
Alex
d18598bc33 Merge pull request #894 from arc53/feature/api-key-create
Feature/api key create
2024-03-29 20:04:26 +00:00
Alex
794fc05ada Merge branch 'main' into feature/api-key-create 2024-03-29 19:59:45 +00:00
Alex
5daeb7f876 Merge pull request #892 from ManishMadan2882/feature/api-key-create
Feature/api key create
2024-03-29 19:57:25 +00:00
ManishMadan2882
53e71c545e api key modal - enhancements 2024-03-29 19:11:40 +05:30
ManishMadan2882
959a55e36c adding dark mode - api key 2024-03-29 04:13:12 +05:30
ManishMadan2882
64572b0024 feat(settings): api key endpoints 2024-03-29 03:26:45 +05:30
Manish Madan
9a0c1caa43 Merge branch 'arc53:feature/api-key-create' into feature/api-key-create 2024-03-28 19:28:23 +05:30
ManishMadan2882
eed6723147 feat(settings): api keys tab 2024-03-28 19:25:35 +05:30
Alex
97fabf51b8 Refactor conversationSlice.ts and conversationApi.ts 2024-03-28 13:43:10 +00:00
Alex
5e5e2b8aee Merge pull request #877 from siiddhantt/main
Added reddit loader
2024-03-27 16:55:01 +00:00
Siddhant Rai
e01071426f feat: field to pass number of posts as a parameter 2024-03-27 19:20:55 +05:30
Siddhant Rai
eed1bfbe50 feat: fields to handle reddit loader + minor changes 2024-03-26 16:07:44 +05:30
Siddhant Rai
0c3970a266 Merge branch 'arc53:main' into main 2024-03-26 16:07:25 +05:30
dependabot[bot]
267cfb621e Bump express from 4.18.2 to 4.19.2 in /mock-backend
Bumps [express](https://github.com/expressjs/express) from 4.18.2 to 4.19.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.2...4.19.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-26 10:25:02 +00:00
Alex
0e90febab2 Merge pull request #890 from arc53/dependabot/npm_and_yarn/docs/katex-0.16.10
Bump katex from 0.16.9 to 0.16.10 in /docs
2024-03-26 10:24:19 +00:00
dependabot[bot]
31d947837f Bump katex from 0.16.9 to 0.16.10 in /docs
Bumps [katex](https://github.com/KaTeX/KaTeX) from 0.16.9 to 0.16.10.
- [Release notes](https://github.com/KaTeX/KaTeX/releases)
- [Changelog](https://github.com/KaTeX/KaTeX/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KaTeX/KaTeX/compare/v0.16.9...v0.16.10)

---
updated-dependencies:
- dependency-name: katex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-25 20:31:43 +00:00
Alex
017b11fbba Merge pull request #888 from arc53/fix/parsing-chunks-issue
Fix parsing issue with chunks in store.ts
2024-03-23 11:47:11 +00:00
Alex
3c492062a9 Fix parsing issue with chunks in store.ts 2024-03-23 11:42:50 +00:00
Alex
b26b49d0ca Merge pull request #883 from arc53/feat/chunks
Add support for setting the number of chunks processed per query
2024-03-22 15:34:09 +00:00
Alex
ed08123550 Add support for setting the number of chunks processed per query 2024-03-22 14:50:56 +00:00
Alex
add2db5b7a Merge pull request #881 from arc53/fix_model_selection_for_openai
Fix model selection at least for openAI LLM_NAME
2024-03-21 16:47:52 +00:00
Siddhant Rai
f272d7121a Merge branch 'arc53:main' into main 2024-03-21 19:38:44 +05:30
Anton Larin
577556678c Fix model selection at least for openAI LLM_NAME 2024-03-21 10:14:48 +01:00
Alex
e146922367 Merge pull request #880 from ManishMadan2882/main
Customised Scrollbar, fixed: Hero wasn't completely scrollable in Mobile
2024-03-20 10:08:22 +00:00
ManishMadan2882
6f1548b7f8 customised scrollbar 2024-03-19 21:40:00 +05:30
ManishMadan2882
9e6fe47b44 fix(hero): not fully scrollable in mobile 2024-03-19 21:39:16 +05:30
Siddhant Rai
60cfea1126 feat: added reddit loader 2024-03-16 20:22:05 +05:30
Alex
80a4a094af lint 2024-03-14 11:37:33 +00:00
Alex
70e1560cb3 fix check on model 2024-03-14 11:37:01 +00:00
Alex
725033659a Merge pull request #876 from ManishMadan2882/main
Pause Auto-scroll on user interrupt
2024-03-14 11:33:07 +00:00
ManishMadan2882
059111fb57 widget: version release 2024-03-14 16:58:57 +05:30
ManishMadan2882
d4a5eadf13 docs: updated version 2024-03-14 16:54:52 +05:30
ManishMadan2882
79cf487ac5 purge unused deps, comments 2024-03-14 04:03:17 +05:30
ManishMadan2882
52ecbab859 purge logs 2024-03-14 04:01:35 +05:30
ManishMadan2882
adfc79bf92 block autoScroll on user interrupt 2024-03-14 02:25:33 +05:30
ManishMadan2882
2447bab924 add listener for wheel, touch events 2024-03-14 01:51:55 +05:30
Alex
1057ca78a6 default remote 2024-03-13 17:01:23 +00:00
ManishMadan2882
7e7f98fd92 sanitize html - add dompurify 2024-03-13 00:21:54 +05:30
ManishMadan2882
64552ce2de add snarkdown: markdown support 2024-03-12 18:12:27 +05:30
ManishMadan2882
7506256f42 fix(lint): 2 errors 2024-03-11 19:42:22 +05:30
ManishMadan2882
db75230521 pause scroll on user action 2024-03-11 19:21:17 +05:30
Alex
f8955d5607 Update README.md 2024-03-11 12:05:35 +00:00
Alex
0bad217b93 Merge pull request #867 from siiddhantt/main
fix: issue #157
2024-03-08 16:06:51 +00:00
Alex
4da400a136 Merge pull request #873 from ManishMadan2882/main 2024-03-07 19:26:33 +00:00
ManishMadan2882
24740bd341 fix(UI) overflow in next 2024-03-08 00:48:18 +05:30
ManishMadan2882
3b6a15de84 version update 2024-03-08 00:46:53 +05:30
ManishMadan2882
ac1f525a6c fix: fine tuned the css 2024-03-07 19:20:03 +05:30
ManishMadan2882
e3999bdb0c updating version 2024-03-07 19:14:55 +05:30
ManishMadan2882
ad3d5a30ec docs update - widget v0.3.3 2024-03-07 15:58:31 +05:30
Alex
e4b5847725 Merge pull request #872 from ManishMadan2882/main
Widget UI fixes
2024-03-07 09:54:51 +00:00
ManishMadan2882
1a91a245a3 ui fixes 2024-03-07 02:50:30 +05:30
Alex
229f62d071 Merge pull request #861 from ManishMadan2882/main
DocsGPT Widget
2024-03-06 17:38:47 +00:00
Alex
b96fe16770 Update docsgpt version to 0.3.0 2024-03-06 17:36:47 +00:00
Alex
97750cb5e2 Update package.json with new version and add repository information 2024-03-06 17:24:23 +00:00
Siddhant Rai
e1a2bd11a9 fix: upload dropdown also combined 2024-03-06 16:01:53 +05:30
ManishMadan2882
229b408252 adding fallback avatar 2024-03-06 01:58:52 +05:30
ManishMadan2882
ae929438a5 shifted to parcel, styled-components 2024-03-05 21:15:58 +05:30
Siddhant Rai
5daaf84e05 fix: combined two dropdowns into a single component 2024-03-05 14:26:08 +05:30
Siddhant Rai
19b09515a1 Merge branch 'arc53:main' into main 2024-03-05 14:22:51 +05:30
Alex
9ce6078c8b Merge pull request #863 from Anush008/main
feat: Qdrant vectorstore support
2024-03-04 12:41:11 +00:00
Siddhant Rai
51f588f4b1 fix: issue #157 2024-03-04 15:45:34 +05:30
Alex
5ee6605703 Merge pull request #835 from arc53/feature/remote-loads
Feature/remote loads
2024-03-01 15:42:42 +00:00
Alex
7ef97cfd81 fix abort 2024-03-01 15:42:22 +00:00
Alex
f4288f0bd4 remove sitemap 2024-03-01 14:41:03 +00:00
Alex
4a701cb993 Merge branch 'main' into feature/remote-loads 2024-03-01 14:38:27 +00:00
Anush008
00dfb07b15 chore: revert to faiss default 2024-02-29 09:48:38 +05:30
ManishMadan2882
5fffa8e9db adding rollup-plugin-import-css 2024-02-29 04:11:47 +05:30
Pavel
54d187a0ad Fixing ingestion metadata grouping 2024-02-28 19:52:58 +03:00
ManishMadan2882
192ce468b7 inline responsive module styles 2024-02-28 19:31:36 +05:30
Anush008
75c0cadb50 feat: Qdrant vector store 2024-02-28 11:49:15 +05:30
ManishMadan2882
5d578d4b3b preparing for npm publish 2024-02-27 21:31:08 +05:30
Alex
325a8889ab update url 2024-02-27 11:52:51 +00:00
ManishMadan2882
9cdd78e68c purge out dist, update gitignore 2024-02-27 15:51:05 +05:30
ManishMadan2882
3a6770a1ae preparing build 2024-02-26 21:10:22 +05:30
ManishMadan2882
8073924056 padding improved at the edges 2024-02-26 20:46:46 +05:30
ManishMadan2882
7b53e1c54b UI enhancement, scroll fix 2024-02-26 20:10:00 +05:30
Alex
c4c0516820 add endpoint 2024-02-26 14:31:54 +00:00
Alex
8d36f8850e Merge pull request #860 from arc53/Fix-ingestion-grouping
Fixing ingestion metadata grouping
2024-02-26 10:16:37 +00:00
ManishMadan2882
abe5f43f3d adding responsive markdown response, error alert 2024-02-26 03:15:31 +05:30
Pavel
c8d8a8d0b5 Fixing ingestion metadata grouping 2024-02-25 16:03:18 +03:00
ManishMadan2882
f60e88573a refactored UI strategy, added prompt response in chat box 2024-02-24 21:02:28 +05:30
Alex
4216671ea2 Update README.md 2024-02-24 12:28:31 +00:00
Alex
ee3ea7a970 Add wget and unzip packages to Dockerfile 2024-02-23 21:19:04 +00:00
Alex
2b644dbb01 Add Rust toolchain and download mpnet-base-v2.zip model 2024-02-23 21:15:26 +00:00
ManishMadan2882
63878e7ffd inititated shadcn 2024-02-19 04:14:09 +05:30
Alex
007cd6cff1 Add conversations to db.json 2024-02-18 19:33:45 +00:00
Alex
4375215baa Update port number in Dockerfile and server.js 2024-02-18 19:12:58 +00:00
Alex
8cc5e9db13 Merge pull request #856 from ManishMadan2882/main
(mock) adding prompt routes
2024-02-16 11:22:40 +00:00
ManishMadan2882
5685f831a7 (mock) adding prompt routes 2024-02-15 05:35:34 +05:30
Alex
0cb3d12d94 Refactor loader classes to accept inputs directly 2024-02-14 15:17:56 +00:00
Alex
0e38c6751b Merge pull request #854 from ManishMadan2882/main
Message Streaming with the Mock Server
2024-02-14 13:50:15 +00:00
ManishMadan2882
70ad1fb3d8 Merge branch 'main' of https://github.com/manishMadan2882/docsgpt 2024-02-14 18:50:02 +05:30
ManishMadan2882
44f27d91a0 purge console logs 2024-02-14 18:48:43 +05:30
Manish Madan
1bb559c285 Merge branch 'arc53:main' into main 2024-02-14 18:40:24 +05:30
ManishMadan2882
7a005ef126 streamed the sample response /stream 2024-02-14 18:39:21 +05:30
Pavel
030c2a740f upload_remote class 2024-02-13 23:41:36 +03:00
Alex
5dcde67ae9 Merge pull request #852 from arc53/feat/premaillm
fix: docsgpt provider
2024-02-13 15:20:05 +00:00
Alex
ee06fa85f1 fix: docsgpt provider 2024-02-13 15:06:52 +00:00
Alex
5b9352a946 Merge pull request #851 from arc53/feat/premaillm
Add PremAI LLM implementation
2024-02-13 14:14:20 +00:00
Alex
b7927d8d75 Add PremAI LLM implementation 2024-02-13 14:08:55 +00:00
Alex
c144f30606 Merge pull request #850 from ManishMadan2882/feature/remote-loads
adding remote uploads tab
2024-02-12 23:46:30 +00:00
ManishMadan2882
d2dba3a0db adding remote uploads tab 2024-02-13 01:53:25 +05:30
Alex
2c991583ff Merge pull request #848 from ManishMadan2882/main
Makes input field absolute in Conversation, fixes delete icon in Settings/Documents
2024-02-09 14:20:02 +00:00
Alex
2e14dec12d Merge pull request #849 from arc53/main
Sync
2024-02-09 14:05:39 +00:00
ManishMadan2882
8826f0ff3c slight UI improvements in input box 2024-02-09 19:17:26 +05:30
ManishMadan2882
9129f7fb33 fix(Conversation): input box UI 2024-02-09 19:12:48 +05:30
ManishMadan2882
c0ed54406f fix(settings): delete button 2024-02-09 18:04:24 +05:30
Alex
18be257e10 Merge pull request #847 from ManishMadan2882/main
Fix : error on changing conversation while streaming answer
2024-02-07 18:00:12 +00:00
ManishMadan2882
615d549494 slight fixes, checking for null case 2024-02-07 05:09:12 +05:30
ManishMadan2882
0ce39e7f52 purge logs and !need code 2024-02-07 05:04:16 +05:30
ManishMadan2882
3c68cbc955 fix(stream err on changing conversation) 2024-02-07 04:42:39 +05:30
ManishMadan2882
300430e2d5 fixes weird bug- dark theme hook 2024-02-06 05:17:43 +05:30
Alex
166a07732a Merge pull request #820 from Quentium-Forks/main
Bump dependencies & support next 14 for docs
2024-02-05 15:13:40 +00:00
Alex
510b517270 Merge pull request #844 from ManishMadan2882/main
Fix: Sidebar Icons update on changing theme
2024-02-01 09:55:50 +00:00
ManishMadan2882
dea385384a fixes, update Nav images on theme toggle 2024-02-01 03:43:05 +05:30
ManishMadan2882
7a1c9101b2 add custom hook for dark theme 2024-02-01 03:42:09 +05:30
Alex
2be523cf77 Fix handling of embeddings_key in api_search() function 2024-01-30 17:22:33 +00:00
Alex
c01e334487 Merge pull request #843 from larinam/fix_application
Fix application + script requirements.txt
2024-01-29 20:59:36 +00:00
Alex
a2418d1373 Add sentence-transformers library to requirements.txt and comment out model_name in base.py 2024-01-29 20:51:28 +00:00
Alex
a697248b26 Merge pull request #841 from ManishMadan2882/main
Message bubble responsiveness
2024-01-29 13:55:29 +00:00
ManishMadan2882
6058939c00 change size in copy, like , dislike icons 2024-01-29 19:10:03 +05:30
Anton Larin
318de530e3 fix openapi-parser requirement 2024-01-27 16:52:33 +01:00
Anton Larin
9e04b7796a application folder related changes:
* optimize content of requirements.txt
* upgrade libs
* fix imports
2024-01-27 16:25:19 +01:00
Anton Larin
e8099c4db5 script folder related changes:
* optmize content of requirements.txt
* upgrade libs
* fix imports
2024-01-27 14:58:08 +01:00
Alex
bf808811cc Update README.md 2024-01-26 12:21:09 +00:00
ManishMadan2882
f0293de1b9 ui adjustments 2024-01-26 03:06:15 +05:30
ManishMadan2882
810dcb90ce refactored the divs, prevent overlap 2024-01-26 02:47:51 +05:30
ManishMadan2882
a2f2b8fabc make responsive msg bubble 2024-01-26 02:33:50 +05:30
Alex
cbc5f47786 Merge pull request #837 from ManishMadan2882/main
Adding Dark Mode
2024-01-23 14:59:22 +00:00
ManishMadan2882
3e3886ced7 slight UI changes 2024-01-23 19:38:22 +05:30
ManishMadan2882
9ce39fd2ba made borders in settings a bit darker 2024-01-22 18:22:46 +05:30
ManishMadan2882
5b08cdedf0 revert changes in docker yaml 2024-01-22 16:22:19 +05:30
ManishMadan2882
67e4d40c49 added dark mode, About page and bubble icons 2024-01-22 16:11:26 +05:30
ManishMadan2882
537a733157 add dark mode - conversation, bubble, UI fixes 2024-01-22 02:56:07 +05:30
ManishMadan2882
5136e7726d added dark mode, Hero component 2024-01-21 17:18:23 +05:30
Alex
6e236ba74d Merge pull request #827 from Juneezee/vite-5
Upgrade to Vite 5
2024-01-19 14:01:40 +00:00
Eng Zer Jun
374b665089 Upgrade to Vite 5
This commit upgrades vite to the latest version 5, and also updates the
vite plugins to the latest version.

Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
2024-01-19 21:34:28 +08:00
ManishMadan2882
ffecc9a0c7 add dark mode, in Settings 2024-01-19 19:01:13 +05:30
ManishMadan2882
0b997418d3 add dark - sidebar 2024-01-19 01:47:23 +05:30
ManishMadan2882
eaad8a4cf5 initialising dark mode 2024-01-18 02:39:40 +05:30
Alex
396b4595f4 Merge pull request #832 from ArnabBCA/main
Fixed Empty Document Name Upload
2024-01-16 17:07:02 +00:00
Arnab Ghosh
0752aae9ef Fixed Empty Document Name Upload 2024-01-16 15:35:48 +05:30
Alex
ad2221a677 Merge pull request #830 from arc53/feature/search-endpoint
Search docs not inside the /stream in the stream request
2024-01-15 16:55:53 +00:00
Alex
1713d693b1 Merge pull request #831 from ManishMadan2882/feature/search-endpoint
integrate /api/search endpoint, get sources post stream
2024-01-15 16:34:48 +00:00
ManishMadan2882
f4f056449f integrate /api/search endpoint, get sources post stream 2024-01-15 20:23:18 +05:30
Alex
6a70e3e45b Commented out unused code in api_search function 2024-01-12 14:39:17 +00:00
Alex
a04cdee33f Refactor source log generation in complete_stream function 2024-01-12 14:38:15 +00:00
Alex
157769eeb4 Add API endpoint for searching documents 2024-01-12 14:35:23 +00:00
Alex
667b66b926 Merge pull request #825 from arc53/feat/mongodb
Public LLM
2024-01-09 14:31:40 +00:00
Alex
c0f7b344d9 Update environment variables and installation instructions 2024-01-09 12:35:18 +00:00
Alex
060c59e97d Update mpnet-base-v2.zip download URL 2024-01-09 11:41:25 +00:00
Alex
b3461b7134 Add MPNet model and update vector store for Hugging Face embeddings 2024-01-09 11:39:32 +00:00
Pavel
001c450abb choice text 2024-01-09 13:05:16 +03:00
Pavel
ceaa5763d4 choice fix 2024-01-09 12:57:19 +03:00
Alex
b45fd58944 Update EMBEDDINGS_NAME in settings.py and test_vector_store.py 2024-01-09 00:34:04 +00:00
Alex
b3149def82 Update EMBEDDINGS_NAME in settings.py 2024-01-09 00:29:02 +00:00
Alex
378d498402 Remove unused imports in docsgpt_provider.py 2024-01-09 00:19:49 +00:00
Alex
98f52b32a3 Update README and Quickstart guide 2024-01-09 00:18:04 +00:00
Alex
0ab32a6f84 Update setup.sh script with new options for language model usage 2024-01-09 00:07:37 +00:00
Alex
71cc22325d Add application files and update setup script 2024-01-09 00:05:44 +00:00
Alex
e1b2991aa6 Update LLM_NAME and EMBEDDINGS_NAME 2024-01-09 00:01:31 +00:00
Alex
033bcf80d0 docsgpt llm provider 2024-01-08 23:35:37 +00:00
Alex
103118d558 Merge pull request #823 from ManishMadan2882/main
fix distortion on different browsers
2024-01-08 11:30:30 +00:00
ManishMadan2882
f91b5fa004 fix distortion on different browsers 2024-01-08 16:03:41 +05:30
Alex
7179bf7b67 Merge pull request #822 from arc53/feat/mongodb
Mongodb integration as vectorstore
2024-01-06 18:30:25 +00:00
Alex
a3e6239e6e fix: remove import 2024-01-06 18:23:20 +00:00
Alex
1fa12e56c6 Remove unused test cases in test_openai.py 2024-01-06 18:04:50 +00:00
Alex
4ff834de76 Refactor MongoDBVectorStore and add delete_index method 2024-01-06 17:59:01 +00:00
QuentiumYT
6db38ad769 Bump dependencies & support next 14 for docs
- Renamed _app.js to mdx (for Next 14)
- Lint next config file & package.json
2024-01-05 18:50:49 +01:00
Alex
293b7b09a9 init tests 2024-01-05 17:16:16 +00:00
Alex
d5945f9ee7 Update README.md 2024-01-05 13:58:22 +00:00
Alex
d1f5a6fc31 Merge pull request #816 from ManishMadan2882/main
adding responsive sidebar
2024-01-04 20:51:30 +00:00
ManishMadan2882
e7b9f5e4c3 adding responsive sidebar 2024-01-05 01:50:52 +05:30
Alex
7870749077 fix openai 2024-01-03 12:09:05 +00:00
Alex
c5352f443a Merge pull request #813 from CBID2/making-alt-text-less-redundant
fix: Making alt text less redundant
2024-01-03 10:52:08 +00:00
Christine
fd8b7aa0f2 fix: change alt text for setting 2024-01-03 04:17:53 +00:00
Christine
458ea266ec fix: change name to alt text for Discord and GitHub 2024-01-03 04:14:06 +00:00
Alex
9748eaba25 Merge pull request #811 from Rutam21/patch-2
Added new Deployment Guide for Kamatera Performance Cloud
2023-12-31 15:37:32 +00:00
Alex
887a3740b2 Update holopin.yml 2023-12-31 15:34:55 +00:00
Rutam Prita Mishra
2e7cfe9cd7 Added new Deployment Guide
This PR adds a new deployment guide for Kamatera Performance Cloud.
2023-12-26 16:28:57 +05:30
Alex
6dbe156a02 Update README.md 2023-12-25 11:52:37 +00:00
Alex
2a9ef6d48e Merge pull request #792 from arc53/dependabot/npm_and_yarn/frontend/vite-4.5.1
Bump vite from 4.5.0 to 4.5.1 in /frontend
2023-12-22 15:51:11 +00:00
Alex
6717ddbd0b Merge pull request #804 from arc53/dependabot/npm_and_yarn/docs/next-13.5.1
Bump next from 13.4.19 to 13.5.1 in /docs
2023-12-22 15:50:49 +00:00
Alex
47c1aab064 Merge pull request #793 from arc53/dependabot/npm_and_yarn/extensions/react-widget/vite-4.4.12
Bump vite from 4.4.9 to 4.4.12 in /extensions/react-widget
2023-12-22 15:50:08 +00:00
Alex
eda41658b9 Merge pull request #806 from arc53/cve/py-removal
fix: Remove py==1.11.0 from requirements.txt
2023-12-22 15:47:45 +00:00
Alex
7f79363944 fix: Remove py==1.11.0 from requirements.txt 2023-12-22 15:44:39 +00:00
Alex
25967f2a09 Merge pull request #805 from arc53/fix/scripts-vulnerabilities
fix: vulns
2023-12-22 15:35:37 +00:00
Alex
4d3963ad67 fix: vulns 2023-12-22 15:27:23 +00:00
dependabot[bot]
f78c5257dc Bump next from 13.4.19 to 13.5.1 in /docs
Bumps [next](https://github.com/vercel/next.js) from 13.4.19 to 13.5.1.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v13.4.19...v13.5.1)

---
updated-dependencies:
- dependency-name: next
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-22 14:14:27 +00:00
Alex
ccc6234ac8 Merge pull request #803 from arc53/fix/dependency-upgrades
fix: cve upgrades
2023-12-22 14:13:41 +00:00
Alex
c81b0200eb fix: Update pydantic_settings version to 2.1.0 2023-12-22 14:08:03 +00:00
Alex
f039d37c8a fix: pydantic 2023-12-22 14:03:43 +00:00
Alex
237975bfef fix: cve upgrades 2023-12-22 13:25:57 +00:00
Alex
015bc7c8c3 hotfix source doc data 2023-12-22 12:10:35 +00:00
Alex
3da2a00ee9 Merge pull request #801 from Victorivus/bug/fix-#800-mistral_models
Update requirements.txt HF Transformers
2023-12-14 15:29:28 +00:00
Victorivus
16eca5bebf Update requirements.txt HF Transformers
Fix 'mistral' models missing
2023-12-12 15:16:31 +01:00
dependabot[bot]
f8ac5e0af3 Bump vite from 4.4.9 to 4.4.12 in /extensions/react-widget
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.4.9 to 4.4.12.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v4.4.12/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.4.12/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-06 01:52:56 +00:00
dependabot[bot]
eb48a153d9 Bump vite from 4.5.0 to 4.5.1 in /frontend
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.5.0 to 4.5.1.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v4.5.1/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.5.1/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-05 23:44:40 +00:00
Pavel
381a2740ee change input 2023-10-13 21:52:56 +04:00
Alex
8b3b16bce4 inputs 2023-10-13 08:46:35 +01:00
Pavel
024674eef3 List check 2023-10-13 11:42:42 +04:00
Pavel
b7d88b4c0f fix wrong link 2023-10-12 19:45:36 +04:00
Pavel
719ca63ec1 fixes 2023-10-12 19:40:23 +04:00
Pavel
2cfb416fd0 Desc loader 2023-10-12 13:44:32 +04:00
Pavel
50f07f9ef5 limit crawler 2023-10-12 12:53:33 +04:00
Pavel
c517bdd2e1 Crawler + sitemap 2023-10-12 12:35:26 +04:00
Pavel
658867cb46 No crawler, no sitemap 2023-10-12 01:03:40 +04:00
Alex
8f2ad38503 tests 2023-10-11 10:13:51 +01:00
660 changed files with 91771 additions and 20598 deletions

15
.devcontainer/Dockerfile Normal file
View File

@@ -0,0 +1,15 @@
FROM python:3.12-bookworm
# Install Node.js 20.x
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get install -y nodejs \
&& rm -rf /var/lib/apt/lists/*
# Install global npm packages
RUN npm install -g husky vite
# Create and activate Python virtual environment
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
WORKDIR /workspace

View File

@@ -0,0 +1,49 @@
# Welcome to DocsGPT Devcontainer
Welcome to the DocsGPT development environment! This guide will help you get started quickly.
## Starting Services
To run DocsGPT, you need to start three main services: Flask (backend), Celery (task queue), and Vite (frontend). Here are the commands to start each service within the devcontainer:
### Vite (Frontend)
```bash
cd frontend
npm run dev -- --host
```
### Flask (Backend)
```bash
flask --app application/app.py run --host=0.0.0.0 --port=7091
```
### Celery (Task Queue)
```bash
celery -A application.app.celery worker -l INFO
```
## Github Codespaces Instructions
### 1. Make Ports Public:
Go to the "Ports" panel in Codespaces (usually located at the bottom of the VS Code window).
For both port 5173 and 7091, right-click on the port and select "Make Public".
![CleanShot 2025-02-12 at 09 46 14@2x](https://github.com/user-attachments/assets/00a34b16-a7ef-47af-9648-87a7e3008475)
### 2. Update VITE_API_HOST:
After making port 7091 public, copy the public URL provided by Codespaces for port 7091.
Open the file frontend/.env.development.
Find the line VITE_API_HOST=http://localhost:7091.
Replace http://localhost:7091 with the public URL you copied from Codespaces.
![CleanShot 2025-02-12 at 09 46 56@2x](https://github.com/user-attachments/assets/c472242f-1079-4cd8-bc0b-2d78db22b94c)

View File

@@ -0,0 +1,24 @@
{
"name": "DocsGPT Dev Container",
"dockerComposeFile": ["docker-compose-dev.yaml", "docker-compose.override.yaml"],
"service": "dev",
"workspaceFolder": "/workspace",
"postCreateCommand": ".devcontainer/post-create-command.sh",
"forwardPorts": [7091, 5173, 6379, 27017],
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"ms-toolsai.jupyter",
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint"
]
},
"codespaces": {
"openFiles": [
".devcontainer/devc-welcome.md",
"CONTRIBUTING.md"
]
}
}
}

View File

@@ -1,5 +1,3 @@
version: "3.9"
services:
redis:

View File

@@ -0,0 +1,40 @@
version: '3.8'
services:
dev:
build:
context: .
dockerfile: Dockerfile
volumes:
- ../:/workspace:cached
command: sleep infinity
depends_on:
redis:
condition: service_healthy
mongo:
condition: service_healthy
environment:
- CELERY_BROKER_URL=redis://redis:6379/0
- CELERY_RESULT_BACKEND=redis://redis:6379/1
- MONGO_URI=mongodb://mongo:27017/docsgpt
- CACHE_REDIS_URL=redis://redis:6379/2
networks:
- default
redis:
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 30s
retries: 5
mongo:
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
interval: 5s
timeout: 30s
retries: 5
networks:
default:
name: docsgpt-dev-network

View File

@@ -0,0 +1,32 @@
#!/bin/bash
set -e # Exit immediately if a command exits with a non-zero status
if [ ! -f frontend/.env.development ]; then
cp -n .env-template frontend/.env.development || true # Assuming .env-template is in the root
fi
# Determine VITE_API_HOST based on environment
if [ -n "$CODESPACES" ]; then
# Running in Codespaces
CODESPACE_NAME=$(echo "$CODESPACES" | cut -d'-' -f1) # Extract codespace name
PUBLIC_API_HOST="https://${CODESPACE_NAME}-7091.${GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN}"
echo "Setting VITE_API_HOST for Codespaces: $PUBLIC_API_HOST in frontend/.env.development"
sed -i "s|VITE_API_HOST=.*|VITE_API_HOST=$PUBLIC_API_HOST|" frontend/.env.development
else
# Not running in Codespaces (local devcontainer)
DEFAULT_API_HOST="http://localhost:7091"
echo "Setting VITE_API_HOST for local dev: $DEFAULT_API_HOST in frontend/.env.development"
sed -i "s|VITE_API_HOST=.*|VITE_API_HOST=$DEFAULT_API_HOST|" frontend/.env.development
fi
mkdir -p model
if [ ! -d model/all-mpnet-base-v2 ]; then
wget -q https://d3dg1063dc54p9.cloudfront.net/models/embeddings/mpnet-base-v2.zip -O model/mpnet-base-v2.zip
unzip -q model/mpnet-base-v2.zip -d model
rm model/mpnet-base-v2.zip
fi
pip install -r application/requirements.txt
cd frontend
npm install --include=dev

View File

@@ -1,4 +1,5 @@
API_KEY=<LLM api key (for example, open ai key)>
LLM_NAME=docsgpt
VITE_API_STREAMING=true
#For Azure (you can delete it if you don't use Azure)

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
# Auto detect text files and perform LF normalization
* text=auto

3
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,3 @@
# These are supported funding model platforms
github: arc53

23
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,23 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: "pip" # See documentation for possible values
directory: "/application" # Location of package manifests
schedule:
interval: "daily"
- package-ecosystem: "npm" # See documentation for possible values
directory: "/frontend" # Location of package manifests
schedule:
interval: "daily"
- package-ecosystem: "npm"
directory: "/extensions/react-widget"
schedule:
interval: "daily"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"

14
.github/holopin.yml vendored
View File

@@ -1,5 +1,11 @@
organization: arc53
defaultSticker: cln9dm7qz164460gk5ksrgr034
organization: docsgpt
defaultSticker: cm1ulwkkl180570cl82rtzympu
stickers:
- id: cln9dm7qz164460gk5ksrgr034
alias: hacktober
- id: cm1ulwkkl180570cl82rtzympu
alias: contributor2024
- id: cm1ureg8o130450cl8c1po6mil
alias: api
- id: cm1urhmag148240cl8yvqxkthx
alias: lpc
- id: cm1urlcpq622090cl2tvu4w71y
alias: lexeu

24
.github/labeler.yml vendored
View File

@@ -1,23 +1,31 @@
repo:
- '*'
- changed-files:
- any-glob-to-any-file: '*'
github:
- .github/**/*
- changed-files:
- any-glob-to-any-file: '.github/**/*'
application:
- application/**/*
- changed-files:
- any-glob-to-any-file: 'application/**/*'
docs:
- docs/**/*
- changed-files:
- any-glob-to-any-file: 'docs/**/*'
extensions:
- extensions/**/*
- changed-files:
- any-glob-to-any-file: 'extensions/**/*'
frontend:
- frontend/**/*
- changed-files:
- any-glob-to-any-file: 'frontend/**/*'
scripts:
- scripts/**/*
- changed-files:
- any-glob-to-any-file: 'scripts/**/*'
tests:
- tests/**/*
- changed-files:
- any-glob-to-any-file: 'tests/**/*'

11
.github/styles/DocsGPT/Spelling.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
extends: spelling
level: warning
message: "Did you really mean '%s'?"
ignore:
- "**/node_modules/**"
- "**/dist/**"
- "**/build/**"
- "**/coverage/**"
- "**/public/**"
- "**/static/**"
vocab: DocsGPT

View File

@@ -0,0 +1,46 @@
Ollama
Qdrant
Milvus
Chatwoot
Nextra
VSCode
npm
LLMs
APIs
Groq
SGLang
LMDeploy
OAuth
Vite
LLM
JSONPath
UIs
configs
uncomment
qdrant
vectorstore
docsgpt
llm
GPUs
kubectl
Lightsail
enqueues
chatbot
VSCode's
Shareability
feedbacks
automations
Premade
Signup
Repo
repo
env
URl
agentic
llama_cpp
parsable
SDKs
boolean
bool
hardcode
EOL

40
.github/workflows/bandit.yaml vendored Normal file
View File

@@ -0,0 +1,40 @@
name: Bandit Security Scan
on:
push:
branches:
- main
pull_request:
types: [opened, synchronize, reopened]
jobs:
bandit_scan:
if: ${{ github.repository == 'arc53/DocsGPT' }}
runs-on: ubuntu-latest
permissions:
security-events: write
actions: read
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install bandit # Bandit is needed for this action
if [ -f application/requirements.txt ]; then pip install -r application/requirements.txt; fi
- name: Run Bandit scan
uses: PyCQA/bandit-action@v1
with:
severity: medium
confidence: medium
targets: application/
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -1,49 +1,112 @@
name: Build and push DocsGPT Docker image
on:
workflow_dispatch:
push:
branches:
- main
release:
types: [published]
jobs:
deploy:
build:
if: github.repository == 'arc53/DocsGPT'
runs-on: ubuntu-latest
strategy:
matrix:
include:
- platform: linux/amd64
runner: ubuntu-latest
suffix: amd64
- platform: linux/arm64
runner: ubuntu-24.04-arm
suffix: arm64
runs-on: ${{ matrix.runner }}
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up QEMU # Only needed for emulation, not for native arm64 builds
if: matrix.platform == 'linux/arm64'
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
install: true
- name: Login to DockerHub
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to ghcr.io
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
# Runs a single command using the runners shell
- name: Build and push Docker images to docker.io and ghcr.io
uses: docker/build-push-action@v4
- name: Build and push platform-specific images
uses: docker/build-push-action@v6
with:
file: './application/Dockerfile'
platforms: linux/amd64
platforms: ${{ matrix.platform }}
context: ./application
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/docsgpt:latest
ghcr.io/${{ github.repository_owner }}/docsgpt:latest
${{ secrets.DOCKER_USERNAME }}/docsgpt:${{ github.event.release.tag_name }}-${{ matrix.suffix }}
ghcr.io/${{ github.repository_owner }}/docsgpt:${{ github.event.release.tag_name }}-${{ matrix.suffix }}
provenance: false
sbom: false
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/docsgpt:latest
cache-to: type=inline
manifest:
if: github.repository == 'arc53/DocsGPT'
needs: build
runs-on: ubuntu-latest
permissions:
packages: write
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
install: true
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to ghcr.io
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Create and push manifest for DockerHub
run: |
set -e
docker manifest create ${{ secrets.DOCKER_USERNAME }}/docsgpt:${{ github.event.release.tag_name }} \
--amend ${{ secrets.DOCKER_USERNAME }}/docsgpt:${{ github.event.release.tag_name }}-amd64 \
--amend ${{ secrets.DOCKER_USERNAME }}/docsgpt:${{ github.event.release.tag_name }}-arm64
docker manifest push ${{ secrets.DOCKER_USERNAME }}/docsgpt:${{ github.event.release.tag_name }}
docker manifest create ${{ secrets.DOCKER_USERNAME }}/docsgpt:latest \
--amend ${{ secrets.DOCKER_USERNAME }}/docsgpt:${{ github.event.release.tag_name }}-amd64 \
--amend ${{ secrets.DOCKER_USERNAME }}/docsgpt:${{ github.event.release.tag_name }}-arm64
docker manifest push ${{ secrets.DOCKER_USERNAME }}/docsgpt:latest
- name: Create and push manifest for ghcr.io
run: |
set -e
docker manifest create ghcr.io/${{ github.repository_owner }}/docsgpt:${{ github.event.release.tag_name }} \
--amend ghcr.io/${{ github.repository_owner }}/docsgpt:${{ github.event.release.tag_name }}-amd64 \
--amend ghcr.io/${{ github.repository_owner }}/docsgpt:${{ github.event.release.tag_name }}-arm64
docker manifest push ghcr.io/${{ github.repository_owner }}/docsgpt:${{ github.event.release.tag_name }}
docker manifest create ghcr.io/${{ github.repository_owner }}/docsgpt:latest \
--amend ghcr.io/${{ github.repository_owner }}/docsgpt:${{ github.event.release.tag_name }}-amd64 \
--amend ghcr.io/${{ github.repository_owner }}/docsgpt:${{ github.event.release.tag_name }}-arm64
docker manifest push ghcr.io/${{ github.repository_owner }}/docsgpt:latest

View File

@@ -1,48 +1,112 @@
name: Build and push DocsGPT-FE Docker image
on:
workflow_dispatch:
push:
branches:
- main
release:
types: [published]
jobs:
deploy:
runs-on: ubuntu-latest
build:
if: github.repository == 'arc53/DocsGPT'
strategy:
matrix:
include:
- platform: linux/amd64
runner: ubuntu-latest
suffix: amd64
- platform: linux/arm64
runner: ubuntu-24.04-arm
suffix: arm64
runs-on: ${{ matrix.runner }}
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up QEMU # Only needed for emulation, not for native arm64 builds
if: matrix.platform == 'linux/arm64'
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
install: true
- name: Login to DockerHub
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to ghcr.io
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
# Runs a single command using the runners shell
- name: Build and push Docker images to docker.io and ghcr.io
uses: docker/build-push-action@v4
- name: Build and push platform-specific images
uses: docker/build-push-action@v6
with:
file: './frontend/Dockerfile'
platforms: linux/amd64
platforms: ${{ matrix.platform }}
context: ./frontend
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:latest
ghcr.io/${{ github.repository_owner }}/docsgpt-fe:latest
${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:${{ github.event.release.tag_name }}-${{ matrix.suffix }}
ghcr.io/${{ github.repository_owner }}/docsgpt-fe:${{ github.event.release.tag_name }}-${{ matrix.suffix }}
provenance: false
sbom: false
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:latest
cache-to: type=inline
manifest:
if: github.repository == 'arc53/DocsGPT'
needs: build
runs-on: ubuntu-latest
permissions:
packages: write
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
install: true
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to ghcr.io
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Create and push manifest for DockerHub
run: |
set -e
docker manifest create ${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:${{ github.event.release.tag_name }} \
--amend ${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:${{ github.event.release.tag_name }}-amd64 \
--amend ${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:${{ github.event.release.tag_name }}-arm64
docker manifest push ${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:${{ github.event.release.tag_name }}
docker manifest create ${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:latest \
--amend ${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:${{ github.event.release.tag_name }}-amd64 \
--amend ${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:${{ github.event.release.tag_name }}-arm64
docker manifest push ${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:latest
- name: Create and push manifest for ghcr.io
run: |
set -e
docker manifest create ghcr.io/${{ github.repository_owner }}/docsgpt-fe:${{ github.event.release.tag_name }} \
--amend ghcr.io/${{ github.repository_owner }}/docsgpt-fe:${{ github.event.release.tag_name }}-amd64 \
--amend ghcr.io/${{ github.repository_owner }}/docsgpt-fe:${{ github.event.release.tag_name }}-arm64
docker manifest push ghcr.io/${{ github.repository_owner }}/docsgpt-fe:${{ github.event.release.tag_name }}
docker manifest create ghcr.io/${{ github.repository_owner }}/docsgpt-fe:latest \
--amend ghcr.io/${{ github.repository_owner }}/docsgpt-fe:${{ github.event.release.tag_name }}-amd64 \
--amend ghcr.io/${{ github.repository_owner }}/docsgpt-fe:${{ github.event.release.tag_name }}-arm64
docker manifest push ghcr.io/${{ github.repository_owner }}/docsgpt-fe:latest

View File

@@ -0,0 +1,100 @@
name: Build and push multi-arch DocsGPT Docker image
on:
workflow_dispatch:
push:
branches:
- main
jobs:
build:
if: github.repository == 'arc53/DocsGPT'
strategy:
matrix:
include:
- platform: linux/amd64
runner: ubuntu-latest
suffix: amd64
- platform: linux/arm64
runner: ubuntu-24.04-arm
suffix: arm64
runs-on: ${{ matrix.runner }}
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
install: true
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to ghcr.io
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push platform-specific images
uses: docker/build-push-action@v6
with:
file: './application/Dockerfile'
platforms: ${{ matrix.platform }}
context: ./application
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/docsgpt:develop-${{ matrix.suffix }}
ghcr.io/${{ github.repository_owner }}/docsgpt:develop-${{ matrix.suffix }}
provenance: false
sbom: false
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/docsgpt:develop
cache-to: type=inline
manifest:
if: github.repository == 'arc53/DocsGPT'
needs: build
runs-on: ubuntu-latest
permissions:
packages: write
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
install: true
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to ghcr.io
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Create and push manifest for DockerHub
run: |
docker manifest create ${{ secrets.DOCKER_USERNAME }}/docsgpt:develop \
--amend ${{ secrets.DOCKER_USERNAME }}/docsgpt:develop-amd64 \
--amend ${{ secrets.DOCKER_USERNAME }}/docsgpt:develop-arm64
docker manifest push ${{ secrets.DOCKER_USERNAME }}/docsgpt:develop
- name: Create and push manifest for ghcr.io
run: |
docker manifest create ghcr.io/${{ github.repository_owner }}/docsgpt:develop \
--amend ghcr.io/${{ github.repository_owner }}/docsgpt:develop-amd64 \
--amend ghcr.io/${{ github.repository_owner }}/docsgpt:develop-arm64
docker manifest push ghcr.io/${{ github.repository_owner }}/docsgpt:develop

View File

@@ -0,0 +1,104 @@
name: Build and push DocsGPT FE Docker image for development
on:
workflow_dispatch:
push:
branches:
- main
jobs:
build:
if: github.repository == 'arc53/DocsGPT'
strategy:
matrix:
include:
- platform: linux/amd64
runner: ubuntu-latest
suffix: amd64
- platform: linux/arm64
runner: ubuntu-24.04-arm
suffix: arm64
runs-on: ${{ matrix.runner }}
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: Set up QEMU # Only needed for emulation, not for native arm64 builds
if: matrix.platform == 'linux/arm64'
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
install: true
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to ghcr.io
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push platform-specific images
uses: docker/build-push-action@v6
with:
file: './frontend/Dockerfile'
platforms: ${{ matrix.platform }}
context: ./frontend
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:develop-${{ matrix.suffix }}
ghcr.io/${{ github.repository_owner }}/docsgpt-fe:develop-${{ matrix.suffix }}
provenance: false
sbom: false
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:develop
cache-to: type=inline
manifest:
if: github.repository == 'arc53/DocsGPT'
needs: build
runs-on: ubuntu-latest
permissions:
packages: write
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
install: true
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to ghcr.io
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Create and push manifest for DockerHub
run: |
docker manifest create ${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:develop \
--amend ${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:develop-amd64 \
--amend ${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:develop-arm64
docker manifest push ${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:develop
- name: Create and push manifest for ghcr.io
run: |
docker manifest create ghcr.io/${{ github.repository_owner }}/docsgpt-fe:develop \
--amend ghcr.io/${{ github.repository_owner }}/docsgpt-fe:develop-amd64 \
--amend ghcr.io/${{ github.repository_owner }}/docsgpt-fe:develop-arm64
docker manifest push ghcr.io/${{ github.repository_owner }}/docsgpt-fe:develop

View File

@@ -4,12 +4,13 @@ on:
- pull_request_target
jobs:
triage:
if: github.repository == 'arc53/DocsGPT'
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v4
- uses: actions/labeler@v5
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
sync-labels: true

View File

@@ -11,7 +11,7 @@ jobs:
ruff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Lint with Ruff
uses: chartboost/ruff-action@v1

View File

@@ -6,25 +6,25 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11"]
python-version: ["3.12"]
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pytest pytest-cov
cd application
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
cd ../tests
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Test with pytest and generate coverage report
run: |
python -m pytest --cov=application --cov=scripts --cov=extensions --cov-report=xml
python -m pytest --cov=application --cov-report=xml --cov-report=term-missing
- name: Upload coverage reports to Codecov
if: github.event_name == 'pull_request' && matrix.python-version == '3.11'
uses: codecov/codecov-action@v3
if: github.event_name == 'pull_request' && matrix.python-version == '3.12'
uses: codecov/codecov-action@v5
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

View File

@@ -17,7 +17,7 @@ jobs:
steps:
# Step 1: run a standard checkout action
- name: Checkout target repo
uses: actions/checkout@v3
uses: actions/checkout@v4
# Step 2: run the sync action
- name: Sync upstream changes

26
.github/workflows/vale.yml vendored Normal file
View File

@@ -0,0 +1,26 @@
name: Vale Documentation Linter
on:
pull_request:
paths:
- 'docs/**/*.md'
- 'docs/**/*.mdx'
- '**/*.md'
- '.vale.ini'
- '.github/styles/**'
jobs:
vale:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Vale linter
uses: errata-ai/vale-action@v2
with:
files: docs
fail_on_error: false
version: 3.0.5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

6
.gitignore vendored
View File

@@ -3,6 +3,7 @@ __pycache__/
*.py[cod]
*$py.class
experiments
# C extensions
*.so
*.next
@@ -75,6 +76,7 @@ target/
# Jupyter Notebook
.ipynb_checkpoints
**/*.ipynb
# IPython
profile_default/
@@ -112,6 +114,7 @@ venv.bak/
# Spyder project settings
.spyderproject
.spyproject
.jwt_secret_key
# Rope project settings
.ropeproject
@@ -171,4 +174,5 @@ application/vectors/
node_modules/
.vscode/settings.json
models/
/models/
model/

5
.vale.ini Normal file
View File

@@ -0,0 +1,5 @@
MinAlertLevel = warning
StylesPath = .github/styles
[*.{md,mdx}]
BasedOnStyles = DocsGPT

71
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,71 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Frontend Debug (npm)",
"type": "node-terminal",
"request": "launch",
"command": "npm run dev",
"cwd": "${workspaceFolder}/frontend"
},
{
"name": "Flask Debugger",
"type": "debugpy",
"request": "launch",
"module": "flask",
"env": {
"FLASK_APP": "application/app.py",
"PYTHONPATH": "${workspaceFolder}",
"FLASK_ENV": "development",
"FLASK_DEBUG": "1",
"FLASK_RUN_PORT": "7091",
"FLASK_RUN_HOST": "0.0.0.0"
},
"args": [
"run",
"--no-debugger"
],
"cwd": "${workspaceFolder}",
},
{
"name": "Celery Debugger",
"type": "debugpy",
"request": "launch",
"module": "celery",
"env": {
"PYTHONPATH": "${workspaceFolder}",
},
"args": [
"-A",
"application.app.celery",
"worker",
"-l",
"INFO",
"--pool=solo"
],
"cwd": "${workspaceFolder}"
},
{
"name": "Dev Containers (Mongo + Redis)",
"type": "node-terminal",
"request": "launch",
"command": "docker compose -f deployment/docker-compose-dev.yaml up --build",
"cwd": "${workspaceFolder}"
}
],
"compounds": [
{
"name": "DocsGPT: Full Stack",
"configurations": [
"Frontend Debug (npm)",
"Flask Debugger",
"Celery Debugger"
],
"presentation": {
"group": "DocsGPT",
"order": 1
}
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -6,7 +6,7 @@ Thank you for choosing to contribute to DocsGPT! We are all very grateful!
📣 **Discussions** - Engage in conversations, start new topics, or help answer questions.
🐞 **Issues** - This is where we keep track of tasks. It could be bugs,fixes or suggestions for new features.
🐞 **Issues** - This is where we keep track of tasks. It could be bugs, fixes or suggestions for new features.
🛠️ **Pull requests** - Suggest changes to our repository, either by working on existing issues or adding new features.
@@ -21,11 +21,13 @@ Thank you for choosing to contribute to DocsGPT! We are all very grateful!
- If you're interested in contributing code, here are some important things to know:
- We have a frontend built on React (Vite) and a backend in Python.
=======
Before creating issues, please check out how the latest version of our app looks and works by launching it via [Quickstart](https://github.com/arc53/DocsGPT#quickstart) the version on our live demo is slightly modified with login. Your issues should relate to the version that you can launch via [Quickstart](https://github.com/arc53/DocsGPT#quickstart).
Before creating issues, please check out how the latest version of our app looks and works by launching it via [Quickstart](https://github.com/arc53/DocsGPT#quickstart) the version on our live demo is slightly modified with login. Your issues should relate to the version you can launch via [Quickstart](https://github.com/arc53/DocsGPT#quickstart).
### 👨‍💻 If you're interested in contributing code, here are some important things to know:
For instructions on setting up a development environment, please refer to our [Development Deployment Guide](https://docs.docsgpt.cloud/Deploying/Development-Environment).
Tech Stack Overview:
@@ -33,19 +35,40 @@ Tech Stack Overview:
- 🖥 Backend: Developed in Python 🐍
### 🌐 If you are looking to contribute to frontend (⚛React, Vite):
### 🌐 Frontend Contributions (⚛️ React, Vite)
- The current frontend is being migrated from [`/application`](https://github.com/arc53/DocsGPT/tree/main/application) to [`/frontend`](https://github.com/arc53/DocsGPT/tree/main/frontend) with a new design, so please contribute to the new one.
- Check out this [milestone](https://github.com/arc53/DocsGPT/milestone/1) and its issues.
- The updated Figma design can be found [here](https://www.figma.com/file/OXLtrl1EAy885to6S69554/DocsGPT?node-id=0%3A1&t=hjWVuxRg9yi5YkJ9-1).
* The updated Figma design can be found [here](https://www.figma.com/file/OXLtrl1EAy885to6S69554/DocsGPT?node-id=0%3A1&t=hjWVuxRg9yi5YkJ9-1). Please try to follow the guidelines.
* **Coding Style:** We follow a strict coding style enforced by ESLint and Prettier. Please ensure your code adheres to the configuration provided in our repository's `fronetend/.eslintrc.js` file. We recommend configuring your editor with ESLint and Prettier to help with this.
* **Component Structure:** Strive for small, reusable components. Favor functional components and hooks over class components where possible.
* **State Management** If you need to add stores, please use Redux.
Please try to follow the guidelines.
### 🖥 Backend Contributions (🐍 Python)
### 🖥 If you are looking to contribute to Backend (🐍 Python):
- Review our issues and contribute to [`/application`](https://github.com/arc53/DocsGPT/tree/main/application) or [`/scripts`](https://github.com/arc53/DocsGPT/tree/main/scripts) (please disregard old [`ingest_rst.py`](https://github.com/arc53/DocsGPT/blob/main/scripts/old/ingest_rst.py) [`ingest_rst_sphinx.py`](https://github.com/arc53/DocsGPT/blob/main/scripts/old/ingest_rst_sphinx.py) files; they will be deprecated soon).
- Review our issues and contribute to [`/application`](https://github.com/arc53/DocsGPT/tree/main/application)
- All new code should be covered with unit tests ([pytest](https://github.com/pytest-dev/pytest)). Please find tests under [`/tests`](https://github.com/arc53/DocsGPT/tree/main/tests) folder.
- Before submitting your Pull Request, ensure it can be queried after ingesting some test data.
- **Coding Style:** We adhere to the [PEP 8](https://www.python.org/dev/peps/pep-0008/) style guide for Python code. We use `ruff` as our linter and code formatter. Please ensure your code is formatted correctly and passes `ruff` checks before submitting.
- **Type Hinting:** Please use type hints for all function arguments and return values. This improves code readability and helps catch errors early. Example:
```python
def my_function(name: str, count: int) -> list[str]:
...
```
- **Docstrings:** All functions and classes should have docstrings explaining their purpose, parameters, and return values. We prefer the [Google style docstrings](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html). Example:
```python
def my_function(name: str, count: int) -> list[str]:
"""Does something with a name and a count.
Args:
name: The name to use.
count: The number of times to do it.
Returns:
A list of strings.
"""
...
```
### Testing
@@ -124,5 +147,5 @@ Here's a step-by-step guide on how to contribute to DocsGPT:
Thank you for considering contributing to DocsGPT! 🙏
## Questions/collaboration
Feel free to join our [Discord](https://discord.gg/n5BX8dh8rU). We're very friendly and welcoming to new contributors, so don't hesitate to reach out.
# Thank you so much for considering to contribute DocsGPT!🙏
Feel free to join our [Discord](https://discord.gg/vN7YFfdMpj). We're very friendly and welcoming to new contributors, so don't hesitate to reach out.
# Thank you so much for considering to contributing DocsGPT!🙏

39
HACKTOBERFEST.md Normal file
View File

@@ -0,0 +1,39 @@
# **🎉 Join the Hacktoberfest with DocsGPT and win a Free T-shirt for a meaningful PR! 🎉**
Welcome, contributors! We're excited to announce that DocsGPT is participating in Hacktoberfest. Get involved by submitting meaningful pull requests.
All Meaningful contributors with accepted PRs that were created for issues with the `hacktoberfest` label (set by our maintainer team: dartpain, siiddhantt, pabik, ManishMadan2882) will receive a cool T-shirt! 🤩.
<img width="1331" height="678" alt="hacktoberfest-mocks-preview" src="https://github.com/user-attachments/assets/633f6377-38db-48f5-b519-a8b3855a9eb4" />
Fill in [this form](https://forms.gle/Npaba4n9Epfyx56S8
) after your PR was merged please
If you are in doubt don't hesitate to ping us on discord, ping me - Alex (dartpain).
## 📜 Here's How to Contribute:
```text
🛠️ Code: This is the golden ticket! Make meaningful contributions through PRs.
🧩 API extension: Build an app utilising DocsGPT API. We prefer submissions that showcase original ideas and turn the API into an AI agent.
They can be a completely separate repos.
For example:
https://github.com/arc53/tg-bot-docsgpt-extenstion or
https://github.com/arc53/DocsGPT-cli
Non-Code Contributions:
📚 Wiki: Improve our documentation, create a guide.
🖥️ Design: Improve the UI/UX or design a new feature.
```
### 📝 Guidelines for Pull Requests:
- Familiarize yourself with the current contributions and our [Roadmap](https://github.com/orgs/arc53/projects/2).
- Before contributing check existing [issues](https://github.com/arc53/DocsGPT/issues) or [create](https://github.com/arc53/DocsGPT/issues/new/choose) an issue and wait to get assigned.
- Once you are finished with your contribution, please fill in this [form](https://forms.gle/Npaba4n9Epfyx56S8).
- Refer to the [Documentation](https://docs.docsgpt.cloud/).
- Feel free to join our [Discord](https://discord.gg/vN7YFfdMpj) server. We're here to help newcomers, so don't hesitate to jump in! Join us [here](https://discord.gg/vN7YFfdMpj).
Thank you very much for considering contributing to DocsGPT during Hacktoberfest! 🙏 Your contributions (not just simple typos) could earn you a stylish new t-shirt.
We will publish a t-shirt design later into the October.

231
README.md
View File

@@ -3,13 +3,11 @@
</h1>
<p align="center">
<strong>Open-Source Documentation Assistant</strong>
<strong>Private AI for agents, assistants and enterprise search</strong>
</p>
<p align="left">
<strong><a href="https://docsgpt.arc53.com/">DocsGPT</a></strong> is a cutting-edge open-source solution that streamlines the process of finding information in the project documentation. With its integration of the powerful <strong>GPT</strong> models, developers can easily ask questions about a project and receive accurate answers.
Say goodbye to time-consuming manual searches, and let <strong><a href="https://docsgpt.arc53.com/">DocsGPT</a></strong> help you quickly find the information you need. Try it out and see how it revolutionizes your project documentation experience. Contribute to its development and be a part of the future of AI-powered assistance.
<strong><a href="https://www.docsgpt.cloud/">DocsGPT</a></strong> is an open-source AI platform for building intelligent agents and assistants. Features Agent Builder, deep research tools, document analysis (PDF, Office, web content), Multi-model support (choose your provider or run locally), and rich API connectivity for agents with actionable tools and integrations. Deploy anywhere with complete privacy control.
</p>
<div align="center">
@@ -17,162 +15,142 @@ Say goodbye to time-consuming manual searches, and let <strong><a href="https://
<a href="https://github.com/arc53/DocsGPT">![link to main GitHub showing Stars number](https://img.shields.io/github/stars/arc53/docsgpt?style=social)</a>
<a href="https://github.com/arc53/DocsGPT">![link to main GitHub showing Forks number](https://img.shields.io/github/forks/arc53/docsgpt?style=social)</a>
<a href="https://github.com/arc53/DocsGPT/blob/main/LICENSE">![link to license file](https://img.shields.io/github/license/arc53/docsgpt)</a>
<a href="https://discord.gg/n5BX8dh8rU">![link to discord](https://img.shields.io/discord/1070046503302877216)</a>
<a href="https://twitter.com/ATushynski">![X (formerly Twitter) URL](https://img.shields.io/twitter/follow/ATushynski)</a>
<a href="https://www.bestpractices.dev/projects/9907"><img src="https://www.bestpractices.dev/projects/9907/badge"></a>
<a href="https://discord.gg/vN7YFfdMpj">![link to discord](https://img.shields.io/discord/1070046503302877216)</a>
<a href="https://x.com/docsgptai">![X (formerly Twitter) URL](https://img.shields.io/twitter/follow/docsgptai)</a>
<a href="https://docs.docsgpt.cloud/quickstart">⚡️ Quickstart</a><a href="https://app.docsgpt.cloud/">☁️ Cloud Version</a><a href="https://discord.gg/vN7YFfdMpj">💬 Discord</a>
<br>
<a href="https://docs.docsgpt.cloud/">📖 Documentation</a><a href="https://github.com/arc53/DocsGPT/blob/main/CONTRIBUTING.md">👫 Contribute</a><a href="https://blog.docsgpt.cloud/">🗞 Blog</a>
<br>
</div>
<div align="center">
<br>
🎃 <a href="https://github.com/arc53/DocsGPT/blob/main/HACKTOBERFEST.md"> Hacktoberfest Prizes, Rules & Q&A </a> 🎃
<br>
<br>
</div>
<div align="center">
<br>
<img src="https://d3dg1063dc54p9.cloudfront.net/videos/demov7.gif" alt="video-example-of-docs-gpt" width="800" height="450">
</div>
<h3 align="left">
<strong>Key Features:</strong>
</h3>
<ul align="left">
<li><strong>🗂️ Wide Format Support:</strong> Reads PDF, DOCX, CSV, XLSX, EPUB, MD, RST, HTML, MDX, JSON, PPTX, and images.</li>
<li><strong>🌐 Web & Data Integration:</strong> Ingests from URLs, sitemaps, Reddit, GitHub and web crawlers.</li>
<li><strong>✅ Reliable Answers:</strong> Get accurate, hallucination-free responses with source citations viewable in a clean UI.</li>
<li><strong>🔑 Streamlined API Keys:</strong> Generate keys linked to your settings, documents, and models, simplifying chatbot and integration setup.</li>
<li><strong>🔗 Actionable Tooling:</strong> Connect to APIs, tools, and other services to enable LLM actions.</li>
<li><strong>🧩 Pre-built Integrations:</strong> Use readily available HTML/React chat widgets, search tools, Discord/Telegram bots, and more.</li>
<li><strong>🔌 Flexible Deployment:</strong> Works with major LLMs (OpenAI, Google, Anthropic) and local models (Ollama, llama_cpp).</li>
<li><strong>🏢 Secure & Scalable:</strong> Run privately and securely with Kubernetes support, designed for enterprise-grade reliability.</li>
</ul>
## Roadmap
- [x] Full GoogleAI compatibility (Jan 2025)
- [x] Add tools (Jan 2025)
- [x] Manually updating chunks in the app UI (Feb 2025)
- [x] Devcontainer for easy development (Feb 2025)
- [x] ReACT agent (March 2025)
- [x] Chatbots menu re-design to handle tools, agent types, and more (April 2025)
- [x] New input box in the conversation menu (April 2025)
- [x] Add triggerable actions / tools (webhook) (April 2025)
- [x] Agent optimisations (May 2025)
- [x] Filesystem sources update (July 2025)
- [x] Json Responses (August 2025)
- [x] MCP support (August 2025)
- [x] Google Drive integration (September 2025)
- [x] Add OAuth 2.0 authentication for MCP (September 2025)
- [ ] SharePoint integration (October 2025)
- [ ] Deep Agents (October 2025)
- [ ] Agent scheduling
You can find our full roadmap [here](https://github.com/orgs/arc53/projects/2). Please don't hesitate to contribute or create issues, it helps us improve DocsGPT!
### Production Support / Help for Companies:
We're eager to provide personalized assistance when deploying your DocsGPT to a live environment.
- [Book Demo :wave:](https://airtable.com/appdeaL0F1qV8Bl2C/shrrJF1Ll7btCJRbP)
- [Send Email :email:](mailto:contact@arc53.com?subject=DocsGPT%20support%2Fsolutions)
[Get a Demo :wave:](https://www.docsgpt.cloud/contact)
![video-example-of-docs-gpt](https://d3dg1063dc54p9.cloudfront.net/videos/demov3.gif)
[Send Email :email:](mailto:support@docsgpt.cloud?subject=DocsGPT%20support%2Fsolutions)
## Roadmap
## Join the Lighthouse Program 🌟
You can find our roadmap [here](https://github.com/orgs/arc53/projects/2). Please don't hesitate to contribute or create issues, it helps us improve DocsGPT!
Calling all developers and GenAI innovators! The **DocsGPT Lighthouse Program** connects technical leaders actively deploying or extending DocsGPT in real-world scenarios. Collaborate directly with our team to shape the roadmap, access priority support, and build enterprise-ready solutions with exclusive community insights.
## Our Open-Source Models Optimized for DocsGPT:
| Name | Base Model | Requirements (or similar) |
| --------------------------------------------------------------------- | ----------- | ------------------------- |
| [Docsgpt-7b-falcon](https://huggingface.co/Arc53/docsgpt-7b-falcon) | Falcon-7b | 1xA10G gpu |
| [Docsgpt-14b](https://huggingface.co/Arc53/docsgpt-14b) | llama-2-14b | 2xA10 gpu's |
| [Docsgpt-40b-falcon](https://huggingface.co/Arc53/docsgpt-40b-falcon) | falcon-40b | 8xA10G gpu's |
If you don't have enough resources to run it, you can use bitsnbytes to quantize.
## Features
![Main features of DocsGPT showcasing six main features](https://user-images.githubusercontent.com/17906039/220427472-2644cff4-7666-46a5-819f-fc4a521f63c7.png)
## Useful Links
- :mag: :fire: [Live preview](https://docsgpt.arc53.com/)
- :speech_balloon: :tada: [Join our Discord](https://discord.gg/n5BX8dh8rU)
- :books: :sunglasses: [Guides](https://docs.docsgpt.co.uk/)
- :couple: [Interested in contributing?](https://github.com/arc53/DocsGPT/blob/main/CONTRIBUTING.md)
- :file_folder: :rocket: [How to use any other documentation](https://docs.docsgpt.co.uk/Guides/How-to-train-on-other-documentation)
- :house: :closed_lock_with_key: [How to host it locally (so all data will stay on-premises)](https://docs.docsgpt.co.uk/Guides/How-to-use-different-LLM)
## Project Structure
- Application - Flask app (main application).
- Extensions - Chrome extension.
- Scripts - Script that creates similarity search index for other libraries.
- Frontend - Frontend uses <a href="https://vitejs.dev/">Vite</a> and <a href="https://react.dev/">React</a>.
[Learn More & Apply →](https://docs.google.com/forms/d/1KAADiJinUJ8EMQyfTXUIGyFbqINNClNR3jBNWq7DgTE)
## QuickStart
> [!Note]
> Make sure you have [Docker](https://docs.docker.com/engine/install/) installed
On Mac OS or Linux, write:
A more detailed [Quickstart](https://docs.docsgpt.cloud/quickstart) is available in our documentation
`./setup.sh`
1. **Clone the repository:**
It will install all the dependencies and allow you to download the local model or use OpenAI.
Otherwise, refer to this Guide:
1. Download and open this repository with `git clone https://github.com/arc53/DocsGPT.git`
2. Create a `.env` file in your root directory and set the env variable `API_KEY` with your [OpenAI API key](https://platform.openai.com/account/api-keys) and `VITE_API_STREAMING` to true or false, depending on whether you want streaming answers or not.
It should look like this inside:
```
API_KEY=Yourkey
VITE_API_STREAMING=true
```bash
git clone https://github.com/arc53/DocsGPT.git
cd DocsGPT
```
See optional environment variables in the [/.env-template](https://github.com/arc53/DocsGPT/blob/main/.env-template) and [/application/.env_sample](https://github.com/arc53/DocsGPT/blob/main/application/.env_sample) files.
**For macOS and Linux:**
3. Run [./run-with-docker-compose.sh](https://github.com/arc53/DocsGPT/blob/main/run-with-docker-compose.sh).
4. Navigate to http://localhost:5173/.
2. **Run the setup script:**
To stop, just run `Ctrl + C`.
```bash
./setup.sh
```
## Development Environments
**For Windows:**
### Spin up Mongo and Redis
2. **Run the PowerShell setup script:**
For development, only two containers are used from [docker-compose.yaml](https://github.com/arc53/DocsGPT/blob/main/docker-compose.yaml) (by deleting all services except for Redis and Mongo).
See file [docker-compose-dev.yaml](./docker-compose-dev.yaml).
```powershell
PowerShell -ExecutionPolicy Bypass -File .\setup.ps1
```
Run
Either script will guide you through setting up DocsGPT. Five options available: using the public API, running locally, connecting to a local inference engine, using a cloud API provider, or build the docker image locally. Scripts will automatically configure your `.env` file and handle necessary downloads and installations based on your chosen option.
```
docker compose -f docker-compose-dev.yaml build
docker compose -f docker-compose-dev.yaml up -d
**Navigate to http://localhost:5173/**
To stop DocsGPT, open a terminal in the `DocsGPT` directory and run:
```bash
docker compose -f deployment/docker-compose.yaml down
```
### Run the Backend
(or use the specific `docker compose down` command shown after running the setup script).
> [!Note]
> Make sure you have Python 3.10 or 3.11 installed.
1. Export required environment variables or prepare a `.env` file in the `/application` folder:
- Copy [.env_sample](https://github.com/arc53/DocsGPT/blob/main/application/.env_sample) and create `.env` with your OpenAI API token for the `API_KEY` and `EMBEDDINGS_KEY` fields.
(check out [`application/core/settings.py`](application/core/settings.py) if you want to see more config options.)
2. (optional) Create a Python virtual environment:
You can follow the [Python official documentation](https://docs.python.org/3/tutorial/venv.html) for virtual environments.
a) On Mac OS and Linux
```commandline
python -m venv venv
. venv/bin/activate
```
b) On Windows
```commandline
python -m venv venv
venv/Scripts/activate
```
3. Change to the `application/` subdir by the command `cd application/` and install dependencies for the backend:
```commandline
pip install -r application/requirements.txt
```
4. Run the app using `flask --app application/app.py run --host=0.0.0.0 --port=7091`.
5. Start worker with `celery -A application.app.celery worker -l INFO`.
### Start Frontend
> [!Note]
> Make sure you have Node version 16 or higher.
1. Navigate to the [/frontend](https://github.com/arc53/DocsGPT/tree/main/frontend) folder.
2. Install the required packages `husky` and `vite` (ignore if already installed).
```commandline
npm install husky -g
npm install vite -g
```
3. Install dependencies by running `npm install --include=dev`.
4. Run the app using `npm run dev`.
> For development environment setup instructions, please refer to the [Development Environment Guide](https://docs.docsgpt.cloud/Deploying/Development-Environment).
## Contributing
Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) file for information about how to get involved. We welcome issues, questions, and pull requests.
## Architecture
![Architecture chart](https://github.com/user-attachments/assets/fc6a7841-ddfc-45e6-b5a0-d05fe648cbe2)
## Project Structure
- Application - Flask app (main application).
- Extensions - Extensions, like react widget or discord bot.
- Frontend - Frontend uses <a href="https://vitejs.dev/">Vite</a> and <a href="https://react.dev/">React</a>.
- Scripts - Miscellaneous scripts.
## Code Of Conduct
We as members, contributors, and leaders, pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. Please refer to the [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) file for more information about contributing.
@@ -187,4 +165,9 @@ We as members, contributors, and leaders, pledge to make participation in our co
The source code license is [MIT](https://opensource.org/license/mit/), as described in the [LICENSE](LICENSE) file.
Built with [:bird: :link: LangChain](https://github.com/hwchase17/langchain)
<p>This project is supported by:</p>
<p>
<a href="https://www.digitalocean.com/?utm_medium=opensource&utm_source=DocsGPT">
<img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_horizontal_blue.svg" width="201px">
</a>
</p>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

14
SECURITY.md Normal file
View File

@@ -0,0 +1,14 @@
# Security Policy
## Supported Versions
Supported Versions:
Currently, we support security patches by committing changes and bumping the version published on Github.
## Reporting a Vulnerability
Found a vulnerability? Please email us:
security@arc53.com

View File

@@ -1,23 +1,87 @@
FROM python:3.10-slim-bullseye as builder
# Builder Stage
FROM ubuntu:24.04 as builder
# Tiktoken requires Rust toolchain, so build it in a separate stage
RUN apt-get update && apt-get install -y gcc curl
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y && apt-get install --reinstall libc6-dev -y
ENV PATH="/root/.cargo/bin:${PATH}"
RUN pip install --upgrade pip && pip install tiktoken==0.3.3
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y software-properties-common && \
add-apt-repository ppa:deadsnakes/ppa && \
apt-get update && \
apt-get install -y --no-install-recommends gcc wget unzip libc6-dev python3.12 python3.12-venv && \
rm -rf /var/lib/apt/lists/*
# Verify Python installation and setup symlink
RUN if [ -f /usr/bin/python3.12 ]; then \
ln -s /usr/bin/python3.12 /usr/bin/python; \
else \
echo "Python 3.12 not found"; exit 1; \
fi
# Download and unzip the model
RUN wget https://d3dg1063dc54p9.cloudfront.net/models/embeddings/mpnet-base-v2.zip && \
unzip mpnet-base-v2.zip -d models && \
rm mpnet-base-v2.zip
# Install Rust
RUN wget -q -O - https://sh.rustup.rs | sh -s -- -y
# Clean up to reduce container size
RUN apt-get remove --purge -y wget unzip && apt-get autoremove -y && rm -rf /var/lib/apt/lists/*
# Copy requirements.txt
COPY requirements.txt .
RUN pip install -r requirements.txt
FROM python:3.10-slim-bullseye
# Setup Python virtual environment
RUN python3.12 -m venv /venv
# Copy pre-built packages and binaries from builder stage
COPY --from=builder /usr/local/ /usr/local/
# Activate virtual environment and install Python packages
ENV PATH="/venv/bin:$PATH"
# Install Python packages
RUN pip install --no-cache-dir --upgrade pip && \
pip install --no-cache-dir tiktoken && \
pip install --no-cache-dir -r requirements.txt
# Final Stage
FROM ubuntu:24.04 as final
RUN apt-get update && \
apt-get install -y software-properties-common && \
add-apt-repository ppa:deadsnakes/ppa && \
apt-get update && apt-get install -y --no-install-recommends python3.12 && \
ln -s /usr/bin/python3.12 /usr/bin/python && \
rm -rf /var/lib/apt/lists/*
# Set working directory
WORKDIR /app
COPY . /app/application
ENV FLASK_APP=app.py
ENV FLASK_DEBUG=true
# Create a non-root user: `appuser` (Feel free to choose a name)
RUN groupadd -r appuser && \
useradd -r -g appuser -d /app -s /sbin/nologin -c "Docker image user" appuser
# Copy the virtual environment and model from the builder stage
COPY --from=builder /venv /venv
COPY --from=builder /models /app/models
# Copy your application code
COPY . /app/application
# Change the ownership of the /app directory to the appuser
RUN mkdir -p /app/application/inputs/local
RUN chown -R appuser:appuser /app
# Set environment variables
ENV FLASK_APP=app.py \
FLASK_DEBUG=true \
PATH="/venv/bin:$PATH"
# Expose the port the app runs on
EXPOSE 7091
CMD ["gunicorn", "-w", "2", "--timeout", "120", "--bind", "0.0.0.0:7091", "application.wsgi:app"]
# Switch to non-root user
USER appuser
# Start Gunicorn
CMD ["gunicorn", "-w", "1", "--timeout", "120", "--bind", "0.0.0.0:7091", "--preload", "application.wsgi:app"]

View File

@@ -0,0 +1,16 @@
from application.agents.classic_agent import ClassicAgent
from application.agents.react_agent import ReActAgent
class AgentCreator:
agents = {
"classic": ClassicAgent,
"react": ReActAgent,
}
@classmethod
def create_agent(cls, type, *args, **kwargs):
agent_class = cls.agents.get(type.lower())
if not agent_class:
raise ValueError(f"No agent class found for type {type}")
return agent_class(*args, **kwargs)

402
application/agents/base.py Normal file
View File

@@ -0,0 +1,402 @@
import logging
import uuid
from abc import ABC, abstractmethod
from typing import Dict, Generator, List, Optional
from bson.objectid import ObjectId
from application.agents.tools.tool_action_parser import ToolActionParser
from application.agents.tools.tool_manager import ToolManager
from application.core.mongo_db import MongoDB
from application.core.settings import settings
from application.llm.handlers.handler_creator import LLMHandlerCreator
from application.llm.llm_creator import LLMCreator
from application.logging import build_stack_data, log_activity, LogContext
logger = logging.getLogger(__name__)
class BaseAgent(ABC):
def __init__(
self,
endpoint: str,
llm_name: str,
gpt_model: str,
api_key: str,
user_api_key: Optional[str] = None,
prompt: str = "",
chat_history: Optional[List[Dict]] = None,
retrieved_docs: Optional[List[Dict]] = None,
decoded_token: Optional[Dict] = None,
attachments: Optional[List[Dict]] = None,
json_schema: Optional[Dict] = None,
limited_token_mode: Optional[bool] = False,
token_limit: Optional[int] = settings.DEFAULT_AGENT_LIMITS["token_limit"],
limited_request_mode: Optional[bool] = False,
request_limit: Optional[int] = settings.DEFAULT_AGENT_LIMITS["request_limit"],
):
self.endpoint = endpoint
self.llm_name = llm_name
self.gpt_model = gpt_model
self.api_key = api_key
self.user_api_key = user_api_key
self.prompt = prompt
self.decoded_token = decoded_token or {}
self.user: str = self.decoded_token.get("sub")
self.tool_config: Dict = {}
self.tools: List[Dict] = []
self.tool_calls: List[Dict] = []
self.chat_history: List[Dict] = chat_history if chat_history is not None else []
self.llm = LLMCreator.create_llm(
llm_name,
api_key=api_key,
user_api_key=user_api_key,
decoded_token=decoded_token,
)
self.retrieved_docs = retrieved_docs or []
self.llm_handler = LLMHandlerCreator.create_handler(
llm_name if llm_name else "default"
)
self.attachments = attachments or []
self.json_schema = json_schema
self.limited_token_mode = limited_token_mode
self.token_limit = token_limit
self.limited_request_mode = limited_request_mode
self.request_limit = request_limit
@log_activity()
def gen(
self, query: str, log_context: LogContext = None
) -> Generator[Dict, None, None]:
yield from self._gen_inner(query, log_context)
@abstractmethod
def _gen_inner(
self, query: str, log_context: LogContext
) -> Generator[Dict, None, None]:
pass
def _get_tools(self, api_key: str = None) -> Dict[str, Dict]:
mongo = MongoDB.get_client()
db = mongo[settings.MONGO_DB_NAME]
agents_collection = db["agents"]
tools_collection = db["user_tools"]
agent_data = agents_collection.find_one({"key": api_key or self.user_api_key})
tool_ids = agent_data.get("tools", []) if agent_data else []
tools = (
tools_collection.find(
{"_id": {"$in": [ObjectId(tool_id) for tool_id in tool_ids]}}
)
if tool_ids
else []
)
tools = list(tools)
tools_by_id = {str(tool["_id"]): tool for tool in tools} if tools else {}
return tools_by_id
def _get_user_tools(self, user="local"):
mongo = MongoDB.get_client()
db = mongo[settings.MONGO_DB_NAME]
user_tools_collection = db["user_tools"]
user_tools = user_tools_collection.find({"user": user, "status": True})
user_tools = list(user_tools)
return {str(i): tool for i, tool in enumerate(user_tools)}
def _build_tool_parameters(self, action):
params = {"type": "object", "properties": {}, "required": []}
for param_type in ["query_params", "headers", "body", "parameters"]:
if param_type in action and action[param_type].get("properties"):
for k, v in action[param_type]["properties"].items():
if v.get("filled_by_llm", True):
params["properties"][k] = {
key: value
for key, value in v.items()
if key != "filled_by_llm" and key != "value"
}
params["required"].append(k)
return params
def _prepare_tools(self, tools_dict):
self.tools = [
{
"type": "function",
"function": {
"name": f"{action['name']}_{tool_id}",
"description": action["description"],
"parameters": self._build_tool_parameters(action),
},
}
for tool_id, tool in tools_dict.items()
if (
(tool["name"] == "api_tool" and "actions" in tool.get("config", {}))
or (tool["name"] != "api_tool" and "actions" in tool)
)
for action in (
tool["config"]["actions"].values()
if tool["name"] == "api_tool"
else tool["actions"]
)
if action.get("active", True)
]
def _execute_tool_action(self, tools_dict, call):
parser = ToolActionParser(self.llm.__class__.__name__)
tool_id, action_name, call_args = parser.parse_args(call)
call_id = getattr(call, "id", None) or str(uuid.uuid4())
# Check if parsing failed
if tool_id is None or action_name is None:
error_message = f"Error: Failed to parse LLM tool call. Tool name: {getattr(call, 'name', 'unknown')}"
logger.error(error_message)
tool_call_data = {
"tool_name": "unknown",
"call_id": call_id,
"action_name": getattr(call, "name", "unknown"),
"arguments": call_args or {},
"result": f"Failed to parse tool call. Invalid tool name format: {getattr(call, 'name', 'unknown')}",
}
yield {"type": "tool_call", "data": {**tool_call_data, "status": "error"}}
self.tool_calls.append(tool_call_data)
return "Failed to parse tool call.", call_id
# Check if tool_id exists in available tools
if tool_id not in tools_dict:
error_message = f"Error: Tool ID '{tool_id}' extracted from LLM call not found in available tools_dict. Available IDs: {list(tools_dict.keys())}"
logger.error(error_message)
# Return error result
tool_call_data = {
"tool_name": "unknown",
"call_id": call_id,
"action_name": f"{action_name}_{tool_id}",
"arguments": call_args,
"result": f"Tool with ID {tool_id} not found. Available tools: {list(tools_dict.keys())}",
}
yield {"type": "tool_call", "data": {**tool_call_data, "status": "error"}}
self.tool_calls.append(tool_call_data)
return f"Tool with ID {tool_id} not found.", call_id
tool_call_data = {
"tool_name": tools_dict[tool_id]["name"],
"call_id": call_id,
"action_name": f"{action_name}_{tool_id}",
"arguments": call_args,
}
yield {"type": "tool_call", "data": {**tool_call_data, "status": "pending"}}
tool_data = tools_dict[tool_id]
action_data = (
tool_data["config"]["actions"][action_name]
if tool_data["name"] == "api_tool"
else next(
action
for action in tool_data["actions"]
if action["name"] == action_name
)
)
query_params, headers, body, parameters = {}, {}, {}, {}
param_types = {
"query_params": query_params,
"headers": headers,
"body": body,
"parameters": parameters,
}
for param_type, target_dict in param_types.items():
if param_type in action_data and action_data[param_type].get("properties"):
for param, details in action_data[param_type]["properties"].items():
if param not in call_args and "value" in details:
target_dict[param] = details["value"]
for param, value in call_args.items():
for param_type, target_dict in param_types.items():
if param_type in action_data and param in action_data[param_type].get(
"properties", {}
):
target_dict[param] = value
tm = ToolManager(config={})
# Prepare tool_config and add tool_id for memory tools
if tool_data["name"] == "api_tool":
tool_config = {
"url": tool_data["config"]["actions"][action_name]["url"],
"method": tool_data["config"]["actions"][action_name]["method"],
"headers": headers,
"query_params": query_params,
}
else:
tool_config = tool_data["config"].copy() if tool_data["config"] else {}
# Add tool_id from MongoDB _id for tools that need instance isolation (like memory tool)
# Use MongoDB _id if available, otherwise fall back to enumerated tool_id
tool_config["tool_id"] = str(tool_data.get("_id", tool_id))
tool = tm.load_tool(
tool_data["name"],
tool_config=tool_config,
user_id=self.user, # Pass user ID for MCP tools credential decryption
)
if tool_data["name"] == "api_tool":
print(
f"Executing api: {action_name} with query_params: {query_params}, headers: {headers}, body: {body}"
)
result = tool.execute_action(action_name, **body)
else:
print(f"Executing tool: {action_name} with args: {call_args}")
result = tool.execute_action(action_name, **parameters)
tool_call_data["result"] = (
f"{str(result)[:50]}..." if len(str(result)) > 50 else result
)
yield {"type": "tool_call", "data": {**tool_call_data, "status": "completed"}}
self.tool_calls.append(tool_call_data)
return result, call_id
def _get_truncated_tool_calls(self):
return [
{
**tool_call,
"result": (
f"{str(tool_call['result'])[:50]}..."
if len(str(tool_call["result"])) > 50
else tool_call["result"]
),
"status": "completed",
}
for tool_call in self.tool_calls
]
def _build_messages(
self,
system_prompt: str,
query: str,
) -> List[Dict]:
"""Build messages using pre-rendered system prompt"""
messages = [{"role": "system", "content": system_prompt}]
for i in self.chat_history:
if "prompt" in i and "response" in i:
messages.append({"role": "user", "content": i["prompt"]})
messages.append({"role": "assistant", "content": i["response"]})
if "tool_calls" in i:
for tool_call in i["tool_calls"]:
call_id = tool_call.get("call_id") or str(uuid.uuid4())
function_call_dict = {
"function_call": {
"name": tool_call.get("action_name"),
"args": tool_call.get("arguments"),
"call_id": call_id,
}
}
function_response_dict = {
"function_response": {
"name": tool_call.get("action_name"),
"response": {"result": tool_call.get("result")},
"call_id": call_id,
}
}
messages.append(
{"role": "assistant", "content": [function_call_dict]}
)
messages.append(
{"role": "tool", "content": [function_response_dict]}
)
messages.append({"role": "user", "content": query})
return messages
def _llm_gen(self, messages: List[Dict], log_context: Optional[LogContext] = None):
gen_kwargs = {"model": self.gpt_model, "messages": messages}
if (
hasattr(self.llm, "_supports_tools")
and self.llm._supports_tools
and self.tools
):
gen_kwargs["tools"] = self.tools
if (
self.json_schema
and hasattr(self.llm, "_supports_structured_output")
and self.llm._supports_structured_output()
):
structured_format = self.llm.prepare_structured_output_format(
self.json_schema
)
if structured_format:
if self.llm_name == "openai":
gen_kwargs["response_format"] = structured_format
elif self.llm_name == "google":
gen_kwargs["response_schema"] = structured_format
resp = self.llm.gen_stream(**gen_kwargs)
if log_context:
data = build_stack_data(self.llm, exclude_attributes=["client"])
log_context.stacks.append({"component": "llm", "data": data})
return resp
def _llm_handler(
self,
resp,
tools_dict: Dict,
messages: List[Dict],
log_context: Optional[LogContext] = None,
attachments: Optional[List[Dict]] = None,
):
resp = self.llm_handler.process_message_flow(
self, resp, tools_dict, messages, attachments, True
)
if log_context:
data = build_stack_data(self.llm_handler, exclude_attributes=["tool_calls"])
log_context.stacks.append({"component": "llm_handler", "data": data})
return resp
def _handle_response(self, response, tools_dict, messages, log_context):
is_structured_output = (
self.json_schema is not None
and hasattr(self.llm, "_supports_structured_output")
and self.llm._supports_structured_output()
)
if isinstance(response, str):
answer_data = {"answer": response}
if is_structured_output:
answer_data["structured"] = True
answer_data["schema"] = self.json_schema
yield answer_data
return
if hasattr(response, "message") and getattr(response.message, "content", None):
answer_data = {"answer": response.message.content}
if is_structured_output:
answer_data["structured"] = True
answer_data["schema"] = self.json_schema
yield answer_data
return
processed_response_gen = self._llm_handler(
response, tools_dict, messages, log_context, self.attachments
)
for event in processed_response_gen:
if isinstance(event, str):
answer_data = {"answer": event}
if is_structured_output:
answer_data["structured"] = True
answer_data["schema"] = self.json_schema
yield answer_data
elif hasattr(event, "message") and getattr(event.message, "content", None):
answer_data = {"answer": event.message.content}
if is_structured_output:
answer_data["structured"] = True
answer_data["schema"] = self.json_schema
yield answer_data
elif isinstance(event, dict) and "type" in event:
yield event

View File

@@ -0,0 +1,37 @@
import logging
from typing import Dict, Generator
from application.agents.base import BaseAgent
from application.logging import LogContext
logger = logging.getLogger(__name__)
class ClassicAgent(BaseAgent):
"""A simplified agent with clear execution flow"""
def _gen_inner(
self, query: str, log_context: LogContext
) -> Generator[Dict, None, None]:
"""Core generator function for ClassicAgent execution flow"""
tools_dict = (
self._get_user_tools(self.user)
if not self.user_api_key
else self._get_tools(self.user_api_key)
)
self._prepare_tools(tools_dict)
messages = self._build_messages(self.prompt, query)
llm_response = self._llm_gen(messages, log_context)
yield from self._handle_response(
llm_response, tools_dict, messages, log_context
)
yield {"sources": self.retrieved_docs}
yield {"tool_calls": self._get_truncated_tool_calls()}
log_context.stacks.append(
{"component": "agent", "data": {"tool_calls": self.tool_calls.copy()}}
)

View File

@@ -0,0 +1,238 @@
import logging
import os
from typing import Any, Dict, Generator, List
from application.agents.base import BaseAgent
from application.logging import build_stack_data, LogContext
logger = logging.getLogger(__name__)
MAX_ITERATIONS_REASONING = 10
current_dir = os.path.dirname(
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
)
with open(
os.path.join(current_dir, "application/prompts", "react_planning_prompt.txt"), "r"
) as f:
PLANNING_PROMPT_TEMPLATE = f.read()
with open(
os.path.join(current_dir, "application/prompts", "react_final_prompt.txt"), "r"
) as f:
FINAL_PROMPT_TEMPLATE = f.read()
class ReActAgent(BaseAgent):
"""
Research and Action (ReAct) Agent - Advanced reasoning agent with iterative planning.
Implements a think-act-observe loop for complex problem-solving:
1. Creates a strategic plan based on the query
2. Executes tools and gathers observations
3. Iteratively refines approach until satisfied
4. Synthesizes final answer from all observations
"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.plan: str = ""
self.observations: List[str] = []
def _gen_inner(
self, query: str, log_context: LogContext
) -> Generator[Dict, None, None]:
"""Execute ReAct reasoning loop with planning, action, and observation cycles"""
self._reset_state()
tools_dict = (
self._get_tools(self.user_api_key)
if self.user_api_key
else self._get_user_tools(self.user)
)
self._prepare_tools(tools_dict)
for iteration in range(1, MAX_ITERATIONS_REASONING + 1):
yield {"thought": f"Reasoning... (iteration {iteration})\n\n"}
yield from self._planning_phase(query, log_context)
if not self.plan:
logger.warning(
f"ReActAgent: No plan generated in iteration {iteration}"
)
break
self.observations.append(f"Plan (iteration {iteration}): {self.plan}")
satisfied = yield from self._execution_phase(query, tools_dict, log_context)
if satisfied:
logger.info("ReActAgent: Goal satisfied, stopping reasoning loop")
break
yield from self._synthesis_phase(query, log_context)
def _reset_state(self):
"""Reset agent state for new query"""
self.plan = ""
self.observations = []
def _planning_phase(
self, query: str, log_context: LogContext
) -> Generator[Dict, None, None]:
"""Generate strategic plan for query"""
logger.info("ReActAgent: Creating plan...")
plan_prompt = self._build_planning_prompt(query)
messages = [{"role": "user", "content": plan_prompt}]
plan_stream = self.llm.gen_stream(
model=self.gpt_model,
messages=messages,
tools=self.tools if self.tools else None,
)
if log_context:
log_context.stacks.append(
{"component": "planning_llm", "data": build_stack_data(self.llm)}
)
plan_parts = []
for chunk in plan_stream:
content = self._extract_content(chunk)
if content:
plan_parts.append(content)
yield {"thought": content}
self.plan = "".join(plan_parts)
def _execution_phase(
self, query: str, tools_dict: Dict, log_context: LogContext
) -> Generator[bool, None, None]:
"""Execute plan with tool calls and observations"""
execution_prompt = self._build_execution_prompt(query)
messages = self._build_messages(execution_prompt, query)
llm_response = self._llm_gen(messages, log_context)
initial_content = self._extract_content(llm_response)
if initial_content:
self.observations.append(f"Initial response: {initial_content}")
processed_response = self._llm_handler(
llm_response, tools_dict, messages, log_context
)
for tool_call in self.tool_calls:
observation = (
f"Executed: {tool_call.get('tool_name', 'Unknown')} "
f"with args {tool_call.get('arguments', {})}. "
f"Result: {str(tool_call.get('result', ''))[:200]}"
)
self.observations.append(observation)
final_content = self._extract_content(processed_response)
if final_content:
self.observations.append(f"Response after tools: {final_content}")
if log_context:
log_context.stacks.append(
{
"component": "agent_tool_calls",
"data": {"tool_calls": self.tool_calls.copy()},
}
)
yield {"sources": self.retrieved_docs}
yield {"tool_calls": self._get_truncated_tool_calls()}
return "SATISFIED" in (final_content or "")
def _synthesis_phase(
self, query: str, log_context: LogContext
) -> Generator[Dict, None, None]:
"""Synthesize final answer from all observations"""
logger.info("ReActAgent: Generating final answer...")
final_prompt = self._build_final_answer_prompt(query)
messages = [{"role": "user", "content": final_prompt}]
final_stream = self.llm.gen_stream(
model=self.gpt_model, messages=messages, tools=None
)
if log_context:
log_context.stacks.append(
{"component": "final_answer_llm", "data": build_stack_data(self.llm)}
)
for chunk in final_stream:
content = self._extract_content(chunk)
if content:
yield {"answer": content}
def _build_planning_prompt(self, query: str) -> str:
"""Build planning phase prompt"""
prompt = PLANNING_PROMPT_TEMPLATE.replace("{query}", query)
prompt = prompt.replace("{prompt}", self.prompt or "")
prompt = prompt.replace("{summaries}", "")
prompt = prompt.replace("{observations}", "\n".join(self.observations))
return prompt
def _build_execution_prompt(self, query: str) -> str:
"""Build execution phase prompt with plan and observations"""
observations_str = "\n".join(self.observations)
if len(observations_str) > 20000:
observations_str = observations_str[:20000] + "\n...[truncated]"
return (
f"{self.prompt or ''}\n\n"
f"Follow this plan:\n{self.plan}\n\n"
f"Observations:\n{observations_str}\n\n"
f"If sufficient data exists to answer '{query}', respond with 'SATISFIED'. "
f"Otherwise, continue executing the plan."
)
def _build_final_answer_prompt(self, query: str) -> str:
"""Build final synthesis prompt"""
observations_str = "\n".join(self.observations)
if len(observations_str) > 10000:
observations_str = observations_str[:10000] + "\n...[truncated]"
logger.warning("ReActAgent: Observations truncated for final answer")
return FINAL_PROMPT_TEMPLATE.format(query=query, observations=observations_str)
def _extract_content(self, response: Any) -> str:
"""Extract text content from various LLM response formats"""
if not response:
return ""
collected = []
if isinstance(response, str):
return response
if hasattr(response, "message") and hasattr(response.message, "content"):
if response.message.content:
return response.message.content
if hasattr(response, "choices") and response.choices:
if hasattr(response.choices[0], "message"):
content = response.choices[0].message.content
if content:
return content
if hasattr(response, "content") and isinstance(response.content, list):
if response.content and hasattr(response.content[0], "text"):
return response.content[0].text
try:
for chunk in response:
content_piece = ""
if hasattr(chunk, "choices") and chunk.choices:
if hasattr(chunk.choices[0], "delta"):
delta_content = chunk.choices[0].delta.content
if delta_content:
content_piece = delta_content
elif hasattr(chunk, "type") and chunk.type == "content_block_delta":
if hasattr(chunk, "delta") and hasattr(chunk.delta, "text"):
content_piece = chunk.delta.text
elif isinstance(chunk, str):
content_piece = chunk
if content_piece:
collected.append(content_piece)
except (TypeError, AttributeError):
logger.debug(
f"Response not iterable or unexpected format: {type(response)}"
)
except Exception as e:
logger.error(f"Error extracting content: {e}")
return "".join(collected)

View File

@@ -0,0 +1,72 @@
import json
import requests
from application.agents.tools.base import Tool
class APITool(Tool):
"""
API Tool
A flexible tool for performing various API actions (e.g., sending messages, retrieving data) via custom user-specified APIs
"""
def __init__(self, config):
self.config = config
self.url = config.get("url", "")
self.method = config.get("method", "GET")
self.headers = config.get("headers", {"Content-Type": "application/json"})
self.query_params = config.get("query_params", {})
def execute_action(self, action_name, **kwargs):
return self._make_api_call(
self.url, self.method, self.headers, self.query_params, kwargs
)
def _make_api_call(self, url, method, headers, query_params, body):
if query_params:
url = f"{url}?{requests.compat.urlencode(query_params)}"
# if isinstance(body, dict):
# body = json.dumps(body)
try:
print(f"Making API call: {method} {url} with body: {body}")
if body == "{}":
body = None
response = requests.request(method, url, headers=headers, data=body)
response.raise_for_status()
content_type = response.headers.get(
"Content-Type", "application/json"
).lower()
if "application/json" in content_type:
try:
data = response.json()
except json.JSONDecodeError as e:
print(f"Error decoding JSON: {e}. Raw response: {response.text}")
return {
"status_code": response.status_code,
"message": f"API call returned invalid JSON. Error: {e}",
"data": response.text,
}
elif "text/" in content_type or "application/xml" in content_type:
data = response.text
elif not response.content:
data = None
else:
print(f"Unsupported content type: {content_type}")
data = response.content
return {
"status_code": response.status_code,
"data": data,
"message": "API call successful.",
}
except requests.exceptions.RequestException as e:
return {
"status_code": response.status_code if response else None,
"message": f"API call failed: {str(e)}",
}
def get_actions_metadata(self):
return []
def get_config_requirements(self):
return {}

View File

@@ -0,0 +1,21 @@
from abc import ABC, abstractmethod
class Tool(ABC):
@abstractmethod
def execute_action(self, action_name: str, **kwargs):
pass
@abstractmethod
def get_actions_metadata(self):
"""
Returns a list of JSON objects describing the actions supported by the tool.
"""
pass
@abstractmethod
def get_config_requirements(self):
"""
Returns a dictionary describing the configuration requirements for the tool.
"""
pass

View File

@@ -0,0 +1,182 @@
import requests
from application.agents.tools.base import Tool
class BraveSearchTool(Tool):
"""
Brave Search
A tool for performing web and image searches using the Brave Search API.
Requires an API key for authentication.
"""
def __init__(self, config):
self.config = config
self.token = config.get("token", "")
self.base_url = "https://api.search.brave.com/res/v1"
def execute_action(self, action_name, **kwargs):
actions = {
"brave_web_search": self._web_search,
"brave_image_search": self._image_search,
}
if action_name in actions:
return actions[action_name](**kwargs)
else:
raise ValueError(f"Unknown action: {action_name}")
def _web_search(
self,
query,
country="ALL",
search_lang="en",
count=10,
offset=0,
safesearch="off",
freshness=None,
result_filter=None,
extra_snippets=False,
summary=False,
):
"""
Performs a web search using the Brave Search API.
"""
print(f"Performing Brave web search for: {query}")
url = f"{self.base_url}/web/search"
params = {
"q": query,
"country": country,
"search_lang": search_lang,
"count": min(count, 20),
"offset": min(offset, 9),
"safesearch": safesearch,
}
if freshness:
params["freshness"] = freshness
if result_filter:
params["result_filter"] = result_filter
if extra_snippets:
params["extra_snippets"] = 1
if summary:
params["summary"] = 1
headers = {
"Accept": "application/json",
"Accept-Encoding": "gzip",
"X-Subscription-Token": self.token,
}
response = requests.get(url, params=params, headers=headers)
if response.status_code == 200:
return {
"status_code": response.status_code,
"results": response.json(),
"message": "Search completed successfully.",
}
else:
return {
"status_code": response.status_code,
"message": f"Search failed with status code: {response.status_code}.",
}
def _image_search(
self,
query,
country="ALL",
search_lang="en",
count=5,
safesearch="off",
spellcheck=False,
):
"""
Performs an image search using the Brave Search API.
"""
print(f"Performing Brave image search for: {query}")
url = f"{self.base_url}/images/search"
params = {
"q": query,
"country": country,
"search_lang": search_lang,
"count": min(count, 100), # API max is 100
"safesearch": safesearch,
"spellcheck": 1 if spellcheck else 0,
}
headers = {
"Accept": "application/json",
"Accept-Encoding": "gzip",
"X-Subscription-Token": self.token,
}
response = requests.get(url, params=params, headers=headers)
if response.status_code == 200:
return {
"status_code": response.status_code,
"results": response.json(),
"message": "Image search completed successfully.",
}
else:
return {
"status_code": response.status_code,
"message": f"Image search failed with status code: {response.status_code}.",
}
def get_actions_metadata(self):
return [
{
"name": "brave_web_search",
"description": "Perform a web search using Brave Search",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The search query (max 400 characters, 50 words)",
},
"search_lang": {
"type": "string",
"description": "The search language preference (default: en)",
},
"freshness": {
"type": "string",
"description": "Time filter for results (pd: last 24h, pw: last week, pm: last month, py: last year)",
},
},
"required": ["query"],
"additionalProperties": False,
},
},
{
"name": "brave_image_search",
"description": "Perform an image search using Brave Search",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The search query (max 400 characters, 50 words)",
},
"count": {
"type": "integer",
"description": "Number of results to return (max 100, default: 5)",
},
},
"required": ["query"],
"additionalProperties": False,
},
},
]
def get_config_requirements(self):
return {
"token": {
"type": "string",
"description": "Brave Search API key for authentication",
},
}

View File

@@ -0,0 +1,76 @@
import requests
from application.agents.tools.base import Tool
class CryptoPriceTool(Tool):
"""
CryptoPrice
A tool for retrieving cryptocurrency prices using the CryptoCompare public API
"""
def __init__(self, config):
self.config = config
def execute_action(self, action_name, **kwargs):
actions = {"cryptoprice_get": self._get_price}
if action_name in actions:
return actions[action_name](**kwargs)
else:
raise ValueError(f"Unknown action: {action_name}")
def _get_price(self, symbol, currency):
"""
Fetches the current price of a given cryptocurrency symbol in the specified currency.
Example:
symbol = "BTC"
currency = "USD"
returns price in USD.
"""
url = f"https://min-api.cryptocompare.com/data/price?fsym={symbol.upper()}&tsyms={currency.upper()}"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
if currency.upper() in data:
return {
"status_code": response.status_code,
"price": data[currency.upper()],
"message": f"Price of {symbol.upper()} in {currency.upper()} retrieved successfully.",
}
else:
return {
"status_code": response.status_code,
"message": f"Couldn't find price for {symbol.upper()} in {currency.upper()}.",
}
else:
return {
"status_code": response.status_code,
"message": "Failed to retrieve price.",
}
def get_actions_metadata(self):
return [
{
"name": "cryptoprice_get",
"description": "Retrieve the price of a specified cryptocurrency in a given currency",
"parameters": {
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "The cryptocurrency symbol (e.g. BTC)",
},
"currency": {
"type": "string",
"description": "The currency in which you want the price (e.g. USD)",
},
},
"required": ["symbol", "currency"],
"additionalProperties": False,
},
}
]
def get_config_requirements(self):
# No specific configuration needed for this tool as it just queries a public endpoint
return {}

View File

@@ -0,0 +1,114 @@
from application.agents.tools.base import Tool
from duckduckgo_search import DDGS
class DuckDuckGoSearchTool(Tool):
"""
DuckDuckGo Search
A tool for performing web and image searches using DuckDuckGo.
"""
def __init__(self, config):
self.config = config
def execute_action(self, action_name, **kwargs):
actions = {
"ddg_web_search": self._web_search,
"ddg_image_search": self._image_search,
}
if action_name in actions:
return actions[action_name](**kwargs)
else:
raise ValueError(f"Unknown action: {action_name}")
def _web_search(
self,
query,
max_results=5,
):
print(f"Performing DuckDuckGo web search for: {query}")
try:
results = DDGS().text(
query,
max_results=max_results,
)
return {
"status_code": 200,
"results": results,
"message": "Web search completed successfully.",
}
except Exception as e:
return {
"status_code": 500,
"message": f"Web search failed: {str(e)}",
}
def _image_search(
self,
query,
max_results=5,
):
print(f"Performing DuckDuckGo image search for: {query}")
try:
results = DDGS().images(
keywords=query,
max_results=max_results,
)
return {
"status_code": 200,
"results": results,
"message": "Image search completed successfully.",
}
except Exception as e:
return {
"status_code": 500,
"message": f"Image search failed: {str(e)}",
}
def get_actions_metadata(self):
return [
{
"name": "ddg_web_search",
"description": "Perform a web search using DuckDuckGo.",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query",
},
"max_results": {
"type": "integer",
"description": "Number of results to return (default: 5)",
},
},
"required": ["query"],
},
},
{
"name": "ddg_image_search",
"description": "Perform an image search using DuckDuckGo.",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query",
},
"max_results": {
"type": "integer",
"description": "Number of results to return (default: 5, max: 50)",
},
},
"required": ["query"],
},
},
]
def get_config_requirements(self):
return {}

View File

@@ -0,0 +1,861 @@
import asyncio
import base64
import json
import logging
import time
from typing import Any, Dict, List, Optional
from urllib.parse import parse_qs, urlparse
from application.agents.tools.base import Tool
from application.api.user.tasks import mcp_oauth_status_task, mcp_oauth_task
from application.cache import get_redis_instance
from application.core.mongo_db import MongoDB
from application.core.settings import settings
from application.security.encryption import decrypt_credentials
from fastmcp import Client
from fastmcp.client.auth import BearerAuth
from fastmcp.client.transports import (
SSETransport,
StdioTransport,
StreamableHttpTransport,
)
from mcp.client.auth import OAuthClientProvider, TokenStorage
from mcp.shared.auth import OAuthClientInformationFull, OAuthClientMetadata, OAuthToken
from pydantic import AnyHttpUrl, ValidationError
from redis import Redis
mongo = MongoDB.get_client()
db = mongo[settings.MONGO_DB_NAME]
_mcp_clients_cache = {}
class MCPTool(Tool):
"""
MCP Tool
Connect to remote Model Context Protocol (MCP) servers to access dynamic tools and resources.
"""
def __init__(self, config: Dict[str, Any], user_id: Optional[str] = None):
"""
Initialize the MCP Tool with configuration.
Args:
config: Dictionary containing MCP server configuration:
- server_url: URL of the remote MCP server
- transport_type: Transport type (auto, sse, http, stdio)
- auth_type: Type of authentication (bearer, oauth, api_key, basic, none)
- encrypted_credentials: Encrypted credentials (if available)
- timeout: Request timeout in seconds (default: 30)
- headers: Custom headers for requests
- command: Command for STDIO transport
- args: Arguments for STDIO transport
- oauth_scopes: OAuth scopes for oauth auth type
- oauth_client_name: OAuth client name for oauth auth type
user_id: User ID for decrypting credentials (required if encrypted_credentials exist)
"""
self.config = config
self.user_id = user_id
self.server_url = config.get("server_url", "")
self.transport_type = config.get("transport_type", "auto")
self.auth_type = config.get("auth_type", "none")
self.timeout = config.get("timeout", 30)
self.custom_headers = config.get("headers", {})
self.auth_credentials = {}
if config.get("encrypted_credentials") and user_id:
self.auth_credentials = decrypt_credentials(
config["encrypted_credentials"], user_id
)
else:
self.auth_credentials = config.get("auth_credentials", {})
self.oauth_scopes = config.get("oauth_scopes", [])
self.oauth_task_id = config.get("oauth_task_id", None)
self.oauth_client_name = config.get("oauth_client_name", "DocsGPT-MCP")
self.redirect_uri = f"{settings.API_URL}/api/mcp_server/callback"
self.available_tools = []
self._cache_key = self._generate_cache_key()
self._client = None
# Only validate and setup if server_url is provided and not OAuth
if self.server_url and self.auth_type != "oauth":
self._setup_client()
def _generate_cache_key(self) -> str:
"""Generate a unique cache key for this MCP server configuration."""
auth_key = ""
if self.auth_type == "oauth":
scopes_str = ",".join(self.oauth_scopes) if self.oauth_scopes else "none"
auth_key = f"oauth:{self.oauth_client_name}:{scopes_str}"
elif self.auth_type in ["bearer"]:
token = self.auth_credentials.get(
"bearer_token", ""
) or self.auth_credentials.get("access_token", "")
auth_key = f"bearer:{token[:10]}..." if token else "bearer:none"
elif self.auth_type == "api_key":
api_key = self.auth_credentials.get("api_key", "")
auth_key = f"apikey:{api_key[:10]}..." if api_key else "apikey:none"
elif self.auth_type == "basic":
username = self.auth_credentials.get("username", "")
auth_key = f"basic:{username}"
else:
auth_key = "none"
return f"{self.server_url}#{self.transport_type}#{auth_key}"
def _setup_client(self):
"""Setup FastMCP client with proper transport and authentication."""
global _mcp_clients_cache
if self._cache_key in _mcp_clients_cache:
cached_data = _mcp_clients_cache[self._cache_key]
if time.time() - cached_data["created_at"] < 1800:
self._client = cached_data["client"]
return
else:
del _mcp_clients_cache[self._cache_key]
transport = self._create_transport()
auth = None
if self.auth_type == "oauth":
redis_client = get_redis_instance()
auth = DocsGPTOAuth(
mcp_url=self.server_url,
scopes=self.oauth_scopes,
redis_client=redis_client,
redirect_uri=self.redirect_uri,
task_id=self.oauth_task_id,
db=db,
user_id=self.user_id,
)
elif self.auth_type == "bearer":
token = self.auth_credentials.get(
"bearer_token", ""
) or self.auth_credentials.get("access_token", "")
if token:
auth = BearerAuth(token)
self._client = Client(transport, auth=auth)
_mcp_clients_cache[self._cache_key] = {
"client": self._client,
"created_at": time.time(),
}
def _create_transport(self):
"""Create appropriate transport based on configuration."""
headers = {"Content-Type": "application/json", "User-Agent": "DocsGPT-MCP/1.0"}
headers.update(self.custom_headers)
if self.auth_type == "api_key":
api_key = self.auth_credentials.get("api_key", "")
header_name = self.auth_credentials.get("api_key_header", "X-API-Key")
if api_key:
headers[header_name] = api_key
elif self.auth_type == "basic":
username = self.auth_credentials.get("username", "")
password = self.auth_credentials.get("password", "")
if username and password:
credentials = base64.b64encode(
f"{username}:{password}".encode()
).decode()
headers["Authorization"] = f"Basic {credentials}"
if self.transport_type == "auto":
if "sse" in self.server_url.lower() or self.server_url.endswith("/sse"):
transport_type = "sse"
else:
transport_type = "http"
else:
transport_type = self.transport_type
if transport_type == "sse":
headers.update({"Accept": "text/event-stream", "Cache-Control": "no-cache"})
return SSETransport(url=self.server_url, headers=headers)
elif transport_type == "http":
return StreamableHttpTransport(url=self.server_url, headers=headers)
elif transport_type == "stdio":
command = self.config.get("command", "python")
args = self.config.get("args", [])
env = self.auth_credentials if self.auth_credentials else None
return StdioTransport(command=command, args=args, env=env)
else:
return StreamableHttpTransport(url=self.server_url, headers=headers)
def _format_tools(self, tools_response) -> List[Dict]:
"""Format tools response to match expected format."""
if hasattr(tools_response, "tools"):
tools = tools_response.tools
elif isinstance(tools_response, list):
tools = tools_response
else:
tools = []
tools_dict = []
for tool in tools:
if hasattr(tool, "name"):
tool_dict = {
"name": tool.name,
"description": tool.description,
}
if hasattr(tool, "inputSchema"):
tool_dict["inputSchema"] = tool.inputSchema
tools_dict.append(tool_dict)
elif isinstance(tool, dict):
tools_dict.append(tool)
else:
if hasattr(tool, "model_dump"):
tools_dict.append(tool.model_dump())
else:
tools_dict.append({"name": str(tool), "description": ""})
return tools_dict
async def _execute_with_client(self, operation: str, *args, **kwargs):
"""Execute operation with FastMCP client."""
if not self._client:
raise Exception("FastMCP client not initialized")
async with self._client:
if operation == "ping":
return await self._client.ping()
elif operation == "list_tools":
tools_response = await self._client.list_tools()
self.available_tools = self._format_tools(tools_response)
return self.available_tools
elif operation == "call_tool":
tool_name = args[0]
tool_args = kwargs
return await self._client.call_tool(tool_name, tool_args)
elif operation == "list_resources":
return await self._client.list_resources()
elif operation == "list_prompts":
return await self._client.list_prompts()
else:
raise Exception(f"Unknown operation: {operation}")
def _run_async_operation(self, operation: str, *args, **kwargs):
"""Run async operation in sync context."""
try:
try:
loop = asyncio.get_running_loop()
import concurrent.futures
def run_in_thread():
new_loop = asyncio.new_event_loop()
asyncio.set_event_loop(new_loop)
try:
return new_loop.run_until_complete(
self._execute_with_client(operation, *args, **kwargs)
)
finally:
new_loop.close()
with concurrent.futures.ThreadPoolExecutor() as executor:
future = executor.submit(run_in_thread)
return future.result(timeout=self.timeout)
except RuntimeError:
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
try:
return loop.run_until_complete(
self._execute_with_client(operation, *args, **kwargs)
)
finally:
loop.close()
except Exception as e:
print(f"Error occurred while running async operation: {e}")
raise
def discover_tools(self) -> List[Dict]:
"""
Discover available tools from the MCP server using FastMCP.
Returns:
List of tool definitions from the server
"""
if not self.server_url:
return []
if not self._client:
self._setup_client()
try:
tools = self._run_async_operation("list_tools")
self.available_tools = tools
return self.available_tools
except Exception as e:
raise Exception(f"Failed to discover tools from MCP server: {str(e)}")
def execute_action(self, action_name: str, **kwargs) -> Any:
"""
Execute an action on the remote MCP server using FastMCP.
Args:
action_name: Name of the action to execute
**kwargs: Parameters for the action
Returns:
Result from the MCP server
"""
if not self.server_url:
raise Exception("No MCP server configured")
if not self._client:
self._setup_client()
cleaned_kwargs = {}
for key, value in kwargs.items():
if value == "" or value is None:
continue
cleaned_kwargs[key] = value
try:
result = self._run_async_operation(
"call_tool", action_name, **cleaned_kwargs
)
return self._format_result(result)
except Exception as e:
raise Exception(f"Failed to execute action '{action_name}': {str(e)}")
def _format_result(self, result) -> Dict:
"""Format FastMCP result to match expected format."""
if hasattr(result, "content"):
content_list = []
for content_item in result.content:
if hasattr(content_item, "text"):
content_list.append({"type": "text", "text": content_item.text})
elif hasattr(content_item, "data"):
content_list.append({"type": "data", "data": content_item.data})
else:
content_list.append(
{"type": "unknown", "content": str(content_item)}
)
return {
"content": content_list,
"isError": getattr(result, "isError", False),
}
else:
return result
def test_connection(self) -> Dict:
"""
Test the connection to the MCP server and validate functionality.
Returns:
Dictionary with connection test results including tool count
"""
if not self.server_url:
return {
"success": False,
"message": "No MCP server URL configured",
"tools_count": 0,
"transport_type": self.transport_type,
"auth_type": self.auth_type,
"error_type": "ConfigurationError",
}
if not self._client:
self._setup_client()
try:
if self.auth_type == "oauth":
return self._test_oauth_connection()
else:
return self._test_regular_connection()
except Exception as e:
return {
"success": False,
"message": f"Connection failed: {str(e)}",
"tools_count": 0,
"transport_type": self.transport_type,
"auth_type": self.auth_type,
"error_type": type(e).__name__,
}
def _test_regular_connection(self) -> Dict:
"""Test connection for non-OAuth auth types."""
try:
self._run_async_operation("ping")
ping_success = True
except Exception:
ping_success = False
tools = self.discover_tools()
message = f"Successfully connected to MCP server. Found {len(tools)} tools."
if not ping_success:
message += " (Ping not supported, but tool discovery worked)"
return {
"success": True,
"message": message,
"tools_count": len(tools),
"transport_type": self.transport_type,
"auth_type": self.auth_type,
"ping_supported": ping_success,
"tools": [tool.get("name", "unknown") for tool in tools],
}
def _test_oauth_connection(self) -> Dict:
"""Test connection for OAuth auth type with proper async handling."""
try:
task = mcp_oauth_task.delay(config=self.config, user=self.user_id)
if not task:
raise Exception("Failed to start OAuth authentication")
return {
"success": True,
"requires_oauth": True,
"task_id": task.id,
"status": "pending",
"message": "OAuth flow started",
}
except Exception as e:
return {
"success": False,
"message": f"OAuth connection failed: {str(e)}",
"tools_count": 0,
"transport_type": self.transport_type,
"auth_type": self.auth_type,
"error_type": type(e).__name__,
}
def get_actions_metadata(self) -> List[Dict]:
"""
Get metadata for all available actions.
Returns:
List of action metadata dictionaries
"""
actions = []
for tool in self.available_tools:
input_schema = (
tool.get("inputSchema")
or tool.get("input_schema")
or tool.get("schema")
or tool.get("parameters")
)
parameters_schema = {
"type": "object",
"properties": {},
"required": [],
}
if input_schema:
if isinstance(input_schema, dict):
if "properties" in input_schema:
parameters_schema = {
"type": input_schema.get("type", "object"),
"properties": input_schema.get("properties", {}),
"required": input_schema.get("required", []),
}
for key in ["additionalProperties", "description"]:
if key in input_schema:
parameters_schema[key] = input_schema[key]
else:
parameters_schema["properties"] = input_schema
action = {
"name": tool.get("name", ""),
"description": tool.get("description", ""),
"parameters": parameters_schema,
}
actions.append(action)
return actions
def get_config_requirements(self) -> Dict:
"""Get configuration requirements for the MCP tool."""
return {
"server_url": {
"type": "string",
"description": "URL of the remote MCP server (e.g., https://api.example.com/mcp or https://docs.mcp.cloudflare.com/sse)",
"required": True,
},
"transport_type": {
"type": "string",
"description": "Transport type for connection",
"enum": ["auto", "sse", "http", "stdio"],
"default": "auto",
"required": False,
"help": {
"auto": "Automatically detect best transport",
"sse": "Server-Sent Events (for real-time streaming)",
"http": "HTTP streaming (recommended for production)",
"stdio": "Standard I/O (for local servers)",
},
},
"auth_type": {
"type": "string",
"description": "Authentication type",
"enum": ["none", "bearer", "oauth", "api_key", "basic"],
"default": "none",
"required": True,
"help": {
"none": "No authentication",
"bearer": "Bearer token authentication",
"oauth": "OAuth 2.1 authentication (with frontend integration)",
"api_key": "API key authentication",
"basic": "Basic authentication",
},
},
"auth_credentials": {
"type": "object",
"description": "Authentication credentials (varies by auth_type)",
"required": False,
"properties": {
"bearer_token": {
"type": "string",
"description": "Bearer token for bearer auth",
},
"access_token": {
"type": "string",
"description": "Access token for OAuth (if pre-obtained)",
},
"api_key": {
"type": "string",
"description": "API key for api_key auth",
},
"api_key_header": {
"type": "string",
"description": "Header name for API key (default: X-API-Key)",
},
"username": {
"type": "string",
"description": "Username for basic auth",
},
"password": {
"type": "string",
"description": "Password for basic auth",
},
},
},
"oauth_scopes": {
"type": "array",
"description": "OAuth scopes to request (for oauth auth_type)",
"items": {"type": "string"},
"required": False,
"default": [],
},
"oauth_client_name": {
"type": "string",
"description": "Client name for OAuth registration (for oauth auth_type)",
"default": "DocsGPT-MCP",
"required": False,
},
"headers": {
"type": "object",
"description": "Custom headers to send with requests",
"required": False,
},
"timeout": {
"type": "integer",
"description": "Request timeout in seconds",
"default": 30,
"minimum": 1,
"maximum": 300,
"required": False,
},
"command": {
"type": "string",
"description": "Command to run for STDIO transport (e.g., 'python')",
"required": False,
},
"args": {
"type": "array",
"description": "Arguments for STDIO command",
"items": {"type": "string"},
"required": False,
},
}
class DocsGPTOAuth(OAuthClientProvider):
"""
Custom OAuth handler for DocsGPT that uses frontend redirect instead of browser.
"""
def __init__(
self,
mcp_url: str,
redirect_uri: str,
redis_client: Redis | None = None,
redis_prefix: str = "mcp_oauth:",
task_id: str = None,
scopes: str | list[str] | None = None,
client_name: str = "DocsGPT-MCP",
user_id=None,
db=None,
additional_client_metadata: dict[str, Any] | None = None,
):
"""
Initialize custom OAuth client provider for DocsGPT.
Args:
mcp_url: Full URL to the MCP endpoint
redirect_uri: Custom redirect URI for DocsGPT frontend
redis_client: Redis client for storing auth state
redis_prefix: Prefix for Redis keys
task_id: Task ID for tracking auth status
scopes: OAuth scopes to request
client_name: Name for this client during registration
user_id: User ID for token storage
db: Database instance for token storage
additional_client_metadata: Extra fields for OAuthClientMetadata
"""
self.redirect_uri = redirect_uri
self.redis_client = redis_client
self.redis_prefix = redis_prefix
self.task_id = task_id
self.user_id = user_id
self.db = db
parsed_url = urlparse(mcp_url)
self.server_base_url = f"{parsed_url.scheme}://{parsed_url.netloc}"
if isinstance(scopes, list):
scopes = " ".join(scopes)
client_metadata = OAuthClientMetadata(
client_name=client_name,
redirect_uris=[AnyHttpUrl(redirect_uri)],
grant_types=["authorization_code", "refresh_token"],
response_types=["code"],
scope=scopes,
**(additional_client_metadata or {}),
)
storage = DBTokenStorage(
server_url=self.server_base_url, user_id=self.user_id, db_client=self.db
)
super().__init__(
server_url=self.server_base_url,
client_metadata=client_metadata,
storage=storage,
redirect_handler=self.redirect_handler,
callback_handler=self.callback_handler,
)
self.auth_url = None
self.extracted_state = None
def _process_auth_url(self, authorization_url: str) -> tuple[str, str]:
"""Process authorization URL to extract state"""
try:
parsed_url = urlparse(authorization_url)
query_params = parse_qs(parsed_url.query)
state_params = query_params.get("state", [])
if state_params:
state = state_params[0]
else:
raise ValueError("No state in auth URL")
return authorization_url, state
except Exception as e:
raise Exception(f"Failed to process auth URL: {e}")
async def redirect_handler(self, authorization_url: str) -> None:
"""Store auth URL and state in Redis for frontend to use."""
auth_url, state = self._process_auth_url(authorization_url)
logging.info(
"[DocsGPTOAuth] Processed auth_url: %s, state: %s", auth_url, state
)
self.auth_url = auth_url
self.extracted_state = state
if self.redis_client and self.extracted_state:
key = f"{self.redis_prefix}auth_url:{self.extracted_state}"
self.redis_client.setex(key, 600, auth_url)
logging.info("[DocsGPTOAuth] Stored auth_url in Redis: %s", key)
if self.task_id:
status_key = f"mcp_oauth_status:{self.task_id}"
status_data = {
"status": "requires_redirect",
"message": "OAuth authorization required",
"authorization_url": self.auth_url,
"state": self.extracted_state,
"requires_oauth": True,
"task_id": self.task_id,
}
self.redis_client.setex(status_key, 600, json.dumps(status_data))
async def callback_handler(self) -> tuple[str, str | None]:
"""Wait for auth code from Redis using the state value."""
if not self.redis_client or not self.extracted_state:
raise Exception("Redis client or state not configured for OAuth")
poll_interval = 1
max_wait_time = 300
code_key = f"{self.redis_prefix}code:{self.extracted_state}"
if self.task_id:
status_key = f"mcp_oauth_status:{self.task_id}"
status_data = {
"status": "awaiting_callback",
"message": "Waiting for OAuth callback...",
"authorization_url": self.auth_url,
"state": self.extracted_state,
"requires_oauth": True,
"task_id": self.task_id,
}
self.redis_client.setex(status_key, 600, json.dumps(status_data))
start_time = time.time()
while time.time() - start_time < max_wait_time:
code_data = self.redis_client.get(code_key)
if code_data:
code = code_data.decode()
returned_state = self.extracted_state
self.redis_client.delete(code_key)
self.redis_client.delete(
f"{self.redis_prefix}auth_url:{self.extracted_state}"
)
self.redis_client.delete(
f"{self.redis_prefix}state:{self.extracted_state}"
)
if self.task_id:
status_data = {
"status": "callback_received",
"message": "OAuth callback received, completing authentication...",
"task_id": self.task_id,
}
self.redis_client.setex(status_key, 600, json.dumps(status_data))
return code, returned_state
error_key = f"{self.redis_prefix}error:{self.extracted_state}"
error_data = self.redis_client.get(error_key)
if error_data:
error_msg = error_data.decode()
self.redis_client.delete(error_key)
self.redis_client.delete(
f"{self.redis_prefix}auth_url:{self.extracted_state}"
)
self.redis_client.delete(
f"{self.redis_prefix}state:{self.extracted_state}"
)
raise Exception(f"OAuth error: {error_msg}")
await asyncio.sleep(poll_interval)
self.redis_client.delete(f"{self.redis_prefix}auth_url:{self.extracted_state}")
self.redis_client.delete(f"{self.redis_prefix}state:{self.extracted_state}")
raise Exception("OAuth callback timeout: no code received within 5 minutes")
class DBTokenStorage(TokenStorage):
def __init__(self, server_url: str, user_id: str, db_client):
self.server_url = server_url
self.user_id = user_id
self.db_client = db_client
self.collection = db_client["connector_sessions"]
@staticmethod
def get_base_url(url: str) -> str:
parsed = urlparse(url)
return f"{parsed.scheme}://{parsed.netloc}"
def get_db_key(self) -> dict:
return {
"server_url": self.get_base_url(self.server_url),
"user_id": self.user_id,
}
async def get_tokens(self) -> OAuthToken | None:
doc = await asyncio.to_thread(self.collection.find_one, self.get_db_key())
if not doc or "tokens" not in doc:
return None
try:
tokens = OAuthToken.model_validate(doc["tokens"])
return tokens
except ValidationError as e:
logging.error(f"Could not load tokens: {e}")
return None
async def set_tokens(self, tokens: OAuthToken) -> None:
await asyncio.to_thread(
self.collection.update_one,
self.get_db_key(),
{"$set": {"tokens": tokens.model_dump()}},
True,
)
logging.info(f"Saved tokens for {self.get_base_url(self.server_url)}")
async def get_client_info(self) -> OAuthClientInformationFull | None:
doc = await asyncio.to_thread(self.collection.find_one, self.get_db_key())
if not doc or "client_info" not in doc:
return None
try:
client_info = OAuthClientInformationFull.model_validate(doc["client_info"])
tokens = await self.get_tokens()
if tokens is None:
logging.debug(
"No tokens found, clearing client info to force fresh registration."
)
await asyncio.to_thread(
self.collection.update_one,
self.get_db_key(),
{"$unset": {"client_info": ""}},
)
return None
return client_info
except ValidationError as e:
logging.error(f"Could not load client info: {e}")
return None
def _serialize_client_info(self, info: dict) -> dict:
if "redirect_uris" in info and isinstance(info["redirect_uris"], list):
info["redirect_uris"] = [str(u) for u in info["redirect_uris"]]
return info
async def set_client_info(self, client_info: OAuthClientInformationFull) -> None:
serialized_info = self._serialize_client_info(client_info.model_dump())
await asyncio.to_thread(
self.collection.update_one,
self.get_db_key(),
{"$set": {"client_info": serialized_info}},
True,
)
logging.info(f"Saved client info for {self.get_base_url(self.server_url)}")
async def clear(self) -> None:
await asyncio.to_thread(self.collection.delete_one, self.get_db_key())
logging.info(f"Cleared OAuth cache for {self.get_base_url(self.server_url)}")
@classmethod
async def clear_all(cls, db_client) -> None:
collection = db_client["connector_sessions"]
await asyncio.to_thread(collection.delete_many, {})
logging.info("Cleared all OAuth client cache data.")
class MCPOAuthManager:
"""Manager for handling MCP OAuth callbacks."""
def __init__(self, redis_client: Redis | None, redis_prefix: str = "mcp_oauth:"):
self.redis_client = redis_client
self.redis_prefix = redis_prefix
def handle_oauth_callback(
self, state: str, code: str, error: Optional[str] = None
) -> bool:
"""
Handle OAuth callback from provider.
Args:
state: The state parameter from OAuth callback
code: The authorization code from OAuth callback
error: Error message if OAuth failed
Returns:
True if successful, False otherwise
"""
try:
if not self.redis_client or not state:
raise Exception("Redis client or state not provided")
if error:
error_key = f"{self.redis_prefix}error:{state}"
self.redis_client.setex(error_key, 300, error)
raise Exception(f"OAuth error received: {error}")
code_key = f"{self.redis_prefix}code:{state}"
self.redis_client.setex(code_key, 300, code)
state_key = f"{self.redis_prefix}state:{state}"
self.redis_client.setex(state_key, 300, "completed")
return True
except Exception as e:
logging.error(f"Error handling OAuth callback: {e}")
return False
def get_oauth_status(self, task_id: str) -> Dict[str, Any]:
"""Get current status of OAuth flow using provided task_id."""
if not task_id:
return {"status": "not_started", "message": "OAuth flow not started"}
return mcp_oauth_status_task(task_id)

View File

@@ -0,0 +1,546 @@
from datetime import datetime
from pathlib import Path
from typing import Any, Dict, List, Optional
import re
import uuid
from .base import Tool
from application.core.mongo_db import MongoDB
from application.core.settings import settings
class MemoryTool(Tool):
"""Memory
Stores and retrieves information across conversations through a memory file directory.
"""
def __init__(self, tool_config: Optional[Dict[str, Any]] = None, user_id: Optional[str] = None) -> None:
"""Initialize the tool.
Args:
tool_config: Optional tool configuration. Should include:
- tool_id: Unique identifier for this memory tool instance (from user_tools._id)
This ensures each user's tool configuration has isolated memories
user_id: The authenticated user's id (should come from decoded_token["sub"]).
"""
self.user_id: Optional[str] = user_id
# Get tool_id from configuration (passed from user_tools._id in production)
# In production, tool_id is the MongoDB ObjectId string from user_tools collection
if tool_config and "tool_id" in tool_config:
self.tool_id = tool_config["tool_id"]
elif user_id:
# Fallback for backward compatibility or testing
self.tool_id = f"default_{user_id}"
else:
# Last resort fallback (shouldn't happen in normal use)
self.tool_id = str(uuid.uuid4())
db = MongoDB.get_client()[settings.MONGO_DB_NAME]
self.collection = db["memories"]
# -----------------------------
# Action implementations
# -----------------------------
def execute_action(self, action_name: str, **kwargs: Any) -> str:
"""Execute an action by name.
Args:
action_name: One of view, create, str_replace, insert, delete, rename.
**kwargs: Parameters for the action.
Returns:
A human-readable string result.
"""
if not self.user_id:
return "Error: MemoryTool requires a valid user_id."
if action_name == "view":
return self._view(
kwargs.get("path", "/"),
kwargs.get("view_range")
)
if action_name == "create":
return self._create(
kwargs.get("path", ""),
kwargs.get("file_text", "")
)
if action_name == "str_replace":
return self._str_replace(
kwargs.get("path", ""),
kwargs.get("old_str", ""),
kwargs.get("new_str", "")
)
if action_name == "insert":
return self._insert(
kwargs.get("path", ""),
kwargs.get("insert_line", 1),
kwargs.get("insert_text", "")
)
if action_name == "delete":
return self._delete(kwargs.get("path", ""))
if action_name == "rename":
return self._rename(
kwargs.get("old_path", ""),
kwargs.get("new_path", "")
)
return f"Unknown action: {action_name}"
def get_actions_metadata(self) -> List[Dict[str, Any]]:
"""Return JSON metadata describing supported actions for tool schemas."""
return [
{
"name": "view",
"description": "Shows directory contents or file contents with optional line ranges.",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Path to file or directory (e.g., /notes.txt or /project/ or /)."
},
"view_range": {
"type": "array",
"items": {"type": "integer"},
"description": "Optional [start_line, end_line] to view specific lines (1-indexed)."
}
},
"required": ["path"]
},
},
{
"name": "create",
"description": "Create or overwrite a file.",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "File path to create (e.g., /notes.txt or /project/task.txt)."
},
"file_text": {
"type": "string",
"description": "Content to write to the file."
}
},
"required": ["path", "file_text"]
},
},
{
"name": "str_replace",
"description": "Replace text in a file.",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "File path (e.g., /notes.txt)."
},
"old_str": {
"type": "string",
"description": "String to find."
},
"new_str": {
"type": "string",
"description": "String to replace with."
}
},
"required": ["path", "old_str", "new_str"]
},
},
{
"name": "insert",
"description": "Insert text at a specific line in a file.",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "File path (e.g., /notes.txt)."
},
"insert_line": {
"type": "integer",
"description": "Line number to insert at (1-indexed)."
},
"insert_text": {
"type": "string",
"description": "Text to insert."
}
},
"required": ["path", "insert_line", "insert_text"]
},
},
{
"name": "delete",
"description": "Delete a file or directory.",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Path to delete (e.g., /notes.txt or /project/)."
}
},
"required": ["path"]
},
},
{
"name": "rename",
"description": "Rename or move a file/directory.",
"parameters": {
"type": "object",
"properties": {
"old_path": {
"type": "string",
"description": "Current path (e.g., /old.txt)."
},
"new_path": {
"type": "string",
"description": "New path (e.g., /new.txt)."
}
},
"required": ["old_path", "new_path"]
},
},
]
def get_config_requirements(self) -> Dict[str, Any]:
"""Return configuration requirements."""
return {}
# -----------------------------
# Path validation
# -----------------------------
def _validate_path(self, path: str) -> Optional[str]:
"""Validate and normalize path.
Args:
path: User-provided path.
Returns:
Normalized path or None if invalid.
"""
if not path:
return None
# Remove any leading/trailing whitespace
path = path.strip()
# Preserve whether path ends with / (indicates directory)
is_directory = path.endswith("/")
# Ensure path starts with / for consistency
if not path.startswith("/"):
path = "/" + path
# Check for directory traversal patterns
if ".." in path or path.count("//") > 0:
return None
# Normalize the path
try:
# Convert to Path object and resolve to canonical form
normalized = str(Path(path).as_posix())
# Ensure it still starts with /
if not normalized.startswith("/"):
return None
# Preserve trailing slash for directories
if is_directory and not normalized.endswith("/") and normalized != "/":
normalized = normalized + "/"
return normalized
except Exception:
return None
# -----------------------------
# Internal helpers
# -----------------------------
def _view(self, path: str, view_range: Optional[List[int]] = None) -> str:
"""View directory contents or file contents."""
validated_path = self._validate_path(path)
if not validated_path:
return "Error: Invalid path."
# Check if viewing directory (ends with / or is root)
if validated_path == "/" or validated_path.endswith("/"):
return self._view_directory(validated_path)
# Otherwise view file
return self._view_file(validated_path, view_range)
def _view_directory(self, path: str) -> str:
"""List files in a directory."""
# Ensure path ends with / for proper prefix matching
search_path = path if path.endswith("/") else path + "/"
# Find all files that start with this directory path
query = {
"user_id": self.user_id,
"tool_id": self.tool_id,
"path": {"$regex": f"^{re.escape(search_path)}"}
}
docs = list(self.collection.find(query, {"path": 1}))
if not docs:
return f"Directory: {path}\n(empty)"
# Extract filenames relative to the directory
files = []
for doc in docs:
file_path = doc["path"]
# Remove the directory prefix
if file_path.startswith(search_path):
relative = file_path[len(search_path):]
if relative:
files.append(relative)
files.sort()
file_list = "\n".join(f"- {f}" for f in files)
return f"Directory: {path}\n{file_list}"
def _view_file(self, path: str, view_range: Optional[List[int]] = None) -> str:
"""View file contents with optional line range."""
doc = self.collection.find_one({"user_id": self.user_id, "tool_id": self.tool_id, "path": path})
if not doc or not doc.get("content"):
return f"Error: File not found: {path}"
content = str(doc["content"])
# Apply view_range if specified
if view_range and len(view_range) == 2:
lines = content.split("\n")
start, end = view_range
# Convert to 0-indexed
start_idx = max(0, start - 1)
end_idx = min(len(lines), end)
if start_idx >= len(lines):
return f"Error: Line range out of bounds. File has {len(lines)} lines."
selected_lines = lines[start_idx:end_idx]
# Add line numbers (enumerate with 1-based start)
numbered_lines = [f"{i}: {line}" for i, line in enumerate(selected_lines, start=start)]
return "\n".join(numbered_lines)
return content
def _create(self, path: str, file_text: str) -> str:
"""Create or overwrite a file."""
validated_path = self._validate_path(path)
if not validated_path:
return "Error: Invalid path."
if validated_path == "/" or validated_path.endswith("/"):
return "Error: Cannot create a file at directory path."
self.collection.update_one(
{"user_id": self.user_id, "tool_id": self.tool_id, "path": validated_path},
{
"$set": {
"content": file_text,
"updated_at": datetime.now()
}
},
upsert=True
)
return f"File created: {validated_path}"
def _str_replace(self, path: str, old_str: str, new_str: str) -> str:
"""Replace text in a file."""
validated_path = self._validate_path(path)
if not validated_path:
return "Error: Invalid path."
if not old_str:
return "Error: old_str is required."
doc = self.collection.find_one({"user_id": self.user_id, "tool_id": self.tool_id, "path": validated_path})
if not doc or not doc.get("content"):
return f"Error: File not found: {validated_path}"
current_content = str(doc["content"])
# Check if old_str exists (case-insensitive)
if old_str.lower() not in current_content.lower():
return f"Error: String '{old_str}' not found in file."
# Replace the string (case-insensitive)
import re as regex_module
updated_content = regex_module.sub(regex_module.escape(old_str), new_str, current_content, flags=regex_module.IGNORECASE)
self.collection.update_one(
{"user_id": self.user_id, "tool_id": self.tool_id, "path": validated_path},
{
"$set": {
"content": updated_content,
"updated_at": datetime.now()
}
}
)
return f"File updated: {validated_path}"
def _insert(self, path: str, insert_line: int, insert_text: str) -> str:
"""Insert text at a specific line."""
validated_path = self._validate_path(path)
if not validated_path:
return "Error: Invalid path."
if not insert_text:
return "Error: insert_text is required."
doc = self.collection.find_one({"user_id": self.user_id, "tool_id": self.tool_id, "path": validated_path})
if not doc or not doc.get("content"):
return f"Error: File not found: {validated_path}"
current_content = str(doc["content"])
lines = current_content.split("\n")
# Convert to 0-indexed
index = insert_line - 1
if index < 0 or index > len(lines):
return f"Error: Invalid line number. File has {len(lines)} lines."
lines.insert(index, insert_text)
updated_content = "\n".join(lines)
self.collection.update_one(
{"user_id": self.user_id, "tool_id": self.tool_id, "path": validated_path},
{
"$set": {
"content": updated_content,
"updated_at": datetime.now()
}
}
)
return f"Text inserted at line {insert_line} in {validated_path}"
def _delete(self, path: str) -> str:
"""Delete a file or directory."""
validated_path = self._validate_path(path)
if not validated_path:
return "Error: Invalid path."
if validated_path == "/":
# Delete all files for this user and tool
result = self.collection.delete_many({"user_id": self.user_id, "tool_id": self.tool_id})
return f"Deleted {result.deleted_count} file(s) from memory."
# Check if it's a directory (ends with /)
if validated_path.endswith("/"):
# Delete all files in directory
result = self.collection.delete_many({
"user_id": self.user_id,
"tool_id": self.tool_id,
"path": {"$regex": f"^{re.escape(validated_path)}"}
})
return f"Deleted directory and {result.deleted_count} file(s)."
# Try to delete as directory first (without trailing slash)
# Check if any files start with this path + /
search_path = validated_path + "/"
directory_result = self.collection.delete_many({
"user_id": self.user_id,
"tool_id": self.tool_id,
"path": {"$regex": f"^{re.escape(search_path)}"}
})
if directory_result.deleted_count > 0:
return f"Deleted directory and {directory_result.deleted_count} file(s)."
# Delete single file
result = self.collection.delete_one({
"user_id": self.user_id,
"tool_id": self.tool_id,
"path": validated_path
})
if result.deleted_count:
return f"Deleted: {validated_path}"
return f"Error: File not found: {validated_path}"
def _rename(self, old_path: str, new_path: str) -> str:
"""Rename or move a file/directory."""
validated_old = self._validate_path(old_path)
validated_new = self._validate_path(new_path)
if not validated_old or not validated_new:
return "Error: Invalid path."
if validated_old == "/" or validated_new == "/":
return "Error: Cannot rename root directory."
# Check if renaming a directory
if validated_old.endswith("/"):
# Ensure validated_new also ends with / for proper path replacement
if not validated_new.endswith("/"):
validated_new = validated_new + "/"
# Find all files in the old directory
docs = list(self.collection.find({
"user_id": self.user_id,
"tool_id": self.tool_id,
"path": {"$regex": f"^{re.escape(validated_old)}"}
}))
if not docs:
return f"Error: Directory not found: {validated_old}"
# Update paths for all files
for doc in docs:
old_file_path = doc["path"]
new_file_path = old_file_path.replace(validated_old, validated_new, 1)
self.collection.update_one(
{"_id": doc["_id"]},
{"$set": {"path": new_file_path, "updated_at": datetime.now()}}
)
return f"Renamed directory: {validated_old} -> {validated_new} ({len(docs)} files)"
# Rename single file
doc = self.collection.find_one({
"user_id": self.user_id,
"tool_id": self.tool_id,
"path": validated_old
})
if not doc:
return f"Error: File not found: {validated_old}"
# Check if new path already exists
existing = self.collection.find_one({
"user_id": self.user_id,
"tool_id": self.tool_id,
"path": validated_new
})
if existing:
return f"Error: File already exists at {validated_new}"
# Delete the old document and create a new one with the new path
self.collection.delete_one({"user_id": self.user_id, "tool_id": self.tool_id, "path": validated_old})
self.collection.insert_one({
"user_id": self.user_id,
"tool_id": self.tool_id,
"path": validated_new,
"content": doc.get("content", ""),
"updated_at": datetime.now()
})
return f"Renamed: {validated_old} -> {validated_new}"

View File

@@ -0,0 +1,199 @@
from datetime import datetime
from typing import Any, Dict, List, Optional
import uuid
from .base import Tool
from application.core.mongo_db import MongoDB
from application.core.settings import settings
class NotesTool(Tool):
"""Notepad
Single note. Supports viewing, overwriting, string replacement.
"""
def __init__(self, tool_config: Optional[Dict[str, Any]] = None, user_id: Optional[str] = None) -> None:
"""Initialize the tool.
Args:
tool_config: Optional tool configuration. Should include:
- tool_id: Unique identifier for this notes tool instance (from user_tools._id)
This ensures each user's tool configuration has isolated notes
user_id: The authenticated user's id (should come from decoded_token["sub"]).
"""
self.user_id: Optional[str] = user_id
# Get tool_id from configuration (passed from user_tools._id in production)
# In production, tool_id is the MongoDB ObjectId string from user_tools collection
if tool_config and "tool_id" in tool_config:
self.tool_id = tool_config["tool_id"]
elif user_id:
# Fallback for backward compatibility or testing
self.tool_id = f"default_{user_id}"
else:
# Last resort fallback (shouldn't happen in normal use)
self.tool_id = str(uuid.uuid4())
db = MongoDB.get_client()[settings.MONGO_DB_NAME]
self.collection = db["notes"]
# -----------------------------
# Action implementations
# -----------------------------
def execute_action(self, action_name: str, **kwargs: Any) -> str:
"""Execute an action by name.
Args:
action_name: One of view, overwrite, str_replace, insert, delete.
**kwargs: Parameters for the action.
Returns:
A human-readable string result.
"""
if not self.user_id:
return "Error: NotesTool requires a valid user_id."
if action_name == "view":
return self._get_note()
if action_name == "overwrite":
return self._overwrite_note(kwargs.get("text", ""))
if action_name == "str_replace":
return self._str_replace(kwargs.get("old_str", ""), kwargs.get("new_str", ""))
if action_name == "insert":
return self._insert(kwargs.get("line_number", 1), kwargs.get("text", ""))
if action_name == "delete":
return self._delete_note()
return f"Unknown action: {action_name}"
def get_actions_metadata(self) -> List[Dict[str, Any]]:
"""Return JSON metadata describing supported actions for tool schemas."""
return [
{
"name": "view",
"description": "Retrieve the user's note.",
"parameters": {"type": "object", "properties": {}},
},
{
"name": "overwrite",
"description": "Replace the entire note content (creates if doesn't exist).",
"parameters": {
"type": "object",
"properties": {
"text": {"type": "string", "description": "New note content."}
},
"required": ["text"],
},
},
{
"name": "str_replace",
"description": "Replace occurrences of old_str with new_str in the note.",
"parameters": {
"type": "object",
"properties": {
"old_str": {"type": "string", "description": "String to find."},
"new_str": {"type": "string", "description": "String to replace with."}
},
"required": ["old_str", "new_str"],
},
},
{
"name": "insert",
"description": "Insert text at the specified line number (1-indexed).",
"parameters": {
"type": "object",
"properties": {
"line_number": {"type": "integer", "description": "Line number to insert at (1-indexed)."},
"text": {"type": "string", "description": "Text to insert."}
},
"required": ["line_number", "text"],
},
},
{
"name": "delete",
"description": "Delete the user's note.",
"parameters": {"type": "object", "properties": {}},
},
]
def get_config_requirements(self) -> Dict[str, Any]:
"""Return configuration requirements (none for now)."""
return {}
# -----------------------------
# Internal helpers (single-note)
# -----------------------------
def _get_note(self) -> str:
doc = self.collection.find_one({"user_id": self.user_id, "tool_id": self.tool_id})
if not doc or not doc.get("note"):
return "No note found."
return str(doc["note"])
def _overwrite_note(self, content: str) -> str:
content = (content or "").strip()
if not content:
return "Note content required."
self.collection.update_one(
{"user_id": self.user_id, "tool_id": self.tool_id},
{"$set": {"note": content, "updated_at": datetime.utcnow()}},
upsert=True, # ✅ create if missing
)
return "Note saved."
def _str_replace(self, old_str: str, new_str: str) -> str:
if not old_str:
return "old_str is required."
doc = self.collection.find_one({"user_id": self.user_id, "tool_id": self.tool_id})
if not doc or not doc.get("note"):
return "No note found."
current_note = str(doc["note"])
# Case-insensitive search
if old_str.lower() not in current_note.lower():
return f"String '{old_str}' not found in note."
# Case-insensitive replacement
import re
updated_note = re.sub(re.escape(old_str), new_str, current_note, flags=re.IGNORECASE)
self.collection.update_one(
{"user_id": self.user_id, "tool_id": self.tool_id},
{"$set": {"note": updated_note, "updated_at": datetime.utcnow()}},
)
return "Note updated."
def _insert(self, line_number: int, text: str) -> str:
if not text:
return "Text is required."
doc = self.collection.find_one({"user_id": self.user_id, "tool_id": self.tool_id})
if not doc or not doc.get("note"):
return "No note found."
current_note = str(doc["note"])
lines = current_note.split("\n")
# Convert to 0-indexed and validate
index = line_number - 1
if index < 0 or index > len(lines):
return f"Invalid line number. Note has {len(lines)} lines."
lines.insert(index, text)
updated_note = "\n".join(lines)
self.collection.update_one(
{"user_id": self.user_id, "tool_id": self.tool_id},
{"$set": {"note": updated_note, "updated_at": datetime.utcnow()}},
)
return "Text inserted."
def _delete_note(self) -> str:
res = self.collection.delete_one({"user_id": self.user_id, "tool_id": self.tool_id})
return "Note deleted." if res.deleted_count else "No note found to delete."

View File

@@ -0,0 +1,127 @@
import requests
from application.agents.tools.base import Tool
class NtfyTool(Tool):
"""
Ntfy Tool
A tool for sending notifications to ntfy topics on a specified server.
"""
def __init__(self, config):
"""
Initialize the NtfyTool with configuration.
Args:
config (dict): Configuration dictionary containing the access token.
"""
self.config = config
self.token = config.get("token", "")
def execute_action(self, action_name, **kwargs):
"""
Execute the specified action with given parameters.
Args:
action_name (str): Name of the action to execute.
**kwargs: Parameters for the action, including server_url.
Returns:
dict: Result of the action with status code and message.
Raises:
ValueError: If the action name is unknown.
"""
actions = {
"ntfy_send_message": self._send_message,
}
if action_name in actions:
return actions[action_name](**kwargs)
else:
raise ValueError(f"Unknown action: {action_name}")
def _send_message(self, server_url, message, topic, title=None, priority=None):
"""
Send a message to an ntfy topic on the specified server.
Args:
server_url (str): Base URL of the ntfy server (e.g., https://ntfy.sh).
message (str): The message text to send.
topic (str): The topic to send the message to.
title (str, optional): Title of the notification.
priority (int, optional): Priority of the notification (1-5).
Returns:
dict: Response with status code and a confirmation message.
Raises:
ValueError: If priority is not an integer between 1 and 5.
"""
url = f"{server_url.rstrip('/')}/{topic}"
headers = {}
if title:
headers["X-Title"] = title
if priority:
try:
priority = int(priority)
except (ValueError, TypeError):
raise ValueError("Priority must be convertible to an integer")
if priority < 1 or priority > 5:
raise ValueError("Priority must be an integer between 1 and 5")
headers["X-Priority"] = str(priority)
if self.token:
headers["Authorization"] = f"Basic {self.token}"
data = message.encode("utf-8")
response = requests.post(url, headers=headers, data=data)
return {"status_code": response.status_code, "message": "Message sent"}
def get_actions_metadata(self):
"""
Provide metadata about available actions.
Returns:
list: List of dictionaries describing each action.
"""
return [
{
"name": "ntfy_send_message",
"description": "Send a notification to an ntfy topic",
"parameters": {
"type": "object",
"properties": {
"server_url": {
"type": "string",
"description": "Base URL of the ntfy server",
},
"message": {
"type": "string",
"description": "Text to send in the notification",
},
"topic": {
"type": "string",
"description": "Topic to send the notification to",
},
"title": {
"type": "string",
"description": "Title of the notification (optional)",
},
"priority": {
"type": "integer",
"description": "Priority of the notification (1-5, optional)",
},
},
"required": ["server_url", "message", "topic"],
"additionalProperties": False,
},
},
]
def get_config_requirements(self):
"""
Specify the configuration requirements.
Returns:
dict: Dictionary describing required config parameters.
"""
return {
"token": {"type": "string", "description": "Access token for authentication"},
}

View File

@@ -0,0 +1,163 @@
import psycopg2
from application.agents.tools.base import Tool
class PostgresTool(Tool):
"""
PostgreSQL Database Tool
A tool for connecting to a PostgreSQL database using a connection string,
executing SQL queries, and retrieving schema information.
"""
def __init__(self, config):
self.config = config
self.connection_string = config.get("token", "")
def execute_action(self, action_name, **kwargs):
actions = {
"postgres_execute_sql": self._execute_sql,
"postgres_get_schema": self._get_schema,
}
if action_name in actions:
return actions[action_name](**kwargs)
else:
raise ValueError(f"Unknown action: {action_name}")
def _execute_sql(self, sql_query):
"""
Executes an SQL query against the PostgreSQL database using a connection string.
"""
conn = None # Initialize conn to None for error handling
try:
conn = psycopg2.connect(self.connection_string)
cur = conn.cursor()
cur.execute(sql_query)
conn.commit()
if sql_query.strip().lower().startswith("select"):
column_names = [desc[0] for desc in cur.description] if cur.description else []
results = []
rows = cur.fetchall()
for row in rows:
results.append(dict(zip(column_names, row)))
response_data = {"data": results, "column_names": column_names}
else:
row_count = cur.rowcount
response_data = {"message": f"Query executed successfully, {row_count} rows affected."}
cur.close()
return {
"status_code": 200,
"message": "SQL query executed successfully.",
"response_data": response_data,
}
except psycopg2.Error as e:
error_message = f"Database error: {e}"
print(f"Database error: {e}")
return {
"status_code": 500,
"message": "Failed to execute SQL query.",
"error": error_message,
}
finally:
if conn: # Ensure connection is closed even if errors occur
conn.close()
def _get_schema(self, db_name):
"""
Retrieves the schema of the PostgreSQL database using a connection string.
"""
conn = None # Initialize conn to None for error handling
try:
conn = psycopg2.connect(self.connection_string)
cur = conn.cursor()
cur.execute("""
SELECT
table_name,
column_name,
data_type,
column_default,
is_nullable
FROM
information_schema.columns
WHERE
table_schema = 'public'
ORDER BY
table_name,
ordinal_position;
""")
schema_data = {}
for row in cur.fetchall():
table_name, column_name, data_type, column_default, is_nullable = row
if table_name not in schema_data:
schema_data[table_name] = []
schema_data[table_name].append({
"column_name": column_name,
"data_type": data_type,
"column_default": column_default,
"is_nullable": is_nullable
})
cur.close()
return {
"status_code": 200,
"message": "Database schema retrieved successfully.",
"schema": schema_data,
}
except psycopg2.Error as e:
error_message = f"Database error: {e}"
print(f"Database error: {e}")
return {
"status_code": 500,
"message": "Failed to retrieve database schema.",
"error": error_message,
}
finally:
if conn: # Ensure connection is closed even if errors occur
conn.close()
def get_actions_metadata(self):
return [
{
"name": "postgres_execute_sql",
"description": "Execute an SQL query against the PostgreSQL database and return the results. Use this tool to interact with the database, e.g., retrieve specific data or perform updates. Only SELECT queries will return data, other queries will return execution status.",
"parameters": {
"type": "object",
"properties": {
"sql_query": {
"type": "string",
"description": "The SQL query to execute.",
},
},
"required": ["sql_query"],
"additionalProperties": False,
},
},
{
"name": "postgres_get_schema",
"description": "Retrieve the schema of the PostgreSQL database, including tables and their columns. Use this to understand the database structure before executing queries. db_name is 'default' if not provided.",
"parameters": {
"type": "object",
"properties": {
"db_name": {
"type": "string",
"description": "The name of the database to retrieve the schema for.",
},
},
"required": ["db_name"],
"additionalProperties": False,
},
},
]
def get_config_requirements(self):
return {
"token": {
"type": "string",
"description": "PostgreSQL database connection string (e.g., 'postgresql://user:password@host:port/dbname')",
},
}

View File

@@ -0,0 +1,83 @@
import requests
from markdownify import markdownify
from application.agents.tools.base import Tool
from urllib.parse import urlparse
class ReadWebpageTool(Tool):
"""
Read Webpage (browser)
A tool to fetch the HTML content of a URL and convert it to Markdown.
"""
def __init__(self, config=None):
"""
Initializes the tool.
:param config: Optional configuration dictionary. Not used by this tool.
"""
self.config = config
def execute_action(self, action_name: str, **kwargs) -> str:
"""
Executes the specified action. For this tool, the only action is 'read_webpage'.
:param action_name: The name of the action to execute. Should be 'read_webpage'.
:param kwargs: Keyword arguments, must include 'url'.
:return: The Markdown content of the webpage or an error message.
"""
if action_name != "read_webpage":
return f"Error: Unknown action '{action_name}'. This tool only supports 'read_webpage'."
url = kwargs.get("url")
if not url:
return "Error: URL parameter is missing."
# Ensure the URL has a scheme (if not, default to http)
parsed_url = urlparse(url)
if not parsed_url.scheme:
url = "http://" + url
try:
response = requests.get(url, timeout=10, headers={'User-Agent': 'DocsGPT-Agent/1.0'})
response.raise_for_status() # Raise an exception for HTTP errors (4xx or 5xx)
html_content = response.text
#soup = BeautifulSoup(html_content, 'html.parser')
markdown_content = markdownify(html_content, heading_style="ATX", newline_style="BACKSLASH")
return markdown_content
except requests.exceptions.RequestException as e:
return f"Error fetching URL {url}: {e}"
except Exception as e:
return f"Error processing URL {url}: {e}"
def get_actions_metadata(self):
"""
Returns metadata for the actions supported by this tool.
"""
return [
{
"name": "read_webpage",
"description": "Fetches the HTML content of a given URL and returns it as clean Markdown text. Input must be a valid URL.",
"parameters": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The fully qualified URL of the webpage to read (e.g., 'https://www.example.com').",
}
},
"required": ["url"],
"additionalProperties": False,
},
}
]
def get_config_requirements(self):
"""
Returns a dictionary describing the configuration requirements for the tool.
This tool does not require any specific configuration.
"""
return {}

View File

@@ -0,0 +1,86 @@
import requests
from application.agents.tools.base import Tool
class TelegramTool(Tool):
"""
Telegram Bot
A flexible Telegram tool for performing various actions (e.g., sending messages, images).
Requires a bot token and chat ID for configuration
"""
def __init__(self, config):
self.config = config
self.token = config.get("token", "")
def execute_action(self, action_name, **kwargs):
actions = {
"telegram_send_message": self._send_message,
"telegram_send_image": self._send_image,
}
if action_name in actions:
return actions[action_name](**kwargs)
else:
raise ValueError(f"Unknown action: {action_name}")
def _send_message(self, text, chat_id):
print(f"Sending message: {text}")
url = f"https://api.telegram.org/bot{self.token}/sendMessage"
payload = {"chat_id": chat_id, "text": text}
response = requests.post(url, data=payload)
return {"status_code": response.status_code, "message": "Message sent"}
def _send_image(self, image_url, chat_id):
print(f"Sending image: {image_url}")
url = f"https://api.telegram.org/bot{self.token}/sendPhoto"
payload = {"chat_id": chat_id, "photo": image_url}
response = requests.post(url, data=payload)
return {"status_code": response.status_code, "message": "Image sent"}
def get_actions_metadata(self):
return [
{
"name": "telegram_send_message",
"description": "Send a notification to Telegram chat",
"parameters": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Text to send in the notification",
},
"chat_id": {
"type": "string",
"description": "Chat ID to send the notification to",
},
},
"required": ["text"],
"additionalProperties": False,
},
},
{
"name": "telegram_send_image",
"description": "Send an image to the Telegram chat",
"parameters": {
"type": "object",
"properties": {
"image_url": {
"type": "string",
"description": "URL of the image to send",
},
"chat_id": {
"type": "string",
"description": "Chat ID to send the image to",
},
},
"required": ["image_url"],
"additionalProperties": False,
},
},
]
def get_config_requirements(self):
return {
"token": {"type": "string", "description": "Bot token for authentication"},
}

View File

@@ -0,0 +1,321 @@
from datetime import datetime
from typing import Any, Dict, List, Optional
import uuid
from .base import Tool
from application.core.mongo_db import MongoDB
from application.core.settings import settings
class TodoListTool(Tool):
"""Todo List
Manages todo items for users. Supports creating, viewing, updating, and deleting todos.
"""
def __init__(self, tool_config: Optional[Dict[str, Any]] = None, user_id: Optional[str] = None) -> None:
"""Initialize the tool.
Args:
tool_config: Optional tool configuration. Should include:
- tool_id: Unique identifier for this todo list tool instance (from user_tools._id)
This ensures each user's tool configuration has isolated todos
user_id: The authenticated user's id (should come from decoded_token["sub"]).
"""
self.user_id: Optional[str] = user_id
# Get tool_id from configuration (passed from user_tools._id in production)
# In production, tool_id is the MongoDB ObjectId string from user_tools collection
if tool_config and "tool_id" in tool_config:
self.tool_id = tool_config["tool_id"]
elif user_id:
# Fallback for backward compatibility or testing
self.tool_id = f"default_{user_id}"
else:
# Last resort fallback (shouldn't happen in normal use)
self.tool_id = str(uuid.uuid4())
db = MongoDB.get_client()[settings.MONGO_DB_NAME]
self.collection = db["todos"]
# -----------------------------
# Action implementations
# -----------------------------
def execute_action(self, action_name: str, **kwargs: Any) -> str:
"""Execute an action by name.
Args:
action_name: One of list, create, get, update, complete, delete.
**kwargs: Parameters for the action.
Returns:
A human-readable string result.
"""
if not self.user_id:
return "Error: TodoListTool requires a valid user_id."
if action_name == "list":
return self._list()
if action_name == "create":
return self._create(kwargs.get("title", ""))
if action_name == "get":
return self._get(kwargs.get("todo_id"))
if action_name == "update":
return self._update(
kwargs.get("todo_id"),
kwargs.get("title", "")
)
if action_name == "complete":
return self._complete(kwargs.get("todo_id"))
if action_name == "delete":
return self._delete(kwargs.get("todo_id"))
return f"Unknown action: {action_name}"
def get_actions_metadata(self) -> List[Dict[str, Any]]:
"""Return JSON metadata describing supported actions for tool schemas."""
return [
{
"name": "list",
"description": "List all todos for the user.",
"parameters": {"type": "object", "properties": {}},
},
{
"name": "create",
"description": "Create a new todo item.",
"parameters": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Title of the todo item."
}
},
"required": ["title"],
},
},
{
"name": "get",
"description": "Get a specific todo by ID.",
"parameters": {
"type": "object",
"properties": {
"todo_id": {
"type": "integer",
"description": "The ID of the todo to retrieve."
}
},
"required": ["todo_id"],
},
},
{
"name": "update",
"description": "Update a todo's title by ID.",
"parameters": {
"type": "object",
"properties": {
"todo_id": {
"type": "integer",
"description": "The ID of the todo to update."
},
"title": {
"type": "string",
"description": "The new title for the todo."
}
},
"required": ["todo_id", "title"],
},
},
{
"name": "complete",
"description": "Mark a todo as completed.",
"parameters": {
"type": "object",
"properties": {
"todo_id": {
"type": "integer",
"description": "The ID of the todo to mark as completed."
}
},
"required": ["todo_id"],
},
},
{
"name": "delete",
"description": "Delete a specific todo by ID.",
"parameters": {
"type": "object",
"properties": {
"todo_id": {
"type": "integer",
"description": "The ID of the todo to delete."
}
},
"required": ["todo_id"],
},
},
]
def get_config_requirements(self) -> Dict[str, Any]:
"""Return configuration requirements."""
return {}
# -----------------------------
# Internal helpers
# -----------------------------
def _coerce_todo_id(self, value: Optional[Any]) -> Optional[int]:
"""Convert todo identifiers to sequential integers."""
if value is None:
return None
if isinstance(value, int):
return value if value > 0 else None
if isinstance(value, str):
stripped = value.strip()
if stripped.isdigit():
numeric_value = int(stripped)
return numeric_value if numeric_value > 0 else None
return None
def _get_next_todo_id(self) -> int:
"""Get the next sequential todo_id for this user and tool.
Returns a simple integer (1, 2, 3, ...) scoped to this user/tool.
With 5-10 todos max, scanning is negligible.
"""
# Find all todos for this user/tool and get their IDs
todos = list(self.collection.find(
{"user_id": self.user_id, "tool_id": self.tool_id},
{"todo_id": 1}
))
# Find the maximum todo_id
max_id = 0
for todo in todos:
todo_id = self._coerce_todo_id(todo.get("todo_id"))
if todo_id is not None:
max_id = max(max_id, todo_id)
return max_id + 1
def _list(self) -> str:
"""List all todos for the user."""
cursor = self.collection.find({"user_id": self.user_id, "tool_id": self.tool_id})
todos = list(cursor)
if not todos:
return "No todos found."
result_lines = ["Todos:"]
for doc in todos:
todo_id = doc.get("todo_id")
title = doc.get("title", "Untitled")
status = doc.get("status", "open")
line = f"[{todo_id}] {title} ({status})"
result_lines.append(line)
return "\n".join(result_lines)
def _create(self, title: str) -> str:
"""Create a new todo item."""
title = (title or "").strip()
if not title:
return "Error: Title is required."
now = datetime.now()
todo_id = self._get_next_todo_id()
doc = {
"todo_id": todo_id,
"user_id": self.user_id,
"tool_id": self.tool_id,
"title": title,
"status": "open",
"created_at": now,
"updated_at": now,
}
self.collection.insert_one(doc)
return f"Todo created with ID {todo_id}: {title}"
def _get(self, todo_id: Optional[Any]) -> str:
"""Get a specific todo by ID."""
parsed_todo_id = self._coerce_todo_id(todo_id)
if parsed_todo_id is None:
return "Error: todo_id must be a positive integer."
doc = self.collection.find_one({
"user_id": self.user_id,
"tool_id": self.tool_id,
"todo_id": parsed_todo_id
})
if not doc:
return f"Error: Todo with ID {parsed_todo_id} not found."
title = doc.get("title", "Untitled")
status = doc.get("status", "open")
result = f"Todo [{parsed_todo_id}]:\nTitle: {title}\nStatus: {status}"
return result
def _update(self, todo_id: Optional[Any], title: str) -> str:
"""Update a todo's title by ID."""
parsed_todo_id = self._coerce_todo_id(todo_id)
if parsed_todo_id is None:
return "Error: todo_id must be a positive integer."
title = (title or "").strip()
if not title:
return "Error: Title is required."
result = self.collection.update_one(
{"user_id": self.user_id, "tool_id": self.tool_id, "todo_id": parsed_todo_id},
{"$set": {"title": title, "updated_at": datetime.now()}}
)
if result.matched_count == 0:
return f"Error: Todo with ID {parsed_todo_id} not found."
return f"Todo {parsed_todo_id} updated to: {title}"
def _complete(self, todo_id: Optional[Any]) -> str:
"""Mark a todo as completed."""
parsed_todo_id = self._coerce_todo_id(todo_id)
if parsed_todo_id is None:
return "Error: todo_id must be a positive integer."
result = self.collection.update_one(
{"user_id": self.user_id, "tool_id": self.tool_id, "todo_id": parsed_todo_id},
{"$set": {"status": "completed", "updated_at": datetime.now()}}
)
if result.matched_count == 0:
return f"Error: Todo with ID {parsed_todo_id} not found."
return f"Todo {parsed_todo_id} marked as completed."
def _delete(self, todo_id: Optional[Any]) -> str:
"""Delete a specific todo by ID."""
parsed_todo_id = self._coerce_todo_id(todo_id)
if parsed_todo_id is None:
return "Error: todo_id must be a positive integer."
result = self.collection.delete_one({
"user_id": self.user_id,
"tool_id": self.tool_id,
"todo_id": parsed_todo_id
})
if result.deleted_count == 0:
return f"Error: Todo with ID {parsed_todo_id} not found."
return f"Todo {parsed_todo_id} deleted."

View File

@@ -0,0 +1,69 @@
import json
import logging
logger = logging.getLogger(__name__)
class ToolActionParser:
def __init__(self, llm_type):
self.llm_type = llm_type
self.parsers = {
"OpenAILLM": self._parse_openai_llm,
"GoogleLLM": self._parse_google_llm,
}
def parse_args(self, call):
parser = self.parsers.get(self.llm_type, self._parse_openai_llm)
return parser(call)
def _parse_openai_llm(self, call):
try:
call_args = json.loads(call.arguments)
tool_parts = call.name.split("_")
# If the tool name doesn't contain an underscore, it's likely a hallucinated tool
if len(tool_parts) < 2:
logger.warning(
f"Invalid tool name format: {call.name}. Expected format: action_name_tool_id"
)
return None, None, None
tool_id = tool_parts[-1]
action_name = "_".join(tool_parts[:-1])
# Validate that tool_id looks like a numerical ID
if not tool_id.isdigit():
logger.warning(
f"Tool ID '{tool_id}' is not numerical. This might be a hallucinated tool call."
)
except (AttributeError, TypeError, json.JSONDecodeError) as e:
logger.error(f"Error parsing OpenAI LLM call: {e}")
return None, None, None
return tool_id, action_name, call_args
def _parse_google_llm(self, call):
try:
call_args = call.arguments
tool_parts = call.name.split("_")
# If the tool name doesn't contain an underscore, it's likely a hallucinated tool
if len(tool_parts) < 2:
logger.warning(
f"Invalid tool name format: {call.name}. Expected format: action_name_tool_id"
)
return None, None, None
tool_id = tool_parts[-1]
action_name = "_".join(tool_parts[:-1])
# Validate that tool_id looks like a numerical ID
if not tool_id.isdigit():
logger.warning(
f"Tool ID '{tool_id}' is not numerical. This might be a hallucinated tool call."
)
except (AttributeError, TypeError) as e:
logger.error(f"Error parsing Google LLM call: {e}")
return None, None, None
return tool_id, action_name, call_args

View File

@@ -0,0 +1,49 @@
import importlib
import inspect
import os
import pkgutil
from application.agents.tools.base import Tool
class ToolManager:
def __init__(self, config):
self.config = config
self.tools = {}
self.load_tools()
def load_tools(self):
tools_dir = os.path.join(os.path.dirname(__file__))
for finder, name, ispkg in pkgutil.iter_modules([tools_dir]):
if name == "base" or name.startswith("__"):
continue
module = importlib.import_module(f"application.agents.tools.{name}")
for member_name, obj in inspect.getmembers(module, inspect.isclass):
if issubclass(obj, Tool) and obj is not Tool:
tool_config = self.config.get(name, {})
self.tools[name] = obj(tool_config)
def load_tool(self, tool_name, tool_config, user_id=None):
self.config[tool_name] = tool_config
module = importlib.import_module(f"application.agents.tools.{tool_name}")
for member_name, obj in inspect.getmembers(module, inspect.isclass):
if issubclass(obj, Tool) and obj is not Tool:
if tool_name in {"mcp_tool", "notes", "memory", "todo_list"} and user_id:
return obj(tool_config, user_id)
else:
return obj(tool_config)
def execute_action(self, tool_name, action_name, user_id=None, **kwargs):
if tool_name not in self.tools:
raise ValueError(f"Tool '{tool_name}' not loaded")
if tool_name in {"mcp_tool", "memory", "todo_list"} and user_id:
tool_config = self.config.get(tool_name, {})
tool = self.load_tool(tool_name, tool_config, user_id)
return tool.execute_action(action_name, **kwargs)
return self.tools[tool_name].execute_action(action_name, **kwargs)
def get_all_actions_metadata(self):
metadata = []
for tool in self.tools.values():
metadata.extend(tool.get_actions_metadata())
return metadata

View File

@@ -0,0 +1,7 @@
from flask_restx import Api
api = Api(
version="1.0",
title="DocsGPT API",
description="API for DocsGPT",
)

View File

@@ -0,0 +1,19 @@
from flask import Blueprint
from application.api import api
from application.api.answer.routes.answer import AnswerResource
from application.api.answer.routes.base import answer_ns
from application.api.answer.routes.stream import StreamResource
answer = Blueprint("answer", __name__)
api.add_namespace(answer_ns)
def init_answer_routes():
api.add_resource(StreamResource, "/stream")
api.add_resource(AnswerResource, "/api/answer")
init_answer_routes()

View File

@@ -1,345 +0,0 @@
import asyncio
import os
from flask import Blueprint, request, Response
import json
import datetime
import logging
import traceback
from pymongo import MongoClient
from bson.objectid import ObjectId
from transformers import GPT2TokenizerFast
from application.core.settings import settings
from application.vectorstore.vector_creator import VectorCreator
from application.llm.llm_creator import LLMCreator
from application.error import bad_request
logger = logging.getLogger(__name__)
mongo = MongoClient(settings.MONGO_URI)
db = mongo["docsgpt"]
conversations_collection = db["conversations"]
vectors_collection = db["vectors"]
prompts_collection = db["prompts"]
answer = Blueprint('answer', __name__)
if settings.LLM_NAME == "gpt4":
gpt_model = 'gpt-4'
elif settings.LLM_NAME == "anthropic":
gpt_model = 'claude-2'
else:
gpt_model = 'gpt-3.5-turbo'
# load the prompts
current_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
with open(os.path.join(current_dir, "prompts", "chat_combine_default.txt"), "r") as f:
chat_combine_template = f.read()
with open(os.path.join(current_dir, "prompts", "chat_reduce_prompt.txt"), "r") as f:
chat_reduce_template = f.read()
with open(os.path.join(current_dir, "prompts", "chat_combine_creative.txt"), "r") as f:
chat_combine_creative = f.read()
with open(os.path.join(current_dir, "prompts", "chat_combine_strict.txt"), "r") as f:
chat_combine_strict = f.read()
api_key_set = settings.API_KEY is not None
embeddings_key_set = settings.EMBEDDINGS_KEY is not None
async def async_generate(chain, question, chat_history):
result = await chain.arun({"question": question, "chat_history": chat_history})
return result
def count_tokens(string):
tokenizer = GPT2TokenizerFast.from_pretrained('gpt2')
return len(tokenizer(string)['input_ids'])
def run_async_chain(chain, question, chat_history):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
result = {}
try:
answer = loop.run_until_complete(async_generate(chain, question, chat_history))
finally:
loop.close()
result["answer"] = answer
return result
def get_vectorstore(data):
if "active_docs" in data:
if data["active_docs"].split("/")[0] == "default":
vectorstore = ""
elif data["active_docs"].split("/")[0] == "local":
vectorstore = "indexes/" + data["active_docs"]
else:
vectorstore = "vectors/" + data["active_docs"]
if data["active_docs"] == "default":
vectorstore = ""
else:
vectorstore = ""
vectorstore = os.path.join("application", vectorstore)
return vectorstore
def is_azure_configured():
return settings.OPENAI_API_BASE and settings.OPENAI_API_VERSION and settings.AZURE_DEPLOYMENT_NAME
def complete_stream(question, docsearch, chat_history, api_key, prompt_id, conversation_id):
llm = LLMCreator.create_llm(settings.LLM_NAME, api_key=api_key)
if prompt_id == 'default':
prompt = chat_combine_template
elif prompt_id == 'creative':
prompt = chat_combine_creative
elif prompt_id == 'strict':
prompt = chat_combine_strict
else:
prompt = prompts_collection.find_one({"_id": ObjectId(prompt_id)})["content"]
docs = docsearch.search(question, k=2)
if settings.LLM_NAME == "llama.cpp":
docs = [docs[0]]
# join all page_content together with a newline
docs_together = "\n".join([doc.page_content for doc in docs])
p_chat_combine = prompt.replace("{summaries}", docs_together)
messages_combine = [{"role": "system", "content": p_chat_combine}]
source_log_docs = []
for doc in docs:
if doc.metadata:
data = json.dumps({"type": "source", "doc": doc.page_content, "metadata": doc.metadata})
source_log_docs.append({"title": doc.metadata['title'].split('/')[-1], "text": doc.page_content})
else:
data = json.dumps({"type": "source", "doc": doc.page_content})
source_log_docs.append({"title": doc.page_content, "text": doc.page_content})
yield f"data:{data}\n\n"
if len(chat_history) > 1:
tokens_current_history = 0
# count tokens in history
chat_history.reverse()
for i in chat_history:
if "prompt" in i and "response" in i:
tokens_batch = count_tokens(i["prompt"]) + count_tokens(i["response"])
if tokens_current_history + tokens_batch < settings.TOKENS_MAX_HISTORY:
tokens_current_history += tokens_batch
messages_combine.append({"role": "user", "content": i["prompt"]})
messages_combine.append({"role": "system", "content": i["response"]})
messages_combine.append({"role": "user", "content": question})
response_full = ""
completion = llm.gen_stream(model=gpt_model, engine=settings.AZURE_DEPLOYMENT_NAME,
messages=messages_combine)
for line in completion:
data = json.dumps({"answer": str(line)})
response_full += str(line)
yield f"data: {data}\n\n"
# save conversation to database
if conversation_id is not None:
conversations_collection.update_one(
{"_id": ObjectId(conversation_id)},
{"$push": {"queries": {"prompt": question, "response": response_full, "sources": source_log_docs}}},
)
else:
# create new conversation
# generate summary
messages_summary = [{"role": "assistant", "content": "Summarise following conversation in no more than 3 "
"words, respond ONLY with the summary, use the same "
"language as the system \n\nUser: " + question + "\n\n" +
"AI: " +
response_full},
{"role": "user", "content": "Summarise following conversation in no more than 3 words, "
"respond ONLY with the summary, use the same language as the "
"system"}]
completion = llm.gen(model=gpt_model, engine=settings.AZURE_DEPLOYMENT_NAME,
messages=messages_summary, max_tokens=30)
conversation_id = conversations_collection.insert_one(
{"user": "local",
"date": datetime.datetime.utcnow(),
"name": completion,
"queries": [{"prompt": question, "response": response_full, "sources": source_log_docs}]}
).inserted_id
# send data.type = "end" to indicate that the stream has ended as json
data = json.dumps({"type": "id", "id": str(conversation_id)})
yield f"data: {data}\n\n"
data = json.dumps({"type": "end"})
yield f"data: {data}\n\n"
@answer.route("/stream", methods=["POST"])
def stream():
data = request.get_json()
# get parameter from url question
question = data["question"]
history = data["history"]
# history to json object from string
history = json.loads(history)
conversation_id = data["conversation_id"]
if 'prompt_id' in data:
prompt_id = data["prompt_id"]
else:
prompt_id = 'default'
# check if active_docs is set
if not api_key_set:
api_key = data["api_key"]
else:
api_key = settings.API_KEY
if not embeddings_key_set:
embeddings_key = data["embeddings_key"]
else:
embeddings_key = settings.EMBEDDINGS_KEY
if "active_docs" in data:
vectorstore = get_vectorstore({"active_docs": data["active_docs"]})
else:
vectorstore = ""
docsearch = VectorCreator.create_vectorstore(settings.VECTOR_STORE, vectorstore, embeddings_key)
return Response(
complete_stream(question, docsearch,
chat_history=history, api_key=api_key,
prompt_id=prompt_id,
conversation_id=conversation_id), mimetype="text/event-stream"
)
@answer.route("/api/answer", methods=["POST"])
def api_answer():
data = request.get_json()
question = data["question"]
history = data["history"]
if "conversation_id" not in data:
conversation_id = None
else:
conversation_id = data["conversation_id"]
print("-" * 5)
if not api_key_set:
api_key = data["api_key"]
else:
api_key = settings.API_KEY
if not embeddings_key_set:
embeddings_key = data["embeddings_key"]
else:
embeddings_key = settings.EMBEDDINGS_KEY
if 'prompt_id' in data:
prompt_id = data["prompt_id"]
else:
prompt_id = 'default'
if prompt_id == 'default':
prompt = chat_combine_template
elif prompt_id == 'creative':
prompt = chat_combine_creative
elif prompt_id == 'strict':
prompt = chat_combine_strict
else:
prompt = prompts_collection.find_one({"_id": ObjectId(prompt_id)})["content"]
# use try and except to check for exception
try:
# check if the vectorstore is set
vectorstore = get_vectorstore(data)
# loading the index and the store and the prompt template
# Note if you have used other embeddings than OpenAI, you need to change the embeddings
docsearch = VectorCreator.create_vectorstore(settings.VECTOR_STORE, vectorstore, embeddings_key)
llm = LLMCreator.create_llm(settings.LLM_NAME, api_key=api_key)
docs = docsearch.search(question, k=2)
# join all page_content together with a newline
docs_together = "\n".join([doc.page_content for doc in docs])
p_chat_combine = prompt.replace("{summaries}", docs_together)
messages_combine = [{"role": "system", "content": p_chat_combine}]
source_log_docs = []
for doc in docs:
if doc.metadata:
source_log_docs.append({"title": doc.metadata['title'].split('/')[-1], "text": doc.page_content})
else:
source_log_docs.append({"title": doc.page_content, "text": doc.page_content})
# join all page_content together with a newline
if len(history) > 1:
tokens_current_history = 0
# count tokens in history
history.reverse()
for i in history:
if "prompt" in i and "response" in i:
tokens_batch = count_tokens(i["prompt"]) + count_tokens(i["response"])
if tokens_current_history + tokens_batch < settings.TOKENS_MAX_HISTORY:
tokens_current_history += tokens_batch
messages_combine.append({"role": "user", "content": i["prompt"]})
messages_combine.append({"role": "system", "content": i["response"]})
messages_combine.append({"role": "user", "content": question})
completion = llm.gen(model=gpt_model, engine=settings.AZURE_DEPLOYMENT_NAME,
messages=messages_combine)
result = {"answer": completion, "sources": source_log_docs}
logger.debug(result)
# generate conversationId
if conversation_id is not None:
conversations_collection.update_one(
{"_id": ObjectId(conversation_id)},
{"$push": {"queries": {"prompt": question,
"response": result["answer"], "sources": result['sources']}}},
)
else:
# create new conversation
# generate summary
messages_summary = [
{"role": "assistant", "content": "Summarise following conversation in no more than 3 words, "
"respond ONLY with the summary, use the same language as the system \n\n"
"User: " + question + "\n\n" + "AI: " + result["answer"]},
{"role": "user", "content": "Summarise following conversation in no more than 3 words, "
"respond ONLY with the summary, use the same language as the system"}
]
completion = llm.gen(
model=gpt_model,
engine=settings.AZURE_DEPLOYMENT_NAME,
messages=messages_summary,
max_tokens=30
)
conversation_id = conversations_collection.insert_one(
{"user": "local",
"date": datetime.datetime.utcnow(),
"name": completion,
"queries": [{"prompt": question, "response": result["answer"], "sources": source_log_docs}]}
).inserted_id
result["conversation_id"] = str(conversation_id)
# mock result
# result = {
# "answer": "The answer is 42",
# "sources": ["https://en.wikipedia.org/wiki/42_(number)", "https://en.wikipedia.org/wiki/42_(number)"]
# }
return result
except Exception as e:
# print whole traceback
traceback.print_exc()
print(str(e))
return bad_request(500, str(e))

View File

@@ -0,0 +1,137 @@
import logging
import traceback
from flask import make_response, request
from flask_restx import fields, Resource
from application.api import api
from application.api.answer.routes.base import answer_ns, BaseAnswerResource
from application.api.answer.services.stream_processor import StreamProcessor
logger = logging.getLogger(__name__)
@answer_ns.route("/api/answer")
class AnswerResource(Resource, BaseAnswerResource):
def __init__(self, *args, **kwargs):
Resource.__init__(self, *args, **kwargs)
BaseAnswerResource.__init__(self)
answer_model = answer_ns.model(
"AnswerModel",
{
"question": fields.String(
required=True, description="Question to be asked"
),
"history": fields.List(
fields.String,
required=False,
description="Conversation history (only for new conversations)",
),
"conversation_id": fields.String(
required=False,
description="Existing conversation ID (loads history)",
),
"prompt_id": fields.String(
required=False, default="default", description="Prompt ID"
),
"chunks": fields.Integer(
required=False, default=2, description="Number of chunks"
),
"token_limit": fields.Integer(required=False, description="Token limit"),
"retriever": fields.String(required=False, description="Retriever type"),
"api_key": fields.String(required=False, description="API key"),
"active_docs": fields.String(
required=False, description="Active documents"
),
"isNoneDoc": fields.Boolean(
required=False, description="Flag indicating if no document is used"
),
"save_conversation": fields.Boolean(
required=False,
default=True,
description="Whether to save the conversation",
),
"passthrough": fields.Raw(
required=False,
description="Dynamic parameters to inject into prompt template",
),
},
)
@api.expect(answer_model)
@api.doc(description="Provide a response based on the question and retriever")
def post(self):
data = request.get_json()
if error := self.validate_request(data):
return error
decoded_token = getattr(request, "decoded_token", None)
processor = StreamProcessor(data, decoded_token)
try:
processor.initialize()
if not processor.decoded_token:
return make_response({"error": "Unauthorized"}, 401)
docs_together, docs_list = processor.pre_fetch_docs(
data.get("question", "")
)
tools_data = processor.pre_fetch_tools()
agent = processor.create_agent(
docs_together=docs_together,
docs=docs_list,
tools_data=tools_data,
)
if error := self.check_usage(processor.agent_config):
return error
stream = self.complete_stream(
question=data["question"],
agent=agent,
conversation_id=processor.conversation_id,
user_api_key=processor.agent_config.get("user_api_key"),
decoded_token=processor.decoded_token,
isNoneDoc=data.get("isNoneDoc"),
index=None,
should_save_conversation=data.get("save_conversation", True),
)
stream_result = self.process_response_stream(stream)
if len(stream_result) == 7:
(
conversation_id,
response,
sources,
tool_calls,
thought,
error,
structured_info,
) = stream_result
else:
conversation_id, response, sources, tool_calls, thought, error = (
stream_result
)
structured_info = None
if error:
return make_response({"error": error}, 400)
result = {
"conversation_id": conversation_id,
"answer": response,
"sources": sources,
"tool_calls": tool_calls,
"thought": thought,
}
if structured_info:
result.update(structured_info)
except Exception as e:
logger.error(
f"/api/answer - error: {str(e)} - traceback: {traceback.format_exc()}",
extra={"error": str(e), "traceback": traceback.format_exc()},
)
return make_response({"error": str(e)}, 500)
return make_response(result, 200)

View File

@@ -0,0 +1,398 @@
import datetime
import json
import logging
from typing import Any, Dict, Generator, List, Optional
from flask import jsonify, make_response, Response
from flask_restx import Namespace
from application.api.answer.services.conversation_service import ConversationService
from application.core.mongo_db import MongoDB
from application.core.settings import settings
from application.llm.llm_creator import LLMCreator
from application.utils import check_required_fields, get_gpt_model
logger = logging.getLogger(__name__)
answer_ns = Namespace("answer", description="Answer related operations", path="/")
class BaseAnswerResource:
"""Shared base class for answer endpoints"""
def __init__(self):
mongo = MongoDB.get_client()
db = mongo[settings.MONGO_DB_NAME]
self.db = db
self.user_logs_collection = db["user_logs"]
self.gpt_model = get_gpt_model()
self.conversation_service = ConversationService()
def validate_request(
self, data: Dict[str, Any], require_conversation_id: bool = False
) -> Optional[Response]:
"""Common request validation"""
required_fields = ["question"]
if require_conversation_id:
required_fields.append("conversation_id")
if missing_fields := check_required_fields(data, required_fields):
return missing_fields
return None
def check_usage(self, agent_config: Dict) -> Optional[Response]:
"""Check if there is a usage limit and if it is exceeded
Args:
agent_config: The config dict of agent instance
Returns:
None or Response if either of limits exceeded.
"""
api_key = agent_config.get("user_api_key")
if not api_key:
return None
agents_collection = self.db["agents"]
agent = agents_collection.find_one({"key": api_key})
if not agent:
return make_response(
jsonify({"success": False, "message": "Invalid API key."}), 401
)
limited_token_mode_raw = agent.get("limited_token_mode", False)
limited_request_mode_raw = agent.get("limited_request_mode", False)
limited_token_mode = (
limited_token_mode_raw
if isinstance(limited_token_mode_raw, bool)
else limited_token_mode_raw == "True"
)
limited_request_mode = (
limited_request_mode_raw
if isinstance(limited_request_mode_raw, bool)
else limited_request_mode_raw == "True"
)
token_limit = int(
agent.get("token_limit", settings.DEFAULT_AGENT_LIMITS["token_limit"])
)
request_limit = int(
agent.get("request_limit", settings.DEFAULT_AGENT_LIMITS["request_limit"])
)
token_usage_collection = self.db["token_usage"]
end_date = datetime.datetime.now()
start_date = end_date - datetime.timedelta(hours=24)
match_query = {
"timestamp": {"$gte": start_date, "$lte": end_date},
"api_key": api_key,
}
if limited_token_mode:
token_pipeline = [
{"$match": match_query},
{
"$group": {
"_id": None,
"total_tokens": {
"$sum": {"$add": ["$prompt_tokens", "$generated_tokens"]}
},
}
},
]
token_result = list(token_usage_collection.aggregate(token_pipeline))
daily_token_usage = token_result[0]["total_tokens"] if token_result else 0
else:
daily_token_usage = 0
if limited_request_mode:
daily_request_usage = token_usage_collection.count_documents(match_query)
else:
daily_request_usage = 0
if not limited_token_mode and not limited_request_mode:
return None
token_exceeded = (
limited_token_mode and token_limit > 0 and daily_token_usage >= token_limit
)
request_exceeded = (
limited_request_mode
and request_limit > 0
and daily_request_usage >= request_limit
)
if token_exceeded or request_exceeded:
return make_response(
jsonify(
{
"success": False,
"message": "Exceeding usage limit, please try again later.",
}
),
429,
)
return None
def complete_stream(
self,
question: str,
agent: Any,
conversation_id: Optional[str],
user_api_key: Optional[str],
decoded_token: Dict[str, Any],
isNoneDoc: bool = False,
index: Optional[int] = None,
should_save_conversation: bool = True,
attachment_ids: Optional[List[str]] = None,
agent_id: Optional[str] = None,
is_shared_usage: bool = False,
shared_token: Optional[str] = None,
) -> Generator[str, None, None]:
"""
Generator function that streams the complete conversation response.
Args:
question: The user's question
agent: The agent instance
retriever: The retriever instance
conversation_id: Existing conversation ID
user_api_key: User's API key if any
decoded_token: Decoded JWT token
isNoneDoc: Flag for document-less responses
index: Index of message to update
should_save_conversation: Whether to persist the conversation
attachment_ids: List of attachment IDs
agent_id: ID of agent used
is_shared_usage: Flag for shared agent usage
shared_token: Token for shared agent
retrieved_docs: Pre-fetched documents for sources (optional)
Yields:
Server-sent event strings
"""
try:
response_full, thought, source_log_docs, tool_calls = "", "", [], []
is_structured = False
schema_info = None
structured_chunks = []
for line in agent.gen(query=question):
if "answer" in line:
response_full += str(line["answer"])
if line.get("structured"):
is_structured = True
schema_info = line.get("schema")
structured_chunks.append(line["answer"])
else:
data = json.dumps({"type": "answer", "answer": line["answer"]})
yield f"data: {data}\n\n"
elif "sources" in line:
truncated_sources = []
source_log_docs = line["sources"]
for source in line["sources"]:
truncated_source = source.copy()
if "text" in truncated_source:
truncated_source["text"] = (
truncated_source["text"][:100].strip() + "..."
)
truncated_sources.append(truncated_source)
if truncated_sources:
data = json.dumps(
{"type": "source", "source": truncated_sources}
)
yield f"data: {data}\n\n"
elif "tool_calls" in line:
tool_calls = line["tool_calls"]
data = json.dumps({"type": "tool_calls", "tool_calls": tool_calls})
yield f"data: {data}\n\n"
elif "thought" in line:
thought += line["thought"]
data = json.dumps({"type": "thought", "thought": line["thought"]})
yield f"data: {data}\n\n"
elif "type" in line:
data = json.dumps(line)
yield f"data: {data}\n\n"
if is_structured and structured_chunks:
structured_data = {
"type": "structured_answer",
"answer": response_full,
"structured": True,
"schema": schema_info,
}
data = json.dumps(structured_data)
yield f"data: {data}\n\n"
if isNoneDoc:
for doc in source_log_docs:
doc["source"] = "None"
llm = LLMCreator.create_llm(
settings.LLM_PROVIDER,
api_key=settings.API_KEY,
user_api_key=user_api_key,
decoded_token=decoded_token,
)
if should_save_conversation:
conversation_id = self.conversation_service.save_conversation(
conversation_id,
question,
response_full,
thought,
source_log_docs,
tool_calls,
llm,
self.gpt_model,
decoded_token,
index=index,
api_key=user_api_key,
agent_id=agent_id,
is_shared_usage=is_shared_usage,
shared_token=shared_token,
attachment_ids=attachment_ids,
)
else:
conversation_id = None
id_data = {"type": "id", "id": str(conversation_id)}
data = json.dumps(id_data)
yield f"data: {data}\n\n"
log_data = {
"action": "stream_answer",
"level": "info",
"user": decoded_token.get("sub"),
"api_key": user_api_key,
"question": question,
"response": response_full,
"sources": source_log_docs,
"attachments": attachment_ids,
"timestamp": datetime.datetime.now(datetime.timezone.utc),
}
if is_structured:
log_data["structured_output"] = True
if schema_info:
log_data["schema"] = schema_info
# Clean up text fields to be no longer than 10000 characters
for key, value in log_data.items():
if isinstance(value, str) and len(value) > 10000:
log_data[key] = value[:10000]
self.user_logs_collection.insert_one(log_data)
data = json.dumps({"type": "end"})
yield f"data: {data}\n\n"
except GeneratorExit:
logger.info(f"Stream aborted by client for question: {question[:50]}... ")
# Save partial response
if should_save_conversation and response_full:
try:
if isNoneDoc:
for doc in source_log_docs:
doc["source"] = "None"
llm = LLMCreator.create_llm(
settings.LLM_PROVIDER,
api_key=settings.API_KEY,
user_api_key=user_api_key,
decoded_token=decoded_token,
)
self.conversation_service.save_conversation(
conversation_id,
question,
response_full,
thought,
source_log_docs,
tool_calls,
llm,
self.gpt_model,
decoded_token,
index=index,
api_key=user_api_key,
agent_id=agent_id,
is_shared_usage=is_shared_usage,
shared_token=shared_token,
attachment_ids=attachment_ids,
)
except Exception as e:
logger.error(
f"Error saving partial response: {str(e)}", exc_info=True
)
raise
except Exception as e:
logger.error(f"Error in stream: {str(e)}", exc_info=True)
data = json.dumps(
{
"type": "error",
"error": "Please try again later. We apologize for any inconvenience.",
}
)
yield f"data: {data}\n\n"
return
def process_response_stream(self, stream):
"""Process the stream response for non-streaming endpoint"""
conversation_id = ""
response_full = ""
source_log_docs = []
tool_calls = []
thought = ""
stream_ended = False
is_structured = False
schema_info = None
for line in stream:
try:
event_data = line.replace("data: ", "").strip()
event = json.loads(event_data)
if event["type"] == "id":
conversation_id = event["id"]
elif event["type"] == "answer":
response_full += event["answer"]
elif event["type"] == "structured_answer":
response_full = event["answer"]
is_structured = True
schema_info = event.get("schema")
elif event["type"] == "source":
source_log_docs = event["source"]
elif event["type"] == "tool_calls":
tool_calls = event["tool_calls"]
elif event["type"] == "thought":
thought = event["thought"]
elif event["type"] == "error":
logger.error(f"Error from stream: {event['error']}")
return None, None, None, None, event["error"]
elif event["type"] == "end":
stream_ended = True
except (json.JSONDecodeError, KeyError) as e:
logger.warning(f"Error parsing stream event: {e}, line: {line}")
continue
if not stream_ended:
logger.error("Stream ended unexpectedly without an 'end' event.")
return None, None, None, None, "Stream ended unexpectedly"
result = (
conversation_id,
response_full,
source_log_docs,
tool_calls,
thought,
None,
)
if is_structured:
result = result + ({"structured": True, "schema": schema_info},)
return result
def error_stream_generate(self, err_response):
data = json.dumps({"type": "error", "error": err_response})
yield f"data: {data}\n\n"

View File

@@ -0,0 +1,127 @@
import logging
import traceback
from flask import request, Response
from flask_restx import fields, Resource
from application.api import api
from application.api.answer.routes.base import answer_ns, BaseAnswerResource
from application.api.answer.services.stream_processor import StreamProcessor
logger = logging.getLogger(__name__)
@answer_ns.route("/stream")
class StreamResource(Resource, BaseAnswerResource):
def __init__(self, *args, **kwargs):
Resource.__init__(self, *args, **kwargs)
BaseAnswerResource.__init__(self)
stream_model = answer_ns.model(
"StreamModel",
{
"question": fields.String(
required=True, description="Question to be asked"
),
"history": fields.List(
fields.String,
required=False,
description="Conversation history (only for new conversations)",
),
"conversation_id": fields.String(
required=False,
description="Existing conversation ID (loads history)",
),
"prompt_id": fields.String(
required=False, default="default", description="Prompt ID"
),
"chunks": fields.Integer(
required=False, default=2, description="Number of chunks"
),
"token_limit": fields.Integer(required=False, description="Token limit"),
"retriever": fields.String(required=False, description="Retriever type"),
"api_key": fields.String(required=False, description="API key"),
"active_docs": fields.String(
required=False, description="Active documents"
),
"isNoneDoc": fields.Boolean(
required=False, description="Flag indicating if no document is used"
),
"index": fields.Integer(
required=False, description="Index of the query to update"
),
"save_conversation": fields.Boolean(
required=False,
default=True,
description="Whether to save the conversation",
),
"attachments": fields.List(
fields.String, required=False, description="List of attachment IDs"
),
"passthrough": fields.Raw(
required=False,
description="Dynamic parameters to inject into prompt template",
),
},
)
@api.expect(stream_model)
@api.doc(description="Stream a response based on the question and retriever")
def post(self):
data = request.get_json()
if error := self.validate_request(data, "index" in data):
return error
decoded_token = getattr(request, "decoded_token", None)
processor = StreamProcessor(data, decoded_token)
try:
processor.initialize()
docs_together, docs_list = processor.pre_fetch_docs(data["question"])
tools_data = processor.pre_fetch_tools()
agent = processor.create_agent(
docs_together=docs_together, docs=docs_list, tools_data=tools_data
)
if error := self.check_usage(processor.agent_config):
return error
return Response(
self.complete_stream(
question=data["question"],
agent=agent,
conversation_id=processor.conversation_id,
user_api_key=processor.agent_config.get("user_api_key"),
decoded_token=processor.decoded_token,
isNoneDoc=data.get("isNoneDoc"),
index=data.get("index"),
should_save_conversation=data.get("save_conversation", True),
attachment_ids=data.get("attachments", []),
agent_id=data.get("agent_id"),
is_shared_usage=processor.is_shared_usage,
shared_token=processor.shared_token,
),
mimetype="text/event-stream",
)
except ValueError as e:
message = "Malformed request body"
logger.error(
f"/stream - error: {message} - specific error: {str(e)} - traceback: {traceback.format_exc()}",
extra={"error": str(e), "traceback": traceback.format_exc()},
)
return Response(
self.error_stream_generate(message),
status=400,
mimetype="text/event-stream",
)
except Exception as e:
logger.error(
f"/stream - error: {str(e)} - traceback: {traceback.format_exc()}",
extra={"error": str(e), "traceback": traceback.format_exc()},
)
return Response(
self.error_stream_generate("Unknown error occurred"),
status=400,
mimetype="text/event-stream",
)

View File

@@ -0,0 +1,179 @@
import logging
from datetime import datetime, timezone
from typing import Any, Dict, List, Optional
from application.core.mongo_db import MongoDB
from application.core.settings import settings
from bson import ObjectId
logger = logging.getLogger(__name__)
class ConversationService:
def __init__(self):
mongo = MongoDB.get_client()
db = mongo[settings.MONGO_DB_NAME]
self.conversations_collection = db["conversations"]
self.agents_collection = db["agents"]
def get_conversation(
self, conversation_id: str, user_id: str
) -> Optional[Dict[str, Any]]:
"""Retrieve a conversation with proper access control"""
if not conversation_id or not user_id:
return None
try:
conversation = self.conversations_collection.find_one(
{
"_id": ObjectId(conversation_id),
"$or": [{"user": user_id}, {"shared_with": user_id}],
}
)
if not conversation:
logger.warning(
f"Conversation not found or unauthorized - ID: {conversation_id}, User: {user_id}"
)
return None
conversation["_id"] = str(conversation["_id"])
return conversation
except Exception as e:
logger.error(f"Error fetching conversation: {str(e)}", exc_info=True)
return None
def save_conversation(
self,
conversation_id: Optional[str],
question: str,
response: str,
thought: str,
sources: List[Dict[str, Any]],
tool_calls: List[Dict[str, Any]],
llm: Any,
gpt_model: str,
decoded_token: Dict[str, Any],
index: Optional[int] = None,
api_key: Optional[str] = None,
agent_id: Optional[str] = None,
is_shared_usage: bool = False,
shared_token: Optional[str] = None,
attachment_ids: Optional[List[str]] = None,
) -> str:
"""Save or update a conversation in the database"""
user_id = decoded_token.get("sub")
if not user_id:
raise ValueError("User ID not found in token")
current_time = datetime.now(timezone.utc)
# clean up in sources array such that we save max 1k characters for text part
for source in sources:
if "text" in source and isinstance(source["text"], str):
source["text"] = source["text"][:1000]
if conversation_id is not None and index is not None:
# Update existing conversation with new query
result = self.conversations_collection.update_one(
{
"_id": ObjectId(conversation_id),
"user": user_id,
f"queries.{index}": {"$exists": True},
},
{
"$set": {
f"queries.{index}.prompt": question,
f"queries.{index}.response": response,
f"queries.{index}.thought": thought,
f"queries.{index}.sources": sources,
f"queries.{index}.tool_calls": tool_calls,
f"queries.{index}.timestamp": current_time,
f"queries.{index}.attachments": attachment_ids,
}
},
)
if result.matched_count == 0:
raise ValueError("Conversation not found or unauthorized")
self.conversations_collection.update_one(
{
"_id": ObjectId(conversation_id),
"user": user_id,
f"queries.{index}": {"$exists": True},
},
{"$push": {"queries": {"$each": [], "$slice": index + 1}}},
)
return conversation_id
elif conversation_id:
# Append new message to existing conversation
result = self.conversations_collection.update_one(
{"_id": ObjectId(conversation_id), "user": user_id},
{
"$push": {
"queries": {
"prompt": question,
"response": response,
"thought": thought,
"sources": sources,
"tool_calls": tool_calls,
"timestamp": current_time,
"attachments": attachment_ids,
}
}
},
)
if result.matched_count == 0:
raise ValueError("Conversation not found or unauthorized")
return conversation_id
else:
# Create new conversation
messages_summary = [
{
"role": "system",
"content": "You are a helpful assistant that creates concise conversation titles. "
"Summarize conversations in 3 words or less using the same language as the user.",
},
{
"role": "user",
"content": "Summarise following conversation in no more than 3 words, "
"respond ONLY with the summary, use the same language as the "
"user query \n\nUser: " + question + "\n\n" + "AI: " + response,
},
]
completion = llm.gen(
model=gpt_model, messages=messages_summary, max_tokens=30
)
conversation_data = {
"user": user_id,
"date": current_time,
"name": completion,
"queries": [
{
"prompt": question,
"response": response,
"thought": thought,
"sources": sources,
"tool_calls": tool_calls,
"timestamp": current_time,
"attachments": attachment_ids,
}
],
}
if api_key:
if agent_id:
conversation_data["agent_id"] = agent_id
if is_shared_usage:
conversation_data["is_shared_usage"] = is_shared_usage
conversation_data["shared_token"] = shared_token
agent = self.agents_collection.find_one({"key": api_key})
if agent:
conversation_data["api_key"] = agent["key"]
result = self.conversations_collection.insert_one(conversation_data)
return str(result.inserted_id)

View File

@@ -0,0 +1,97 @@
import logging
from typing import Any, Dict, Optional
from application.templates.namespaces import NamespaceManager
from application.templates.template_engine import TemplateEngine, TemplateRenderError
logger = logging.getLogger(__name__)
class PromptRenderer:
"""Service for rendering prompts with dynamic context using namespaces"""
def __init__(self):
self.template_engine = TemplateEngine()
self.namespace_manager = NamespaceManager()
def render_prompt(
self,
prompt_content: str,
user_id: Optional[str] = None,
request_id: Optional[str] = None,
passthrough_data: Optional[Dict[str, Any]] = None,
docs: Optional[list] = None,
docs_together: Optional[str] = None,
tools_data: Optional[Dict[str, Any]] = None,
**kwargs,
) -> str:
"""
Render prompt with full context from all namespaces.
Args:
prompt_content: Raw prompt template string
user_id: Current user identifier
request_id: Unique request identifier
passthrough_data: Parameters from web request
docs: RAG retrieved documents
docs_together: Concatenated document content
tools_data: Pre-fetched tool results organized by tool name
**kwargs: Additional parameters for namespace builders
Returns:
Rendered prompt string with all variables substituted
Raises:
TemplateRenderError: If template rendering fails
"""
if not prompt_content:
return ""
uses_template = self._uses_template_syntax(prompt_content)
if not uses_template:
return self._apply_legacy_substitutions(prompt_content, docs_together)
try:
context = self.namespace_manager.build_context(
user_id=user_id,
request_id=request_id,
passthrough_data=passthrough_data,
docs=docs,
docs_together=docs_together,
tools_data=tools_data,
**kwargs,
)
return self.template_engine.render(prompt_content, context)
except TemplateRenderError:
raise
except Exception as e:
error_msg = f"Prompt rendering failed: {str(e)}"
logger.error(error_msg)
raise TemplateRenderError(error_msg) from e
def _uses_template_syntax(self, prompt_content: str) -> bool:
"""Check if prompt uses Jinja2 template syntax"""
return "{{" in prompt_content and "}}" in prompt_content
def _apply_legacy_substitutions(
self, prompt_content: str, docs_together: Optional[str] = None
) -> str:
"""
Apply backward-compatible substitutions for old prompt format.
Handles legacy {summaries} and {query} placeholders during transition period.
"""
if docs_together:
prompt_content = prompt_content.replace("{summaries}", docs_together)
return prompt_content
def validate_template(self, prompt_content: str) -> bool:
"""Validate prompt template syntax"""
return self.template_engine.validate_template(prompt_content)
def extract_variables(self, prompt_content: str) -> set[str]:
"""Extract all variable names from prompt template"""
return self.template_engine.extract_variables(prompt_content)

View File

@@ -0,0 +1,642 @@
import datetime
import json
import logging
import os
from pathlib import Path
from typing import Any, Dict, Optional, Set
from bson.dbref import DBRef
from bson.objectid import ObjectId
from application.agents.agent_creator import AgentCreator
from application.api.answer.services.conversation_service import ConversationService
from application.api.answer.services.prompt_renderer import PromptRenderer
from application.core.mongo_db import MongoDB
from application.core.settings import settings
from application.retriever.retriever_creator import RetrieverCreator
from application.utils import (
calculate_doc_token_budget,
get_gpt_model,
limit_chat_history,
)
logger = logging.getLogger(__name__)
def get_prompt(prompt_id: str, prompts_collection=None) -> str:
"""
Get a prompt by preset name or MongoDB ID
"""
current_dir = Path(__file__).resolve().parents[3]
prompts_dir = current_dir / "prompts"
preset_mapping = {
"default": "chat_combine_default.txt",
"creative": "chat_combine_creative.txt",
"strict": "chat_combine_strict.txt",
"reduce": "chat_reduce_prompt.txt",
}
if prompt_id in preset_mapping:
file_path = os.path.join(prompts_dir, preset_mapping[prompt_id])
try:
with open(file_path, "r") as f:
return f.read()
except FileNotFoundError:
raise FileNotFoundError(f"Prompt file not found: {file_path}")
try:
if prompts_collection is None:
mongo = MongoDB.get_client()
db = mongo[settings.MONGO_DB_NAME]
prompts_collection = db["prompts"]
prompt_doc = prompts_collection.find_one({"_id": ObjectId(prompt_id)})
if not prompt_doc:
raise ValueError(f"Prompt with ID {prompt_id} not found")
return prompt_doc["content"]
except Exception as e:
raise ValueError(f"Invalid prompt ID: {prompt_id}") from e
class StreamProcessor:
def __init__(
self, request_data: Dict[str, Any], decoded_token: Optional[Dict[str, Any]]
):
mongo = MongoDB.get_client()
self.db = mongo[settings.MONGO_DB_NAME]
self.agents_collection = self.db["agents"]
self.attachments_collection = self.db["attachments"]
self.prompts_collection = self.db["prompts"]
self.data = request_data
self.decoded_token = decoded_token
self.initial_user_id = (
self.decoded_token.get("sub") if self.decoded_token is not None else None
)
self.conversation_id = self.data.get("conversation_id")
self.source = {}
self.all_sources = []
self.attachments = []
self.history = []
self.retrieved_docs = []
self.agent_config = {}
self.retriever_config = {}
self.is_shared_usage = False
self.shared_token = None
self.gpt_model = get_gpt_model()
self.conversation_service = ConversationService()
self.prompt_renderer = PromptRenderer()
self._prompt_content: Optional[str] = None
self._required_tool_actions: Optional[Dict[str, Set[Optional[str]]]] = None
def initialize(self):
"""Initialize all required components for processing"""
self._configure_agent()
self._configure_source()
self._configure_retriever()
self._configure_agent()
self._load_conversation_history()
self._process_attachments()
def _load_conversation_history(self):
"""Load conversation history either from DB or request"""
if self.conversation_id and self.initial_user_id:
conversation = self.conversation_service.get_conversation(
self.conversation_id, self.initial_user_id
)
if not conversation:
raise ValueError("Conversation not found or unauthorized")
self.history = [
{"prompt": query["prompt"], "response": query["response"]}
for query in conversation.get("queries", [])
]
else:
self.history = limit_chat_history(
json.loads(self.data.get("history", "[]")), gpt_model=self.gpt_model
)
def _process_attachments(self):
"""Process any attachments in the request"""
attachment_ids = self.data.get("attachments", [])
self.attachments = self._get_attachments_content(
attachment_ids, self.initial_user_id
)
def _get_attachments_content(self, attachment_ids, user_id):
"""
Retrieve content from attachment documents based on their IDs.
"""
if not attachment_ids:
return []
attachments = []
for attachment_id in attachment_ids:
try:
attachment_doc = self.attachments_collection.find_one(
{"_id": ObjectId(attachment_id), "user": user_id}
)
if attachment_doc:
attachments.append(attachment_doc)
except Exception as e:
logger.error(
f"Error retrieving attachment {attachment_id}: {e}", exc_info=True
)
return attachments
def _get_agent_key(self, agent_id: Optional[str], user_id: Optional[str]) -> tuple:
"""Get API key for agent with access control"""
if not agent_id:
return None, False, None
try:
agent = self.agents_collection.find_one({"_id": ObjectId(agent_id)})
if agent is None:
raise Exception("Agent not found")
is_owner = agent.get("user") == user_id
is_shared_with_user = agent.get(
"shared_publicly", False
) or user_id in agent.get("shared_with", [])
if not (is_owner or is_shared_with_user):
raise Exception("Unauthorized access to the agent")
if is_owner:
self.agents_collection.update_one(
{"_id": ObjectId(agent_id)},
{
"$set": {
"lastUsedAt": datetime.datetime.now(datetime.timezone.utc)
}
},
)
return str(agent["key"]), not is_owner, agent.get("shared_token")
except Exception as e:
logger.error(f"Error in get_agent_key: {str(e)}", exc_info=True)
raise
def _get_data_from_api_key(self, api_key: str) -> Dict[str, Any]:
data = self.agents_collection.find_one({"key": api_key})
if not data:
raise Exception("Invalid API Key, please generate a new key", 401)
source = data.get("source")
if isinstance(source, DBRef):
source_doc = self.db.dereference(source)
if source_doc:
data["source"] = str(source_doc["_id"])
data["retriever"] = source_doc.get("retriever", data.get("retriever"))
data["chunks"] = source_doc.get("chunks", data.get("chunks"))
else:
data["source"] = None
elif source == "default":
data["source"] = "default"
else:
data["source"] = None
# Handle multiple sources
sources = data.get("sources", [])
if sources and isinstance(sources, list):
sources_list = []
for i, source_ref in enumerate(sources):
if source_ref == "default":
processed_source = {
"id": "default",
"retriever": "classic",
"chunks": data.get("chunks", "2"),
}
sources_list.append(processed_source)
elif isinstance(source_ref, DBRef):
source_doc = self.db.dereference(source_ref)
if source_doc:
processed_source = {
"id": str(source_doc["_id"]),
"retriever": source_doc.get("retriever", "classic"),
"chunks": source_doc.get("chunks", data.get("chunks", "2")),
}
sources_list.append(processed_source)
data["sources"] = sources_list
else:
data["sources"] = []
return data
def _configure_source(self):
"""Configure the source based on agent data"""
api_key = self.data.get("api_key") or self.agent_key
if api_key:
agent_data = self._get_data_from_api_key(api_key)
if agent_data.get("sources") and len(agent_data["sources"]) > 0:
source_ids = [
source["id"] for source in agent_data["sources"] if source.get("id")
]
if source_ids:
self.source = {"active_docs": source_ids}
else:
self.source = {}
self.all_sources = agent_data["sources"]
elif agent_data.get("source"):
self.source = {"active_docs": agent_data["source"]}
self.all_sources = [
{
"id": agent_data["source"],
"retriever": agent_data.get("retriever", "classic"),
}
]
else:
self.source = {}
self.all_sources = []
return
if "active_docs" in self.data:
self.source = {"active_docs": self.data["active_docs"]}
return
self.source = {}
self.all_sources = []
def _configure_agent(self):
"""Configure the agent based on request data"""
agent_id = self.data.get("agent_id")
self.agent_key, self.is_shared_usage, self.shared_token = self._get_agent_key(
agent_id, self.initial_user_id
)
api_key = self.data.get("api_key")
if api_key:
data_key = self._get_data_from_api_key(api_key)
self.agent_config.update(
{
"prompt_id": data_key.get("prompt_id", "default"),
"agent_type": data_key.get("agent_type", settings.AGENT_NAME),
"user_api_key": api_key,
"json_schema": data_key.get("json_schema"),
}
)
self.initial_user_id = data_key.get("user")
self.decoded_token = {"sub": data_key.get("user")}
if data_key.get("source"):
self.source = {"active_docs": data_key["source"]}
if data_key.get("retriever"):
self.retriever_config["retriever_name"] = data_key["retriever"]
if data_key.get("chunks") is not None:
try:
self.retriever_config["chunks"] = int(data_key["chunks"])
except (ValueError, TypeError):
logger.warning(
f"Invalid chunks value: {data_key['chunks']}, using default value 2"
)
self.retriever_config["chunks"] = 2
elif self.agent_key:
data_key = self._get_data_from_api_key(self.agent_key)
self.agent_config.update(
{
"prompt_id": data_key.get("prompt_id", "default"),
"agent_type": data_key.get("agent_type", settings.AGENT_NAME),
"user_api_key": self.agent_key,
"json_schema": data_key.get("json_schema"),
}
)
self.decoded_token = (
self.decoded_token
if self.is_shared_usage
else {"sub": data_key.get("user")}
)
if data_key.get("source"):
self.source = {"active_docs": data_key["source"]}
if data_key.get("retriever"):
self.retriever_config["retriever_name"] = data_key["retriever"]
if data_key.get("chunks") is not None:
try:
self.retriever_config["chunks"] = int(data_key["chunks"])
except (ValueError, TypeError):
logger.warning(
f"Invalid chunks value: {data_key['chunks']}, using default value 2"
)
self.retriever_config["chunks"] = 2
else:
self.agent_config.update(
{
"prompt_id": self.data.get("prompt_id", "default"),
"agent_type": settings.AGENT_NAME,
"user_api_key": None,
"json_schema": None,
}
)
def _configure_retriever(self):
history_token_limit = int(self.data.get("token_limit", 2000))
doc_token_limit = calculate_doc_token_budget(
gpt_model=self.gpt_model, history_token_limit=history_token_limit
)
self.retriever_config = {
"retriever_name": self.data.get("retriever", "classic"),
"chunks": int(self.data.get("chunks", 2)),
"doc_token_limit": doc_token_limit,
"history_token_limit": history_token_limit,
}
api_key = self.data.get("api_key") or self.agent_key
if not api_key and "isNoneDoc" in self.data and self.data["isNoneDoc"]:
self.retriever_config["chunks"] = 0
def create_retriever(self):
return RetrieverCreator.create_retriever(
self.retriever_config["retriever_name"],
source=self.source,
chat_history=self.history,
prompt=get_prompt(self.agent_config["prompt_id"], self.prompts_collection),
chunks=self.retriever_config["chunks"],
doc_token_limit=self.retriever_config.get("doc_token_limit", 50000),
gpt_model=self.gpt_model,
user_api_key=self.agent_config["user_api_key"],
decoded_token=self.decoded_token,
)
def pre_fetch_docs(self, question: str) -> tuple[Optional[str], Optional[list]]:
"""Pre-fetch documents for template rendering before agent creation"""
if self.data.get("isNoneDoc", False):
logger.info("Pre-fetch skipped: isNoneDoc=True")
return None, None
try:
retriever = self.create_retriever()
logger.info(
f"Pre-fetching docs with chunks={retriever.chunks}, doc_token_limit={retriever.doc_token_limit}"
)
docs = retriever.search(question)
logger.info(f"Pre-fetch retrieved {len(docs) if docs else 0} documents")
if not docs:
logger.info("Pre-fetch: No documents returned from search")
return None, None
self.retrieved_docs = docs
docs_with_filenames = []
for doc in docs:
filename = doc.get("filename") or doc.get("title") or doc.get("source")
if filename:
chunk_header = str(filename)
docs_with_filenames.append(f"{chunk_header}\n{doc['text']}")
else:
docs_with_filenames.append(doc["text"])
docs_together = "\n\n".join(docs_with_filenames)
logger.info(f"Pre-fetch docs_together size: {len(docs_together)} chars")
return docs_together, docs
except Exception as e:
logger.error(f"Failed to pre-fetch docs: {str(e)}", exc_info=True)
return None, None
def pre_fetch_tools(self) -> Optional[Dict[str, Any]]:
"""Pre-fetch tool data for template rendering before agent creation
Can be controlled via:
1. Global setting: ENABLE_TOOL_PREFETCH in .env
2. Per-request: disable_tool_prefetch in request data
"""
if not settings.ENABLE_TOOL_PREFETCH:
logger.info(
"Tool pre-fetching disabled globally via ENABLE_TOOL_PREFETCH setting"
)
return None
if self.data.get("disable_tool_prefetch", False):
logger.info("Tool pre-fetching disabled for this request")
return None
required_tool_actions = self._get_required_tool_actions()
filtering_enabled = required_tool_actions is not None
try:
user_tools_collection = self.db["user_tools"]
user_id = self.initial_user_id or "local"
user_tools = list(
user_tools_collection.find({"user": user_id, "status": True})
)
if not user_tools:
return None
tools_data = {}
for tool_doc in user_tools:
tool_name = tool_doc.get("name")
tool_id = str(tool_doc.get("_id"))
if filtering_enabled:
required_actions_by_name = required_tool_actions.get(
tool_name, set()
)
required_actions_by_id = required_tool_actions.get(tool_id, set())
required_actions = required_actions_by_name | required_actions_by_id
if not required_actions:
continue
else:
required_actions = None
tool_data = self._fetch_tool_data(tool_doc, required_actions)
if tool_data:
tools_data[tool_name] = tool_data
tools_data[tool_id] = tool_data
return tools_data if tools_data else None
except Exception as e:
logger.warning(f"Failed to pre-fetch tools: {type(e).__name__}")
return None
def _fetch_tool_data(
self,
tool_doc: Dict[str, Any],
required_actions: Optional[Set[Optional[str]]],
) -> Optional[Dict[str, Any]]:
"""Fetch and execute tool actions with saved parameters"""
try:
from application.agents.tools.tool_manager import ToolManager
tool_name = tool_doc.get("name")
tool_config = tool_doc.get("config", {}).copy()
tool_config["tool_id"] = str(tool_doc["_id"])
tool_manager = ToolManager(config={tool_name: tool_config})
user_id = self.initial_user_id or "local"
tool = tool_manager.load_tool(tool_name, tool_config, user_id=user_id)
if not tool:
logger.debug(f"Tool '{tool_name}' failed to load")
return None
tool_actions = tool.get_actions_metadata()
if not tool_actions:
logger.debug(f"Tool '{tool_name}' has no actions")
return None
saved_actions = tool_doc.get("actions", [])
include_all_actions = required_actions is None or (
required_actions and None in required_actions
)
allowed_actions: Set[str] = (
{action for action in required_actions if isinstance(action, str)}
if required_actions
else set()
)
action_results = {}
for action_meta in tool_actions:
action_name = action_meta.get("name")
if action_name is None:
continue
if (
not include_all_actions
and allowed_actions
and action_name not in allowed_actions
):
continue
try:
saved_action = None
for sa in saved_actions:
if sa.get("name") == action_name:
saved_action = sa
break
action_params = action_meta.get("parameters", {})
properties = action_params.get("properties", {})
kwargs = {}
for param_name, param_spec in properties.items():
if saved_action:
saved_props = saved_action.get("parameters", {}).get(
"properties", {}
)
if param_name in saved_props:
param_value = saved_props[param_name].get("value")
if param_value is not None:
kwargs[param_name] = param_value
continue
if param_name in tool_config:
kwargs[param_name] = tool_config[param_name]
elif "default" in param_spec:
kwargs[param_name] = param_spec["default"]
result = tool.execute_action(action_name, **kwargs)
action_results[action_name] = result
except Exception as e:
logger.debug(
f"Action '{action_name}' execution failed: {type(e).__name__}"
)
continue
return action_results if action_results else None
except Exception as e:
logger.debug(f"Tool pre-fetch failed for '{tool_name}': {type(e).__name__}")
return None
def _get_prompt_content(self) -> Optional[str]:
"""Retrieve and cache the raw prompt content for the current agent configuration."""
if self._prompt_content is not None:
return self._prompt_content
prompt_id = (
self.agent_config.get("prompt_id")
if isinstance(self.agent_config, dict)
else None
)
if not prompt_id:
return None
try:
self._prompt_content = get_prompt(prompt_id, self.prompts_collection)
except ValueError as e:
logger.debug(f"Invalid prompt ID '{prompt_id}': {str(e)}")
self._prompt_content = None
except Exception as e:
logger.debug(f"Failed to fetch prompt '{prompt_id}': {type(e).__name__}")
self._prompt_content = None
return self._prompt_content
def _get_required_tool_actions(self) -> Optional[Dict[str, Set[Optional[str]]]]:
"""Determine which tool actions are referenced in the prompt template"""
if self._required_tool_actions is not None:
return self._required_tool_actions
prompt_content = self._get_prompt_content()
if prompt_content is None:
return None
if "{{" not in prompt_content or "}}" not in prompt_content:
self._required_tool_actions = {}
return self._required_tool_actions
try:
from application.templates.template_engine import TemplateEngine
template_engine = TemplateEngine()
usages = template_engine.extract_tool_usages(prompt_content)
self._required_tool_actions = usages
return self._required_tool_actions
except Exception as e:
logger.debug(f"Failed to extract tool usages: {type(e).__name__}")
self._required_tool_actions = {}
return self._required_tool_actions
def _fetch_memory_tool_data(
self, tool_doc: Dict[str, Any]
) -> Optional[Dict[str, Any]]:
"""Fetch memory tool data for pre-injection into prompt"""
try:
tool_config = tool_doc.get("config", {}).copy()
tool_config["tool_id"] = str(tool_doc["_id"])
from application.agents.tools.memory import MemoryTool
memory_tool = MemoryTool(tool_config, self.initial_user_id)
root_view = memory_tool.execute_action("view", path="/")
if "Error:" in root_view or not root_view.strip():
return None
return {"root": root_view, "available": True}
except Exception as e:
logger.warning(f"Failed to fetch memory tool data: {str(e)}")
return None
def create_agent(
self,
docs_together: Optional[str] = None,
docs: Optional[list] = None,
tools_data: Optional[Dict[str, Any]] = None,
):
"""Create and return the configured agent with rendered prompt"""
raw_prompt = self._get_prompt_content()
if raw_prompt is None:
raw_prompt = get_prompt(
self.agent_config["prompt_id"], self.prompts_collection
)
self._prompt_content = raw_prompt
rendered_prompt = self.prompt_renderer.render_prompt(
prompt_content=raw_prompt,
user_id=self.initial_user_id,
request_id=self.data.get("request_id"),
passthrough_data=self.data.get("passthrough"),
docs=docs,
docs_together=docs_together,
tools_data=tools_data,
)
return AgentCreator.create_agent(
self.agent_config["agent_type"],
endpoint="stream",
llm_name=settings.LLM_PROVIDER,
gpt_model=self.gpt_model,
api_key=settings.API_KEY,
user_api_key=self.agent_config["user_api_key"],
prompt=rendered_prompt,
chat_history=self.history,
retrieved_docs=self.retrieved_docs,
decoded_token=self.decoded_token,
attachments=self.attachments,
json_schema=self.agent_config.get("json_schema"),
)

View File

@@ -0,0 +1,489 @@
import base64
import datetime
import json
import uuid
from bson.objectid import ObjectId
from flask import (
Blueprint,
current_app,
jsonify,
make_response,
request
)
from flask_restx import fields, Namespace, Resource
from application.api.user.tasks import (
ingest_connector_task,
)
from application.core.mongo_db import MongoDB
from application.core.settings import settings
from application.api import api
from application.parser.connectors.connector_creator import ConnectorCreator
mongo = MongoDB.get_client()
db = mongo[settings.MONGO_DB_NAME]
sources_collection = db["sources"]
sessions_collection = db["connector_sessions"]
connector = Blueprint("connector", __name__)
connectors_ns = Namespace("connectors", description="Connector operations", path="/")
api.add_namespace(connectors_ns)
@connectors_ns.route("/api/connectors/auth")
class ConnectorAuth(Resource):
@api.doc(description="Get connector OAuth authorization URL", params={"provider": "Connector provider (e.g., google_drive)"})
def get(self):
try:
provider = request.args.get('provider') or request.args.get('source')
if not provider:
return make_response(jsonify({"success": False, "error": "Missing provider"}), 400)
if not ConnectorCreator.is_supported(provider):
return make_response(jsonify({"success": False, "error": f"Unsupported provider: {provider}"}), 400)
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False, "error": "Unauthorized"}), 401)
user_id = decoded_token.get('sub')
now = datetime.datetime.now(datetime.timezone.utc)
result = sessions_collection.insert_one({
"provider": provider,
"user": user_id,
"status": "pending",
"created_at": now
})
state_dict = {
"provider": provider,
"object_id": str(result.inserted_id)
}
state = base64.urlsafe_b64encode(json.dumps(state_dict).encode()).decode()
auth = ConnectorCreator.create_auth(provider)
authorization_url = auth.get_authorization_url(state=state)
return make_response(jsonify({
"success": True,
"authorization_url": authorization_url,
"state": state
}), 200)
except Exception as e:
current_app.logger.error(f"Error generating connector auth URL: {e}")
return make_response(jsonify({"success": False, "error": str(e)}), 500)
@connectors_ns.route("/api/connectors/callback")
class ConnectorsCallback(Resource):
@api.doc(description="Handle OAuth callback for external connectors")
def get(self):
"""Handle OAuth callback for external connectors"""
try:
from application.parser.connectors.connector_creator import ConnectorCreator
from flask import request, redirect
authorization_code = request.args.get('code')
state = request.args.get('state')
error = request.args.get('error')
state_dict = json.loads(base64.urlsafe_b64decode(state.encode()).decode())
provider = state_dict["provider"]
state_object_id = state_dict["object_id"]
if error:
if error == "access_denied":
return redirect(f"/api/connectors/callback-status?status=cancelled&message=Authentication+was+cancelled.+You+can+try+again+if+you'd+like+to+connect+your+account.&provider={provider}")
else:
current_app.logger.warning(f"OAuth error in callback: {error}")
return redirect(f"/api/connectors/callback-status?status=error&message=Authentication+failed.+Please+try+again+and+make+sure+to+grant+all+requested+permissions.&provider={provider}")
if not authorization_code:
return redirect(f"/api/connectors/callback-status?status=error&message=Authentication+failed.+Please+try+again+and+make+sure+to+grant+all+requested+permissions.&provider={provider}")
try:
auth = ConnectorCreator.create_auth(provider)
token_info = auth.exchange_code_for_tokens(authorization_code)
session_token = str(uuid.uuid4())
try:
credentials = auth.create_credentials_from_token_info(token_info)
service = auth.build_drive_service(credentials)
user_info = service.about().get(fields="user").execute()
user_email = user_info.get('user', {}).get('emailAddress', 'Connected User')
except Exception as e:
current_app.logger.warning(f"Could not get user info: {e}")
user_email = 'Connected User'
sanitized_token_info = {
"access_token": token_info.get("access_token"),
"refresh_token": token_info.get("refresh_token"),
"token_uri": token_info.get("token_uri"),
"expiry": token_info.get("expiry")
}
sessions_collection.find_one_and_update(
{"_id": ObjectId(state_object_id), "provider": provider},
{
"$set": {
"session_token": session_token,
"token_info": sanitized_token_info,
"user_email": user_email,
"status": "authorized"
}
}
)
# Redirect to success page with session token and user email
return redirect(f"/api/connectors/callback-status?status=success&message=Authentication+successful&provider={provider}&session_token={session_token}&user_email={user_email}")
except Exception as e:
current_app.logger.error(f"Error exchanging code for tokens: {str(e)}", exc_info=True)
return redirect(f"/api/connectors/callback-status?status=error&message=Authentication+failed.+Please+try+again+and+make+sure+to+grant+all+requested+permissions.&provider={provider}")
except Exception as e:
current_app.logger.error(f"Error handling connector callback: {e}")
return redirect("/api/connectors/callback-status?status=error&message=Authentication+failed.+Please+try+again+and+make+sure+to+grant+all+requested+permissions.")
@connectors_ns.route("/api/connectors/files")
class ConnectorFiles(Resource):
@api.expect(api.model("ConnectorFilesModel", {
"provider": fields.String(required=True),
"session_token": fields.String(required=True),
"folder_id": fields.String(required=False),
"limit": fields.Integer(required=False),
"page_token": fields.String(required=False),
"search_query": fields.String(required=False)
}))
@api.doc(description="List files from a connector provider (supports pagination and search)")
def post(self):
try:
data = request.get_json()
provider = data.get('provider')
session_token = data.get('session_token')
folder_id = data.get('folder_id')
limit = data.get('limit', 10)
page_token = data.get('page_token')
search_query = data.get('search_query')
if not provider or not session_token:
return make_response(jsonify({"success": False, "error": "provider and session_token are required"}), 400)
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False, "error": "Unauthorized"}), 401)
user = decoded_token.get('sub')
session = sessions_collection.find_one({"session_token": session_token, "user": user})
if not session:
return make_response(jsonify({"success": False, "error": "Invalid or unauthorized session"}), 401)
loader = ConnectorCreator.create_connector(provider, session_token)
input_config = {
'limit': limit,
'list_only': True,
'session_token': session_token,
'folder_id': folder_id,
'page_token': page_token
}
if search_query:
input_config['search_query'] = search_query
documents = loader.load_data(input_config)
files = []
for doc in documents[:limit]:
metadata = doc.extra_info
modified_time = metadata.get('modified_time')
if modified_time:
date_part = modified_time.split('T')[0]
time_part = modified_time.split('T')[1].split('.')[0].split('Z')[0]
formatted_time = f"{date_part} {time_part}"
else:
formatted_time = None
files.append({
'id': doc.doc_id,
'name': metadata.get('file_name', 'Unknown File'),
'type': metadata.get('mime_type', 'unknown'),
'size': metadata.get('size', None),
'modifiedTime': formatted_time,
'isFolder': metadata.get('is_folder', False)
})
next_token = getattr(loader, 'next_page_token', None)
has_more = bool(next_token)
return make_response(jsonify({
"success": True,
"files": files,
"total": len(files),
"next_page_token": next_token,
"has_more": has_more
}), 200)
except Exception as e:
current_app.logger.error(f"Error loading connector files: {e}")
return make_response(jsonify({"success": False, "error": f"Failed to load files: {str(e)}"}), 500)
@connectors_ns.route("/api/connectors/validate-session")
class ConnectorValidateSession(Resource):
@api.expect(api.model("ConnectorValidateSessionModel", {"provider": fields.String(required=True), "session_token": fields.String(required=True)}))
@api.doc(description="Validate connector session token and return user info and access token")
def post(self):
try:
data = request.get_json()
provider = data.get('provider')
session_token = data.get('session_token')
if not provider or not session_token:
return make_response(jsonify({"success": False, "error": "provider and session_token are required"}), 400)
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False, "error": "Unauthorized"}), 401)
user = decoded_token.get('sub')
session = sessions_collection.find_one({"session_token": session_token, "user": user})
if not session or "token_info" not in session:
return make_response(jsonify({"success": False, "error": "Invalid or expired session"}), 401)
token_info = session["token_info"]
auth = ConnectorCreator.create_auth(provider)
is_expired = auth.is_token_expired(token_info)
if is_expired and token_info.get('refresh_token'):
try:
refreshed_token_info = auth.refresh_access_token(token_info.get('refresh_token'))
sanitized_token_info = {
"access_token": refreshed_token_info.get("access_token"),
"refresh_token": refreshed_token_info.get("refresh_token"),
"token_uri": refreshed_token_info.get("token_uri"),
"expiry": refreshed_token_info.get("expiry")
}
sessions_collection.update_one(
{"session_token": session_token},
{"$set": {"token_info": sanitized_token_info}}
)
token_info = sanitized_token_info
is_expired = False
except Exception as refresh_error:
current_app.logger.error(f"Failed to refresh token: {refresh_error}")
if is_expired:
return make_response(jsonify({
"success": False,
"expired": True,
"error": "Session token has expired. Please reconnect."
}), 401)
return make_response(jsonify({
"success": True,
"expired": False,
"user_email": session.get('user_email', 'Connected User'),
"access_token": token_info.get('access_token')
}), 200)
except Exception as e:
current_app.logger.error(f"Error validating connector session: {e}")
return make_response(jsonify({"success": False, "error": str(e)}), 500)
@connectors_ns.route("/api/connectors/disconnect")
class ConnectorDisconnect(Resource):
@api.expect(api.model("ConnectorDisconnectModel", {"provider": fields.String(required=True), "session_token": fields.String(required=False)}))
@api.doc(description="Disconnect a connector session")
def post(self):
try:
data = request.get_json()
provider = data.get('provider')
session_token = data.get('session_token')
if not provider:
return make_response(jsonify({"success": False, "error": "provider is required"}), 400)
if session_token:
sessions_collection.delete_one({"session_token": session_token})
return make_response(jsonify({"success": True}), 200)
except Exception as e:
current_app.logger.error(f"Error disconnecting connector session: {e}")
return make_response(jsonify({"success": False, "error": str(e)}), 500)
@connectors_ns.route("/api/connectors/sync")
class ConnectorSync(Resource):
@api.expect(
api.model(
"ConnectorSyncModel",
{
"source_id": fields.String(required=True, description="Source ID to sync"),
"session_token": fields.String(required=True, description="Authentication token")
},
)
)
@api.doc(description="Sync connector source to check for modifications")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
try:
data = request.get_json()
source_id = data.get('source_id')
session_token = data.get('session_token')
if not all([source_id, session_token]):
return make_response(
jsonify({
"success": False,
"error": "source_id and session_token are required"
}),
400
)
source = sources_collection.find_one({"_id": ObjectId(source_id)})
if not source:
return make_response(
jsonify({
"success": False,
"error": "Source not found"
}),
404
)
if source.get('user') != decoded_token.get('sub'):
return make_response(
jsonify({
"success": False,
"error": "Unauthorized access to source"
}),
403
)
remote_data = {}
try:
if source.get('remote_data'):
remote_data = json.loads(source.get('remote_data'))
except json.JSONDecodeError:
current_app.logger.error(f"Invalid remote_data format for source {source_id}")
remote_data = {}
source_type = remote_data.get('provider')
if not source_type:
return make_response(
jsonify({
"success": False,
"error": "Source provider not found in remote_data"
}),
400
)
# Extract configuration from remote_data
file_ids = remote_data.get('file_ids', [])
folder_ids = remote_data.get('folder_ids', [])
recursive = remote_data.get('recursive', True)
# Start the sync task
task = ingest_connector_task.delay(
job_name=source.get('name'),
user=decoded_token.get('sub'),
source_type=source_type,
session_token=session_token,
file_ids=file_ids,
folder_ids=folder_ids,
recursive=recursive,
retriever=source.get('retriever', 'classic'),
operation_mode="sync",
doc_id=source_id,
sync_frequency=source.get('sync_frequency', 'never')
)
return make_response(
jsonify({
"success": True,
"task_id": task.id
}),
200
)
except Exception as err:
current_app.logger.error(
f"Error syncing connector source: {err}",
exc_info=True
)
return make_response(
jsonify({
"success": False,
"error": str(err)
}),
400
)
@connectors_ns.route("/api/connectors/callback-status")
class ConnectorCallbackStatus(Resource):
@api.doc(description="Return HTML page with connector authentication status")
def get(self):
"""Return HTML page with connector authentication status"""
try:
status = request.args.get('status', 'error')
message = request.args.get('message', '')
provider = request.args.get('provider', 'connector')
session_token = request.args.get('session_token', '')
user_email = request.args.get('user_email', '')
html_content = f"""
<!DOCTYPE html>
<html>
<head>
<title>{provider.replace('_', ' ').title()} Authentication</title>
<style>
body {{ font-family: Arial, sans-serif; text-align: center; padding: 40px; }}
.container {{ max-width: 600px; margin: 0 auto; }}
.success {{ color: #4CAF50; }}
.error {{ color: #F44336; }}
.cancelled {{ color: #FF9800; }}
</style>
<script>
window.onload = function() {{
const status = "{status}";
const sessionToken = "{session_token}";
const userEmail = "{user_email}";
if (status === "success" && window.opener) {{
window.opener.postMessage({{
type: '{provider}_auth_success',
session_token: sessionToken,
user_email: userEmail
}}, '*');
setTimeout(() => window.close(), 3000);
}} else if (status === "cancelled" || status === "error") {{
setTimeout(() => window.close(), 3000);
}}
}};
</script>
</head>
<body>
<div class="container">
<h2>{provider.replace('_', ' ').title()} Authentication</h2>
<div class="{status}">
<p>{message}</p>
{f'<p>Connected as: {user_email}</p>' if status == 'success' else ''}
</div>
<p><small>You can close this window. {f"Your {provider.replace('_', ' ').title()} is now connected and ready to use." if status == 'success' else "Feel free to close this window."}</small></p>
</div>
</body>
</html>
"""
return make_response(html_content, 200, {'Content-Type': 'text/html'})
except Exception as e:
current_app.logger.error(f"Error rendering callback status page: {e}")
return make_response("Authentication error occurred", 500, {'Content-Type': 'text/html'})

124
application/api/internal/routes.py Normal file → Executable file
View File

@@ -1,20 +1,29 @@
import os
import datetime
import json
from flask import Blueprint, request, send_from_directory
from pymongo import MongoClient
from werkzeug.utils import secure_filename
from bson.objectid import ObjectId
import logging
from application.core.mongo_db import MongoDB
from application.core.settings import settings
mongo = MongoClient(settings.MONGO_URI)
db = mongo["docsgpt"]
from application.storage.storage_creator import StorageCreator
logger = logging.getLogger(__name__)
mongo = MongoDB.get_client()
db = mongo[settings.MONGO_DB_NAME]
conversations_collection = db["conversations"]
vectors_collection = db["vectors"]
sources_collection = db["sources"]
current_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
current_dir = os.path.dirname(
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
)
internal = Blueprint("internal", __name__)
internal = Blueprint('internal', __name__)
@internal.route("/api/download", methods=["get"])
def download_file():
user = secure_filename(request.args.get("user"))
@@ -24,46 +33,95 @@ def download_file():
return send_from_directory(save_dir, filename, as_attachment=True)
@internal.route("/api/upload_index", methods=["POST"])
def upload_index_files():
"""Upload two files(index.faiss, index.pkl) to the user's folder."""
if "user" not in request.form:
return {"status": "no user"}
user = secure_filename(request.form["user"])
user = request.form["user"]
if "name" not in request.form:
return {"status": "no name"}
job_name = secure_filename(request.form["name"])
save_dir = os.path.join(current_dir, "indexes", user, job_name)
job_name = request.form["name"]
tokens = request.form["tokens"]
retriever = request.form["retriever"]
id = request.form["id"]
type = request.form["type"]
remote_data = request.form["remote_data"] if "remote_data" in request.form else None
sync_frequency = request.form["sync_frequency"] if "sync_frequency" in request.form else None
file_path = request.form.get("file_path")
directory_structure = request.form.get("directory_structure")
if directory_structure:
try:
directory_structure = json.loads(directory_structure)
except Exception:
logger.error("Error parsing directory_structure")
directory_structure = {}
else:
directory_structure = {}
storage = StorageCreator.get_storage()
index_base_path = f"indexes/{id}"
if settings.VECTOR_STORE == "faiss":
if "file_faiss" not in request.files:
print("No file part")
logger.error("No file_faiss part")
return {"status": "no file"}
file_faiss = request.files["file_faiss"]
if file_faiss.filename == "":
return {"status": "no file name"}
if "file_pkl" not in request.files:
print("No file part")
logger.error("No file_pkl part")
return {"status": "no file"}
file_pkl = request.files["file_pkl"]
if file_pkl.filename == "":
return {"status": "no file name"}
# saves index files
if not os.path.exists(save_dir):
os.makedirs(save_dir)
file_faiss.save(os.path.join(save_dir, "index.faiss"))
file_pkl.save(os.path.join(save_dir, "index.pkl"))
# create entry in vectors_collection
vectors_collection.insert_one(
{
"user": user,
"name": job_name,
"language": job_name,
"location": save_dir,
"date": datetime.datetime.now().strftime("%d/%m/%Y %H:%M:%S"),
"model": settings.EMBEDDINGS_NAME,
"type": "local",
}
)
return {"status": "ok"}
# Save index files to storage
faiss_storage_path = f"{index_base_path}/index.faiss"
pkl_storage_path = f"{index_base_path}/index.pkl"
storage.save_file(file_faiss, faiss_storage_path)
storage.save_file(file_pkl, pkl_storage_path)
existing_entry = sources_collection.find_one({"_id": ObjectId(id)})
if existing_entry:
sources_collection.update_one(
{"_id": ObjectId(id)},
{
"$set": {
"user": user,
"name": job_name,
"language": job_name,
"date": datetime.datetime.now(),
"model": settings.EMBEDDINGS_NAME,
"type": type,
"tokens": tokens,
"retriever": retriever,
"remote_data": remote_data,
"sync_frequency": sync_frequency,
"file_path": file_path,
"directory_structure": directory_structure,
}
},
)
else:
sources_collection.insert_one(
{
"_id": ObjectId(id),
"user": user,
"name": job_name,
"language": job_name,
"date": datetime.datetime.now(),
"model": settings.EMBEDDINGS_NAME,
"type": type,
"tokens": tokens,
"retriever": retriever,
"remote_data": remote_data,
"sync_frequency": sync_frequency,
"file_path": file_path,
"directory_structure": directory_structure,
}
)
return {"status": "ok"}

View File

@@ -0,0 +1,5 @@
"""User API module - provides all user-related API endpoints"""
from .routes import user
__all__ = ["user"]

View File

@@ -0,0 +1,7 @@
"""Agents module."""
from .routes import agents_ns
from .sharing import agents_sharing_ns
from .webhooks import agents_webhooks_ns
__all__ = ["agents_ns", "agents_sharing_ns", "agents_webhooks_ns"]

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,263 @@
"""Agent management sharing functionality."""
import datetime
import secrets
from bson import DBRef
from bson.objectid import ObjectId
from flask import current_app, jsonify, make_response, request
from flask_restx import fields, Namespace, Resource
from application.api import api
from application.core.settings import settings
from application.api.user.base import (
agents_collection,
db,
ensure_user_doc,
resolve_tool_details,
user_tools_collection,
users_collection,
)
from application.utils import generate_image_url
agents_sharing_ns = Namespace(
"agents", description="Agent management operations", path="/api"
)
@agents_sharing_ns.route("/shared_agent")
class SharedAgent(Resource):
@api.doc(
params={
"token": "Shared token of the agent",
},
description="Get a shared agent by token or ID",
)
def get(self):
shared_token = request.args.get("token")
if not shared_token:
return make_response(
jsonify({"success": False, "message": "Token or ID is required"}), 400
)
try:
query = {
"shared_publicly": True,
"shared_token": shared_token,
}
shared_agent = agents_collection.find_one(query)
if not shared_agent:
return make_response(
jsonify({"success": False, "message": "Shared agent not found"}),
404,
)
agent_id = str(shared_agent["_id"])
data = {
"id": agent_id,
"user": shared_agent.get("user", ""),
"name": shared_agent.get("name", ""),
"image": (
generate_image_url(shared_agent["image"])
if shared_agent.get("image")
else ""
),
"description": shared_agent.get("description", ""),
"source": (
str(source_doc["_id"])
if isinstance(shared_agent.get("source"), DBRef)
and (source_doc := db.dereference(shared_agent.get("source")))
else ""
),
"chunks": shared_agent.get("chunks", "0"),
"retriever": shared_agent.get("retriever", "classic"),
"prompt_id": shared_agent.get("prompt_id", "default"),
"tools": shared_agent.get("tools", []),
"tool_details": resolve_tool_details(shared_agent.get("tools", [])),
"agent_type": shared_agent.get("agent_type", ""),
"status": shared_agent.get("status", ""),
"json_schema": shared_agent.get("json_schema"),
"limited_token_mode": shared_agent.get("limited_token_mode", False),
"token_limit": shared_agent.get("token_limit", settings.DEFAULT_AGENT_LIMITS["token_limit"]),
"limited_request_mode": shared_agent.get("limited_request_mode", False),
"request_limit": shared_agent.get("request_limit", settings.DEFAULT_AGENT_LIMITS["request_limit"]),
"created_at": shared_agent.get("createdAt", ""),
"updated_at": shared_agent.get("updatedAt", ""),
"shared": shared_agent.get("shared_publicly", False),
"shared_token": shared_agent.get("shared_token", ""),
"shared_metadata": shared_agent.get("shared_metadata", {}),
}
if data["tools"]:
enriched_tools = []
for tool in data["tools"]:
tool_data = user_tools_collection.find_one({"_id": ObjectId(tool)})
if tool_data:
enriched_tools.append(tool_data.get("name", ""))
data["tools"] = enriched_tools
decoded_token = getattr(request, "decoded_token", None)
if decoded_token:
user_id = decoded_token.get("sub")
owner_id = shared_agent.get("user")
if user_id != owner_id:
ensure_user_doc(user_id)
users_collection.update_one(
{"user_id": user_id},
{"$addToSet": {"agent_preferences.shared_with_me": agent_id}},
)
return make_response(jsonify(data), 200)
except Exception as err:
current_app.logger.error(f"Error retrieving shared agent: {err}")
return make_response(jsonify({"success": False}), 400)
@agents_sharing_ns.route("/shared_agents")
class SharedAgents(Resource):
@api.doc(description="Get shared agents explicitly shared with the user")
def get(self):
try:
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user_id = decoded_token.get("sub")
user_doc = ensure_user_doc(user_id)
shared_with_ids = user_doc.get("agent_preferences", {}).get(
"shared_with_me", []
)
shared_object_ids = [ObjectId(id) for id in shared_with_ids]
shared_agents_cursor = agents_collection.find(
{"_id": {"$in": shared_object_ids}, "shared_publicly": True}
)
shared_agents = list(shared_agents_cursor)
found_ids_set = {str(agent["_id"]) for agent in shared_agents}
stale_ids = [id for id in shared_with_ids if id not in found_ids_set]
if stale_ids:
users_collection.update_one(
{"user_id": user_id},
{"$pullAll": {"agent_preferences.shared_with_me": stale_ids}},
)
pinned_ids = set(user_doc.get("agent_preferences", {}).get("pinned", []))
list_shared_agents = [
{
"id": str(agent["_id"]),
"name": agent.get("name", ""),
"description": agent.get("description", ""),
"image": (
generate_image_url(agent["image"]) if agent.get("image") else ""
),
"tools": agent.get("tools", []),
"tool_details": resolve_tool_details(agent.get("tools", [])),
"agent_type": agent.get("agent_type", ""),
"status": agent.get("status", ""),
"json_schema": agent.get("json_schema"),
"limited_token_mode": agent.get("limited_token_mode", False),
"token_limit": agent.get("token_limit", settings.DEFAULT_AGENT_LIMITS["token_limit"]),
"limited_request_mode": agent.get("limited_request_mode", False),
"request_limit": agent.get("request_limit", settings.DEFAULT_AGENT_LIMITS["request_limit"]),
"created_at": agent.get("createdAt", ""),
"updated_at": agent.get("updatedAt", ""),
"pinned": str(agent["_id"]) in pinned_ids,
"shared": agent.get("shared_publicly", False),
"shared_token": agent.get("shared_token", ""),
"shared_metadata": agent.get("shared_metadata", {}),
}
for agent in shared_agents
]
return make_response(jsonify(list_shared_agents), 200)
except Exception as err:
current_app.logger.error(f"Error retrieving shared agents: {err}")
return make_response(jsonify({"success": False}), 400)
@agents_sharing_ns.route("/share_agent")
class ShareAgent(Resource):
@api.expect(
api.model(
"ShareAgentModel",
{
"id": fields.String(required=True, description="ID of the agent"),
"shared": fields.Boolean(
required=True, description="Share or unshare the agent"
),
"username": fields.String(
required=False, description="Name of the user"
),
},
)
)
@api.doc(description="Share or unshare an agent")
def put(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
if not data:
return make_response(
jsonify({"success": False, "message": "Missing JSON body"}), 400
)
agent_id = data.get("id")
shared = data.get("shared")
username = data.get("username", "")
if not agent_id:
return make_response(
jsonify({"success": False, "message": "ID is required"}), 400
)
if shared is None:
return make_response(
jsonify(
{
"success": False,
"message": "Shared parameter is required and must be true or false",
}
),
400,
)
try:
try:
agent_oid = ObjectId(agent_id)
except Exception:
return make_response(
jsonify({"success": False, "message": "Invalid agent ID"}), 400
)
agent = agents_collection.find_one({"_id": agent_oid, "user": user})
if not agent:
return make_response(
jsonify({"success": False, "message": "Agent not found"}), 404
)
if shared:
shared_metadata = {
"shared_by": username,
"shared_at": datetime.datetime.now(datetime.timezone.utc),
}
shared_token = secrets.token_urlsafe(32)
agents_collection.update_one(
{"_id": agent_oid, "user": user},
{
"$set": {
"shared_publicly": shared,
"shared_metadata": shared_metadata,
"shared_token": shared_token,
}
},
)
else:
agents_collection.update_one(
{"_id": agent_oid, "user": user},
{"$set": {"shared_publicly": shared, "shared_token": None}},
{"$unset": {"shared_metadata": ""}},
)
except Exception as err:
current_app.logger.error(f"Error sharing/unsharing agent: {err}")
return make_response(jsonify({"success": False, "error": str(err)}), 400)
shared_token = shared_token if shared else None
return make_response(
jsonify({"success": True, "shared_token": shared_token}), 200
)

View File

@@ -0,0 +1,119 @@
"""Agent management webhook handlers."""
import secrets
from bson.objectid import ObjectId
from flask import current_app, jsonify, make_response, request
from flask_restx import Namespace, Resource
from application.api import api
from application.api.user.base import agents_collection, require_agent
from application.api.user.tasks import process_agent_webhook
from application.core.settings import settings
agents_webhooks_ns = Namespace(
"agents", description="Agent management operations", path="/api"
)
@agents_webhooks_ns.route("/agent_webhook")
class AgentWebhook(Resource):
@api.doc(
params={"id": "ID of the agent"},
description="Generate webhook URL for the agent",
)
def get(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
agent_id = request.args.get("id")
if not agent_id:
return make_response(
jsonify({"success": False, "message": "ID is required"}), 400
)
try:
agent = agents_collection.find_one(
{"_id": ObjectId(agent_id), "user": user}
)
if not agent:
return make_response(
jsonify({"success": False, "message": "Agent not found"}), 404
)
webhook_token = agent.get("incoming_webhook_token")
if not webhook_token:
webhook_token = secrets.token_urlsafe(32)
agents_collection.update_one(
{"_id": ObjectId(agent_id), "user": user},
{"$set": {"incoming_webhook_token": webhook_token}},
)
base_url = settings.API_URL.rstrip("/")
full_webhook_url = f"{base_url}/api/webhooks/agents/{webhook_token}"
except Exception as err:
current_app.logger.error(
f"Error generating webhook URL: {err}", exc_info=True
)
return make_response(
jsonify({"success": False, "message": "Error generating webhook URL"}),
400,
)
return make_response(
jsonify({"success": True, "webhook_url": full_webhook_url}), 200
)
@agents_webhooks_ns.route("/webhooks/agents/<string:webhook_token>")
class AgentWebhookListener(Resource):
method_decorators = [require_agent]
def _enqueue_webhook_task(self, agent_id_str, payload, source_method):
if not payload:
current_app.logger.warning(
f"Webhook ({source_method}) received for agent {agent_id_str} with empty payload."
)
current_app.logger.info(
f"Incoming {source_method} webhook for agent {agent_id_str}. Enqueuing task with payload: {payload}"
)
try:
task = process_agent_webhook.delay(
agent_id=agent_id_str,
payload=payload,
)
current_app.logger.info(
f"Task {task.id} enqueued for agent {agent_id_str} ({source_method})."
)
return make_response(jsonify({"success": True, "task_id": task.id}), 200)
except Exception as err:
current_app.logger.error(
f"Error enqueuing webhook task ({source_method}) for agent {agent_id_str}: {err}",
exc_info=True,
)
return make_response(
jsonify({"success": False, "message": "Error processing webhook"}), 500
)
@api.doc(
description="Webhook listener for agent events (POST). Expects JSON payload, which is used to trigger processing.",
)
def post(self, webhook_token, agent, agent_id_str):
payload = request.get_json()
if payload is None:
return make_response(
jsonify(
{
"success": False,
"message": "Invalid or missing JSON data in request body",
}
),
400,
)
return self._enqueue_webhook_task(agent_id_str, payload, source_method="POST")
@api.doc(
description="Webhook listener for agent events (GET). Uses URL query parameters as payload to trigger processing.",
)
def get(self, webhook_token, agent, agent_id_str):
payload = request.args.to_dict(flat=True)
return self._enqueue_webhook_task(agent_id_str, payload, source_method="GET")

View File

@@ -0,0 +1,5 @@
"""Analytics module."""
from .routes import analytics_ns
__all__ = ["analytics_ns"]

View File

@@ -0,0 +1,540 @@
"""Analytics and reporting routes."""
import datetime
from bson.objectid import ObjectId
from flask import current_app, jsonify, make_response, request
from flask_restx import fields, Namespace, Resource
from application.api import api
from application.api.user.base import (
agents_collection,
conversations_collection,
generate_date_range,
generate_hourly_range,
generate_minute_range,
token_usage_collection,
user_logs_collection,
)
analytics_ns = Namespace(
"analytics", description="Analytics and reporting operations", path="/api"
)
@analytics_ns.route("/get_message_analytics")
class GetMessageAnalytics(Resource):
get_message_analytics_model = api.model(
"GetMessageAnalyticsModel",
{
"api_key_id": fields.String(required=False, description="API Key ID"),
"filter_option": fields.String(
required=False,
description="Filter option for analytics",
default="last_30_days",
enum=[
"last_hour",
"last_24_hour",
"last_7_days",
"last_15_days",
"last_30_days",
],
),
},
)
@api.expect(get_message_analytics_model)
@api.doc(description="Get message analytics based on filter option")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
api_key_id = data.get("api_key_id")
filter_option = data.get("filter_option", "last_30_days")
try:
api_key = (
agents_collection.find_one({"_id": ObjectId(api_key_id), "user": user})[
"key"
]
if api_key_id
else None
)
except Exception as err:
current_app.logger.error(f"Error getting API key: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
end_date = datetime.datetime.now(datetime.timezone.utc)
if filter_option == "last_hour":
start_date = end_date - datetime.timedelta(hours=1)
group_format = "%Y-%m-%d %H:%M:00"
elif filter_option == "last_24_hour":
start_date = end_date - datetime.timedelta(hours=24)
group_format = "%Y-%m-%d %H:00"
else:
if filter_option in ["last_7_days", "last_15_days", "last_30_days"]:
filter_days = (
6
if filter_option == "last_7_days"
else 14 if filter_option == "last_15_days" else 29
)
else:
return make_response(
jsonify({"success": False, "message": "Invalid option"}), 400
)
start_date = end_date - datetime.timedelta(days=filter_days)
start_date = start_date.replace(hour=0, minute=0, second=0, microsecond=0)
end_date = end_date.replace(
hour=23, minute=59, second=59, microsecond=999999
)
group_format = "%Y-%m-%d"
try:
match_stage = {
"$match": {
"user": user,
}
}
if api_key:
match_stage["$match"]["api_key"] = api_key
pipeline = [
match_stage,
{"$unwind": "$queries"},
{
"$match": {
"queries.timestamp": {"$gte": start_date, "$lte": end_date}
}
},
{
"$group": {
"_id": {
"$dateToString": {
"format": group_format,
"date": "$queries.timestamp",
}
},
"count": {"$sum": 1},
}
},
{"$sort": {"_id": 1}},
]
message_data = conversations_collection.aggregate(pipeline)
if filter_option == "last_hour":
intervals = generate_minute_range(start_date, end_date)
elif filter_option == "last_24_hour":
intervals = generate_hourly_range(start_date, end_date)
else:
intervals = generate_date_range(start_date, end_date)
daily_messages = {interval: 0 for interval in intervals}
for entry in message_data:
daily_messages[entry["_id"]] = entry["count"]
except Exception as err:
current_app.logger.error(
f"Error getting message analytics: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
return make_response(
jsonify({"success": True, "messages": daily_messages}), 200
)
@analytics_ns.route("/get_token_analytics")
class GetTokenAnalytics(Resource):
get_token_analytics_model = api.model(
"GetTokenAnalyticsModel",
{
"api_key_id": fields.String(required=False, description="API Key ID"),
"filter_option": fields.String(
required=False,
description="Filter option for analytics",
default="last_30_days",
enum=[
"last_hour",
"last_24_hour",
"last_7_days",
"last_15_days",
"last_30_days",
],
),
},
)
@api.expect(get_token_analytics_model)
@api.doc(description="Get token analytics data")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
api_key_id = data.get("api_key_id")
filter_option = data.get("filter_option", "last_30_days")
try:
api_key = (
agents_collection.find_one({"_id": ObjectId(api_key_id), "user": user})[
"key"
]
if api_key_id
else None
)
except Exception as err:
current_app.logger.error(f"Error getting API key: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
end_date = datetime.datetime.now(datetime.timezone.utc)
if filter_option == "last_hour":
start_date = end_date - datetime.timedelta(hours=1)
group_format = "%Y-%m-%d %H:%M:00"
group_stage = {
"$group": {
"_id": {
"minute": {
"$dateToString": {
"format": group_format,
"date": "$timestamp",
}
}
},
"total_tokens": {
"$sum": {"$add": ["$prompt_tokens", "$generated_tokens"]}
},
}
}
elif filter_option == "last_24_hour":
start_date = end_date - datetime.timedelta(hours=24)
group_format = "%Y-%m-%d %H:00"
group_stage = {
"$group": {
"_id": {
"hour": {
"$dateToString": {
"format": group_format,
"date": "$timestamp",
}
}
},
"total_tokens": {
"$sum": {"$add": ["$prompt_tokens", "$generated_tokens"]}
},
}
}
else:
if filter_option in ["last_7_days", "last_15_days", "last_30_days"]:
filter_days = (
6
if filter_option == "last_7_days"
else (14 if filter_option == "last_15_days" else 29)
)
else:
return make_response(
jsonify({"success": False, "message": "Invalid option"}), 400
)
start_date = end_date - datetime.timedelta(days=filter_days)
start_date = start_date.replace(hour=0, minute=0, second=0, microsecond=0)
end_date = end_date.replace(
hour=23, minute=59, second=59, microsecond=999999
)
group_format = "%Y-%m-%d"
group_stage = {
"$group": {
"_id": {
"day": {
"$dateToString": {
"format": group_format,
"date": "$timestamp",
}
}
},
"total_tokens": {
"$sum": {"$add": ["$prompt_tokens", "$generated_tokens"]}
},
}
}
try:
match_stage = {
"$match": {
"user_id": user,
"timestamp": {"$gte": start_date, "$lte": end_date},
}
}
if api_key:
match_stage["$match"]["api_key"] = api_key
token_usage_data = token_usage_collection.aggregate(
[
match_stage,
group_stage,
{"$sort": {"_id": 1}},
]
)
if filter_option == "last_hour":
intervals = generate_minute_range(start_date, end_date)
elif filter_option == "last_24_hour":
intervals = generate_hourly_range(start_date, end_date)
else:
intervals = generate_date_range(start_date, end_date)
daily_token_usage = {interval: 0 for interval in intervals}
for entry in token_usage_data:
if filter_option == "last_hour":
daily_token_usage[entry["_id"]["minute"]] = entry["total_tokens"]
elif filter_option == "last_24_hour":
daily_token_usage[entry["_id"]["hour"]] = entry["total_tokens"]
else:
daily_token_usage[entry["_id"]["day"]] = entry["total_tokens"]
except Exception as err:
current_app.logger.error(
f"Error getting token analytics: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
return make_response(
jsonify({"success": True, "token_usage": daily_token_usage}), 200
)
@analytics_ns.route("/get_feedback_analytics")
class GetFeedbackAnalytics(Resource):
get_feedback_analytics_model = api.model(
"GetFeedbackAnalyticsModel",
{
"api_key_id": fields.String(required=False, description="API Key ID"),
"filter_option": fields.String(
required=False,
description="Filter option for analytics",
default="last_30_days",
enum=[
"last_hour",
"last_24_hour",
"last_7_days",
"last_15_days",
"last_30_days",
],
),
},
)
@api.expect(get_feedback_analytics_model)
@api.doc(description="Get feedback analytics data")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
api_key_id = data.get("api_key_id")
filter_option = data.get("filter_option", "last_30_days")
try:
api_key = (
agents_collection.find_one({"_id": ObjectId(api_key_id), "user": user})[
"key"
]
if api_key_id
else None
)
except Exception as err:
current_app.logger.error(f"Error getting API key: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
end_date = datetime.datetime.now(datetime.timezone.utc)
if filter_option == "last_hour":
start_date = end_date - datetime.timedelta(hours=1)
group_format = "%Y-%m-%d %H:%M:00"
date_field = {
"$dateToString": {
"format": group_format,
"date": "$queries.feedback_timestamp",
}
}
elif filter_option == "last_24_hour":
start_date = end_date - datetime.timedelta(hours=24)
group_format = "%Y-%m-%d %H:00"
date_field = {
"$dateToString": {
"format": group_format,
"date": "$queries.feedback_timestamp",
}
}
else:
if filter_option in ["last_7_days", "last_15_days", "last_30_days"]:
filter_days = (
6
if filter_option == "last_7_days"
else (14 if filter_option == "last_15_days" else 29)
)
else:
return make_response(
jsonify({"success": False, "message": "Invalid option"}), 400
)
start_date = end_date - datetime.timedelta(days=filter_days)
start_date = start_date.replace(hour=0, minute=0, second=0, microsecond=0)
end_date = end_date.replace(
hour=23, minute=59, second=59, microsecond=999999
)
group_format = "%Y-%m-%d"
date_field = {
"$dateToString": {
"format": group_format,
"date": "$queries.feedback_timestamp",
}
}
try:
match_stage = {
"$match": {
"queries.feedback_timestamp": {
"$gte": start_date,
"$lte": end_date,
},
"queries.feedback": {"$exists": True},
}
}
if api_key:
match_stage["$match"]["api_key"] = api_key
pipeline = [
match_stage,
{"$unwind": "$queries"},
{"$match": {"queries.feedback": {"$exists": True}}},
{
"$group": {
"_id": {"time": date_field, "feedback": "$queries.feedback"},
"count": {"$sum": 1},
}
},
{
"$group": {
"_id": "$_id.time",
"positive": {
"$sum": {
"$cond": [
{"$eq": ["$_id.feedback", "LIKE"]},
"$count",
0,
]
}
},
"negative": {
"$sum": {
"$cond": [
{"$eq": ["$_id.feedback", "DISLIKE"]},
"$count",
0,
]
}
},
}
},
{"$sort": {"_id": 1}},
]
feedback_data = conversations_collection.aggregate(pipeline)
if filter_option == "last_hour":
intervals = generate_minute_range(start_date, end_date)
elif filter_option == "last_24_hour":
intervals = generate_hourly_range(start_date, end_date)
else:
intervals = generate_date_range(start_date, end_date)
daily_feedback = {
interval: {"positive": 0, "negative": 0} for interval in intervals
}
for entry in feedback_data:
daily_feedback[entry["_id"]] = {
"positive": entry["positive"],
"negative": entry["negative"],
}
except Exception as err:
current_app.logger.error(
f"Error getting feedback analytics: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
return make_response(
jsonify({"success": True, "feedback": daily_feedback}), 200
)
@analytics_ns.route("/get_user_logs")
class GetUserLogs(Resource):
get_user_logs_model = api.model(
"GetUserLogsModel",
{
"page": fields.Integer(
required=False,
description="Page number for pagination",
default=1,
),
"api_key_id": fields.String(required=False, description="API Key ID"),
"page_size": fields.Integer(
required=False,
description="Number of logs per page",
default=10,
),
},
)
@api.expect(get_user_logs_model)
@api.doc(description="Get user logs with pagination")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
page = int(data.get("page", 1))
api_key_id = data.get("api_key_id")
page_size = int(data.get("page_size", 10))
skip = (page - 1) * page_size
try:
api_key = (
agents_collection.find_one({"_id": ObjectId(api_key_id)})["key"]
if api_key_id
else None
)
except Exception as err:
current_app.logger.error(f"Error getting API key: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
query = {"user": user}
if api_key:
query = {"api_key": api_key}
items_cursor = (
user_logs_collection.find(query)
.sort("timestamp", -1)
.skip(skip)
.limit(page_size + 1)
)
items = list(items_cursor)
results = [
{
"id": str(item.get("_id")),
"action": item.get("action"),
"level": item.get("level"),
"user": item.get("user"),
"question": item.get("question"),
"sources": item.get("sources"),
"retriever_params": item.get("retriever_params"),
"timestamp": item.get("timestamp"),
}
for item in items[:page_size]
]
has_more = len(items) > page_size
return make_response(
jsonify(
{
"success": True,
"logs": results,
"page": page,
"page_size": page_size,
"has_more": has_more,
}
),
200,
)

View File

@@ -0,0 +1,5 @@
"""Attachments module."""
from .routes import attachments_ns
__all__ = ["attachments_ns"]

View File

@@ -0,0 +1,198 @@
"""File attachments and media routes."""
import os
from bson.objectid import ObjectId
from flask import current_app, jsonify, make_response, request
from flask_restx import fields, Namespace, Resource
from application.api import api
from application.api.user.base import agents_collection, storage
from application.api.user.tasks import store_attachment
from application.core.settings import settings
from application.tts.tts_creator import TTSCreator
from application.utils import safe_filename
attachments_ns = Namespace(
"attachments", description="File attachments and media operations", path="/api"
)
@attachments_ns.route("/store_attachment")
class StoreAttachment(Resource):
@api.expect(
api.model(
"AttachmentModel",
{
"file": fields.Raw(required=True, description="File(s) to upload"),
"api_key": fields.String(
required=False, description="API key (optional)"
),
},
)
)
@api.doc(
description="Stores one or multiple attachments without vectorization or training. Supports user or API key authentication."
)
def post(self):
decoded_token = getattr(request, "decoded_token", None)
api_key = request.form.get("api_key") or request.args.get("api_key")
files = request.files.getlist("file")
if not files:
single_file = request.files.get("file")
if single_file:
files = [single_file]
if not files or all(f.filename == "" for f in files):
return make_response(
jsonify({"status": "error", "message": "Missing file(s)"}),
400,
)
user = None
if decoded_token:
user = safe_filename(decoded_token.get("sub"))
elif api_key:
agent = agents_collection.find_one({"key": api_key})
if not agent:
return make_response(
jsonify({"success": False, "message": "Invalid API key"}), 401
)
user = safe_filename(agent.get("user"))
else:
return make_response(
jsonify({"success": False, "message": "Authentication required"}), 401
)
try:
tasks = []
errors = []
original_file_count = len(files)
for idx, file in enumerate(files):
try:
attachment_id = ObjectId()
original_filename = safe_filename(os.path.basename(file.filename))
relative_path = f"{settings.UPLOAD_FOLDER}/{user}/attachments/{str(attachment_id)}/{original_filename}"
metadata = storage.save_file(file, relative_path)
file_info = {
"filename": original_filename,
"attachment_id": str(attachment_id),
"path": relative_path,
"metadata": metadata,
}
task = store_attachment.delay(file_info, user)
tasks.append({
"task_id": task.id,
"filename": original_filename,
"attachment_id": str(attachment_id),
})
except Exception as file_err:
current_app.logger.error(f"Error processing file {idx} ({file.filename}): {file_err}", exc_info=True)
errors.append({
"filename": file.filename,
"error": str(file_err)
})
if not tasks:
error_msg = "No valid files to upload"
if errors:
error_msg += f". Errors: {errors}"
return make_response(
jsonify({"status": "error", "message": error_msg, "errors": errors}),
400,
)
if original_file_count == 1 and len(tasks) == 1:
current_app.logger.info("Returning single task_id response")
return make_response(
jsonify(
{
"success": True,
"task_id": tasks[0]["task_id"],
"message": "File uploaded successfully. Processing started.",
}
),
200,
)
else:
response_data = {
"success": True,
"tasks": tasks,
"message": f"{len(tasks)} file(s) uploaded successfully. Processing started.",
}
if errors:
response_data["errors"] = errors
response_data["message"] += f" {len(errors)} file(s) failed."
return make_response(
jsonify(response_data),
200,
)
except Exception as err:
current_app.logger.error(f"Error storing attachment: {err}", exc_info=True)
return make_response(jsonify({"success": False, "error": str(err)}), 400)
@attachments_ns.route("/images/<path:image_path>")
class ServeImage(Resource):
@api.doc(description="Serve an image from storage")
def get(self, image_path):
try:
file_obj = storage.get_file(image_path)
extension = image_path.split(".")[-1].lower()
content_type = f"image/{extension}"
if extension == "jpg":
content_type = "image/jpeg"
response = make_response(file_obj.read())
response.headers.set("Content-Type", content_type)
response.headers.set("Cache-Control", "max-age=86400")
return response
except FileNotFoundError:
return make_response(
jsonify({"success": False, "message": "Image not found"}), 404
)
except Exception as e:
current_app.logger.error(f"Error serving image: {e}")
return make_response(
jsonify({"success": False, "message": "Error retrieving image"}), 500
)
@attachments_ns.route("/tts")
class TextToSpeech(Resource):
tts_model = api.model(
"TextToSpeechModel",
{
"text": fields.String(
required=True, description="Text to be synthesized as audio"
),
},
)
@api.expect(tts_model)
@api.doc(description="Synthesize audio speech from text")
def post(self):
data = request.get_json()
text = data["text"]
try:
tts_instance = TTSCreator.create_tts(settings.TTS_PROVIDER)
audio_base64, detected_language = tts_instance.text_to_speech(text)
return make_response(
jsonify(
{
"success": True,
"audio_base64": audio_base64,
"lang": detected_language,
}
),
200,
)
except Exception as err:
current_app.logger.error(f"Error synthesizing audio: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)

View File

@@ -0,0 +1,222 @@
"""
Shared utilities, database connections, and helper functions for user API routes.
"""
import datetime
import os
import uuid
from functools import wraps
from typing import Optional, Tuple
from bson.objectid import ObjectId
from flask import current_app, jsonify, make_response, Response
from pymongo import ReturnDocument
from werkzeug.utils import secure_filename
from application.core.mongo_db import MongoDB
from application.core.settings import settings
from application.storage.storage_creator import StorageCreator
from application.vectorstore.vector_creator import VectorCreator
storage = StorageCreator.get_storage()
mongo = MongoDB.get_client()
db = mongo[settings.MONGO_DB_NAME]
conversations_collection = db["conversations"]
sources_collection = db["sources"]
prompts_collection = db["prompts"]
feedback_collection = db["feedback"]
agents_collection = db["agents"]
token_usage_collection = db["token_usage"]
shared_conversations_collections = db["shared_conversations"]
users_collection = db["users"]
user_logs_collection = db["user_logs"]
user_tools_collection = db["user_tools"]
attachments_collection = db["attachments"]
try:
agents_collection.create_index(
[("shared", 1)],
name="shared_index",
background=True,
)
users_collection.create_index("user_id", unique=True)
except Exception as e:
print("Error creating indexes:", e)
current_dir = os.path.dirname(
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
)
def generate_minute_range(start_date, end_date):
"""Generate a dictionary with minute-level time ranges."""
return {
(start_date + datetime.timedelta(minutes=i)).strftime("%Y-%m-%d %H:%M:00"): 0
for i in range(int((end_date - start_date).total_seconds() // 60) + 1)
}
def generate_hourly_range(start_date, end_date):
"""Generate a dictionary with hourly time ranges."""
return {
(start_date + datetime.timedelta(hours=i)).strftime("%Y-%m-%d %H:00"): 0
for i in range(int((end_date - start_date).total_seconds() // 3600) + 1)
}
def generate_date_range(start_date, end_date):
"""Generate a dictionary with daily date ranges."""
return {
(start_date + datetime.timedelta(days=i)).strftime("%Y-%m-%d"): 0
for i in range((end_date - start_date).days + 1)
}
def ensure_user_doc(user_id):
"""
Ensure user document exists with proper agent preferences structure.
Args:
user_id: The user ID to ensure
Returns:
The user document
"""
default_prefs = {
"pinned": [],
"shared_with_me": [],
}
user_doc = users_collection.find_one_and_update(
{"user_id": user_id},
{"$setOnInsert": {"agent_preferences": default_prefs}},
upsert=True,
return_document=ReturnDocument.AFTER,
)
prefs = user_doc.get("agent_preferences", {})
updates = {}
if "pinned" not in prefs:
updates["agent_preferences.pinned"] = []
if "shared_with_me" not in prefs:
updates["agent_preferences.shared_with_me"] = []
if updates:
users_collection.update_one({"user_id": user_id}, {"$set": updates})
user_doc = users_collection.find_one({"user_id": user_id})
return user_doc
def resolve_tool_details(tool_ids):
"""
Resolve tool IDs to their details.
Args:
tool_ids: List of tool IDs
Returns:
List of tool details with id, name, and display_name
"""
tools = user_tools_collection.find(
{"_id": {"$in": [ObjectId(tid) for tid in tool_ids]}}
)
return [
{
"id": str(tool["_id"]),
"name": tool.get("name", ""),
"display_name": tool.get("displayName", tool.get("name", "")),
}
for tool in tools
]
def get_vector_store(source_id):
"""
Get the Vector Store for a given source ID.
Args:
source_id (str): source id of the document
Returns:
Vector store instance
"""
store = VectorCreator.create_vectorstore(
settings.VECTOR_STORE,
source_id=source_id,
embeddings_key=os.getenv("EMBEDDINGS_KEY"),
)
return store
def handle_image_upload(
request, existing_url: str, user: str, storage, base_path: str = "attachments/"
) -> Tuple[str, Optional[Response]]:
"""
Handle image file upload from request.
Args:
request: Flask request object
existing_url: Existing image URL (fallback)
user: User ID
storage: Storage instance
base_path: Base path for upload
Returns:
Tuple of (image_url, error_response)
"""
image_url = existing_url
if "image" in request.files:
file = request.files["image"]
if file.filename != "":
filename = secure_filename(file.filename)
upload_path = f"{settings.UPLOAD_FOLDER.rstrip('/')}/{user}/{base_path.rstrip('/')}/{uuid.uuid4()}_{filename}"
try:
storage.save_file(file, upload_path, storage_class="STANDARD")
image_url = upload_path
except Exception as e:
current_app.logger.error(f"Error uploading image: {e}")
return None, make_response(
jsonify({"success": False, "message": "Image upload failed"}),
400,
)
return image_url, None
def require_agent(func):
"""
Decorator to require valid agent webhook token.
Args:
func: Function to decorate
Returns:
Wrapped function
"""
@wraps(func)
def wrapper(*args, **kwargs):
webhook_token = kwargs.get("webhook_token")
if not webhook_token:
return make_response(
jsonify({"success": False, "message": "Webhook token missing"}), 400
)
agent = agents_collection.find_one(
{"incoming_webhook_token": webhook_token}, {"_id": 1}
)
if not agent:
current_app.logger.warning(
f"Webhook attempt with invalid token: {webhook_token}"
)
return make_response(
jsonify({"success": False, "message": "Agent not found"}), 404
)
kwargs["agent"] = agent
kwargs["agent_id_str"] = str(agent["_id"])
return func(*args, **kwargs)
return wrapper

View File

@@ -0,0 +1,5 @@
"""Conversation management module."""
from .routes import conversations_ns
__all__ = ["conversations_ns"]

View File

@@ -0,0 +1,280 @@
"""Conversation management routes."""
import datetime
from bson.objectid import ObjectId
from flask import current_app, jsonify, make_response, request
from flask_restx import fields, Namespace, Resource
from application.api import api
from application.api.user.base import attachments_collection, conversations_collection
from application.utils import check_required_fields
conversations_ns = Namespace(
"conversations", description="Conversation management operations", path="/api"
)
@conversations_ns.route("/delete_conversation")
class DeleteConversation(Resource):
@api.doc(
description="Deletes a conversation by ID",
params={"id": "The ID of the conversation to delete"},
)
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
conversation_id = request.args.get("id")
if not conversation_id:
return make_response(
jsonify({"success": False, "message": "ID is required"}), 400
)
try:
conversations_collection.delete_one(
{"_id": ObjectId(conversation_id), "user": decoded_token["sub"]}
)
except Exception as err:
current_app.logger.error(
f"Error deleting conversation: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True}), 200)
@conversations_ns.route("/delete_all_conversations")
class DeleteAllConversations(Resource):
@api.doc(
description="Deletes all conversations for a specific user",
)
def get(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user_id = decoded_token.get("sub")
try:
conversations_collection.delete_many({"user": user_id})
except Exception as err:
current_app.logger.error(
f"Error deleting all conversations: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True}), 200)
@conversations_ns.route("/get_conversations")
class GetConversations(Resource):
@api.doc(
description="Retrieve a list of the latest 30 conversations (excluding API key conversations)",
)
def get(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
try:
conversations = (
conversations_collection.find(
{
"$or": [
{"api_key": {"$exists": False}},
{"agent_id": {"$exists": True}},
],
"user": decoded_token.get("sub"),
}
)
.sort("date", -1)
.limit(30)
)
list_conversations = [
{
"id": str(conversation["_id"]),
"name": conversation["name"],
"agent_id": conversation.get("agent_id", None),
"is_shared_usage": conversation.get("is_shared_usage", False),
"shared_token": conversation.get("shared_token", None),
}
for conversation in conversations
]
except Exception as err:
current_app.logger.error(
f"Error retrieving conversations: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify(list_conversations), 200)
@conversations_ns.route("/get_single_conversation")
class GetSingleConversation(Resource):
@api.doc(
description="Retrieve a single conversation by ID",
params={"id": "The conversation ID"},
)
def get(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
conversation_id = request.args.get("id")
if not conversation_id:
return make_response(
jsonify({"success": False, "message": "ID is required"}), 400
)
try:
conversation = conversations_collection.find_one(
{"_id": ObjectId(conversation_id), "user": decoded_token.get("sub")}
)
if not conversation:
return make_response(jsonify({"status": "not found"}), 404)
# Process queries to include attachment names
queries = conversation["queries"]
for query in queries:
if "attachments" in query and query["attachments"]:
attachment_details = []
for attachment_id in query["attachments"]:
try:
attachment = attachments_collection.find_one(
{"_id": ObjectId(attachment_id)}
)
if attachment:
attachment_details.append(
{
"id": str(attachment["_id"]),
"fileName": attachment.get(
"filename", "Unknown file"
),
}
)
except Exception as e:
current_app.logger.error(
f"Error retrieving attachment {attachment_id}: {e}",
exc_info=True,
)
query["attachments"] = attachment_details
except Exception as err:
current_app.logger.error(
f"Error retrieving conversation: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
data = {
"queries": queries,
"agent_id": conversation.get("agent_id"),
"is_shared_usage": conversation.get("is_shared_usage", False),
"shared_token": conversation.get("shared_token", None),
}
return make_response(jsonify(data), 200)
@conversations_ns.route("/update_conversation_name")
class UpdateConversationName(Resource):
@api.expect(
api.model(
"UpdateConversationModel",
{
"id": fields.String(required=True, description="Conversation ID"),
"name": fields.String(
required=True, description="New name of the conversation"
),
},
)
)
@api.doc(
description="Updates the name of a conversation",
)
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
data = request.get_json()
required_fields = ["id", "name"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
conversations_collection.update_one(
{"_id": ObjectId(data["id"]), "user": decoded_token.get("sub")},
{"$set": {"name": data["name"]}},
)
except Exception as err:
current_app.logger.error(
f"Error updating conversation name: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True}), 200)
@conversations_ns.route("/feedback")
class SubmitFeedback(Resource):
@api.expect(
api.model(
"FeedbackModel",
{
"question": fields.String(
required=False, description="The user question"
),
"answer": fields.String(required=False, description="The AI answer"),
"feedback": fields.String(required=True, description="User feedback"),
"question_index": fields.Integer(
required=True,
description="The question number in that particular conversation",
),
"conversation_id": fields.String(
required=True, description="id of the particular conversation"
),
"api_key": fields.String(description="Optional API key"),
},
)
)
@api.doc(
description="Submit feedback for a conversation",
)
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
data = request.get_json()
required_fields = ["feedback", "conversation_id", "question_index"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
if data["feedback"] is None:
# Remove feedback and feedback_timestamp if feedback is null
conversations_collection.update_one(
{
"_id": ObjectId(data["conversation_id"]),
"user": decoded_token.get("sub"),
f"queries.{data['question_index']}": {"$exists": True},
},
{
"$unset": {
f"queries.{data['question_index']}.feedback": "",
f"queries.{data['question_index']}.feedback_timestamp": "",
}
},
)
else:
# Set feedback and feedback_timestamp if feedback has a value
conversations_collection.update_one(
{
"_id": ObjectId(data["conversation_id"]),
"user": decoded_token.get("sub"),
f"queries.{data['question_index']}": {"$exists": True},
},
{
"$set": {
f"queries.{data['question_index']}.feedback": data[
"feedback"
],
f"queries.{data['question_index']}.feedback_timestamp": datetime.datetime.now(
datetime.timezone.utc
),
}
},
)
except Exception as err:
current_app.logger.error(f"Error submitting feedback: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True}), 200)

View File

@@ -0,0 +1,5 @@
"""Prompts module."""
from .routes import prompts_ns
__all__ = ["prompts_ns"]

View File

@@ -0,0 +1,191 @@
"""Prompt management routes."""
import os
from bson.objectid import ObjectId
from flask import current_app, jsonify, make_response, request
from flask_restx import fields, Namespace, Resource
from application.api import api
from application.api.user.base import current_dir, prompts_collection
from application.utils import check_required_fields
prompts_ns = Namespace(
"prompts", description="Prompt management operations", path="/api"
)
@prompts_ns.route("/create_prompt")
class CreatePrompt(Resource):
create_prompt_model = api.model(
"CreatePromptModel",
{
"content": fields.String(
required=True, description="Content of the prompt"
),
"name": fields.String(required=True, description="Name of the prompt"),
},
)
@api.expect(create_prompt_model)
@api.doc(description="Create a new prompt")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
data = request.get_json()
required_fields = ["content", "name"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
user = decoded_token.get("sub")
try:
resp = prompts_collection.insert_one(
{
"name": data["name"],
"content": data["content"],
"user": user,
}
)
new_id = str(resp.inserted_id)
except Exception as err:
current_app.logger.error(f"Error creating prompt: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"id": new_id}), 200)
@prompts_ns.route("/get_prompts")
class GetPrompts(Resource):
@api.doc(description="Get all prompts for the user")
def get(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
try:
prompts = prompts_collection.find({"user": user})
list_prompts = [
{"id": "default", "name": "default", "type": "public"},
{"id": "creative", "name": "creative", "type": "public"},
{"id": "strict", "name": "strict", "type": "public"},
]
for prompt in prompts:
list_prompts.append(
{
"id": str(prompt["_id"]),
"name": prompt["name"],
"type": "private",
}
)
except Exception as err:
current_app.logger.error(f"Error retrieving prompts: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify(list_prompts), 200)
@prompts_ns.route("/get_single_prompt")
class GetSinglePrompt(Resource):
@api.doc(params={"id": "ID of the prompt"}, description="Get a single prompt by ID")
def get(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
prompt_id = request.args.get("id")
if not prompt_id:
return make_response(
jsonify({"success": False, "message": "ID is required"}), 400
)
try:
if prompt_id == "default":
with open(
os.path.join(current_dir, "prompts", "chat_combine_default.txt"),
"r",
) as f:
chat_combine_template = f.read()
return make_response(jsonify({"content": chat_combine_template}), 200)
elif prompt_id == "creative":
with open(
os.path.join(current_dir, "prompts", "chat_combine_creative.txt"),
"r",
) as f:
chat_reduce_creative = f.read()
return make_response(jsonify({"content": chat_reduce_creative}), 200)
elif prompt_id == "strict":
with open(
os.path.join(current_dir, "prompts", "chat_combine_strict.txt"), "r"
) as f:
chat_reduce_strict = f.read()
return make_response(jsonify({"content": chat_reduce_strict}), 200)
prompt = prompts_collection.find_one(
{"_id": ObjectId(prompt_id), "user": user}
)
except Exception as err:
current_app.logger.error(f"Error retrieving prompt: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"content": prompt["content"]}), 200)
@prompts_ns.route("/delete_prompt")
class DeletePrompt(Resource):
delete_prompt_model = api.model(
"DeletePromptModel",
{"id": fields.String(required=True, description="Prompt ID to delete")},
)
@api.expect(delete_prompt_model)
@api.doc(description="Delete a prompt by ID")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
required_fields = ["id"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
prompts_collection.delete_one({"_id": ObjectId(data["id"]), "user": user})
except Exception as err:
current_app.logger.error(f"Error deleting prompt: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True}), 200)
@prompts_ns.route("/update_prompt")
class UpdatePrompt(Resource):
update_prompt_model = api.model(
"UpdatePromptModel",
{
"id": fields.String(required=True, description="Prompt ID to update"),
"name": fields.String(required=True, description="New name of the prompt"),
"content": fields.String(
required=True, description="New content of the prompt"
),
},
)
@api.expect(update_prompt_model)
@api.doc(description="Update an existing prompt")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
required_fields = ["id", "name", "content"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
prompts_collection.update_one(
{"_id": ObjectId(data["id"]), "user": user},
{"$set": {"name": data["name"], "content": data["content"]}},
)
except Exception as err:
current_app.logger.error(f"Error updating prompt: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True}), 200)

View File

@@ -1,321 +1,48 @@
import os
from flask import Blueprint, request, jsonify
import requests
from pymongo import MongoClient
from bson.objectid import ObjectId
from werkzeug.utils import secure_filename
"""
Main user API routes - registers all namespace modules.
"""
from application.api.user.tasks import ingest
from flask import Blueprint
from application.core.settings import settings
from application.vectorstore.vector_creator import VectorCreator
from application.api import api
from .agents import agents_ns, agents_sharing_ns, agents_webhooks_ns
mongo = MongoClient(settings.MONGO_URI)
db = mongo["docsgpt"]
conversations_collection = db["conversations"]
vectors_collection = db["vectors"]
prompts_collection = db["prompts"]
feedback_collection = db["feedback"]
user = Blueprint('user', __name__)
current_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
@user.route("/api/delete_conversation", methods=["POST"])
def delete_conversation():
# deletes a conversation from the database
conversation_id = request.args.get("id")
# write to mongodb
conversations_collection.delete_one(
{
"_id": ObjectId(conversation_id),
}
)
return {"status": "ok"}
@user.route("/api/get_conversations", methods=["get"])
def get_conversations():
# provides a list of conversations
conversations = conversations_collection.find().sort("date", -1)
list_conversations = []
for conversation in conversations:
list_conversations.append({"id": str(conversation["_id"]), "name": conversation["name"]})
#list_conversations = [{"id": "default", "name": "default"}, {"id": "jeff", "name": "jeff"}]
return jsonify(list_conversations)
from .analytics import analytics_ns
from .attachments import attachments_ns
from .conversations import conversations_ns
from .prompts import prompts_ns
from .sharing import sharing_ns
from .sources import sources_chunks_ns, sources_ns, sources_upload_ns
from .tools import tools_mcp_ns, tools_ns
@user.route("/api/get_single_conversation", methods=["get"])
def get_single_conversation():
# provides data for a conversation
conversation_id = request.args.get("id")
conversation = conversations_collection.find_one({"_id": ObjectId(conversation_id)})
return jsonify(conversation['queries'])
user = Blueprint("user", __name__)
@user.route("/api/update_conversation_name", methods=["POST"])
def update_conversation_name():
# update data for a conversation
data = request.get_json()
id = data["id"]
name = data["name"]
conversations_collection.update_one({"_id": ObjectId(id)},{"$set":{"name":name}})
return {"status": "ok"}
# Analytics
api.add_namespace(analytics_ns)
# Attachments
api.add_namespace(attachments_ns)
@user.route("/api/feedback", methods=["POST"])
def api_feedback():
data = request.get_json()
question = data["question"]
answer = data["answer"]
feedback = data["feedback"]
feedback_collection.insert_one(
{
"question": question,
"answer": answer,
"feedback": feedback,
}
)
return {"status": "ok"}
@user.route("/api/delete_by_ids", methods=["get"])
def delete_by_ids():
"""Delete by ID. These are the IDs in the vectorstore"""
ids = request.args.get("path")
if not ids:
return {"status": "error"}
if settings.VECTOR_STORE == "faiss":
result = vectors_collection.delete_index(ids=ids)
if result:
return {"status": "ok"}
return {"status": "error"}
@user.route("/api/delete_old", methods=["get"])
def delete_old():
"""Delete old indexes."""
import shutil
path = request.args.get("path")
dirs = path.split("/")
dirs_clean = []
for i in range(0, len(dirs)):
dirs_clean.append(secure_filename(dirs[i]))
# check that path strats with indexes or vectors
if dirs_clean[0] not in ["indexes", "vectors"]:
return {"status": "error"}
path_clean = "/".join(dirs_clean)
vectors_collection.delete_one({"name": dirs_clean[-1], 'user': dirs_clean[-2]})
if settings.VECTOR_STORE == "faiss":
try:
shutil.rmtree(os.path.join(current_dir, path_clean))
except FileNotFoundError:
pass
else:
vetorstore = VectorCreator.create_vectorstore(
settings.VECTOR_STORE, path=os.path.join(current_dir, path_clean)
)
vetorstore.delete_index()
return {"status": "ok"}
@user.route("/api/upload", methods=["POST"])
def upload_file():
"""Upload a file to get vectorized and indexed."""
if "user" not in request.form:
return {"status": "no user"}
user = secure_filename(request.form["user"])
if "name" not in request.form:
return {"status": "no name"}
job_name = secure_filename(request.form["name"])
# check if the post request has the file part
if "file" not in request.files:
print("No file part")
return {"status": "no file"}
file = request.files["file"]
if file.filename == "":
return {"status": "no file name"}
if file:
filename = secure_filename(file.filename)
# save dir
save_dir = os.path.join(current_dir, settings.UPLOAD_FOLDER, user, job_name)
# create dir if not exists
if not os.path.exists(save_dir):
os.makedirs(save_dir)
file.save(os.path.join(save_dir, filename))
task = ingest.delay(settings.UPLOAD_FOLDER, [".rst", ".md", ".pdf", ".txt", ".docx",
".csv", ".epub", ".html", ".mdx"],
job_name, filename, user)
# task id
task_id = task.id
return {"status": "ok", "task_id": task_id}
else:
return {"status": "error"}
@user.route("/api/task_status", methods=["GET"])
def task_status():
"""Get celery job status."""
task_id = request.args.get("task_id")
from application.celery import celery
task = celery.AsyncResult(task_id)
task_meta = task.info
return {"status": task.status, "result": task_meta}
@user.route("/api/combine", methods=["GET"])
def combined_json():
user = "local"
"""Provide json file with combined available indexes."""
# get json from https://d3dg1063dc54p9.cloudfront.net/combined.json
data = [
{
"name": "default",
"language": "default",
"version": "",
"description": "default",
"fullName": "default",
"date": "default",
"docLink": "default",
"model": settings.EMBEDDINGS_NAME,
"location": "remote",
}
]
# structure: name, language, version, description, fullName, date, docLink
# append data from vectors_collection
for index in vectors_collection.find({"user": user}):
data.append(
{
"name": index["name"],
"language": index["language"],
"version": "",
"description": index["name"],
"fullName": index["name"],
"date": index["date"],
"docLink": index["location"],
"model": settings.EMBEDDINGS_NAME,
"location": "local",
}
)
if settings.VECTOR_STORE == "faiss":
data_remote = requests.get("https://d3dg1063dc54p9.cloudfront.net/combined.json").json()
for index in data_remote:
index["location"] = "remote"
data.append(index)
return jsonify(data)
@user.route("/api/docs_check", methods=["POST"])
def check_docs():
# check if docs exist in a vectorstore folder
data = request.get_json()
# split docs on / and take first part
if data["docs"].split("/")[0] == "local":
return {"status": "exists"}
vectorstore = "vectors/" + data["docs"]
base_path = "https://raw.githubusercontent.com/arc53/DocsHUB/main/"
if os.path.exists(vectorstore) or data["docs"] == "default":
return {"status": "exists"}
else:
r = requests.get(base_path + vectorstore + "index.faiss")
if r.status_code != 200:
return {"status": "null"}
else:
if not os.path.exists(vectorstore):
os.makedirs(vectorstore)
with open(vectorstore + "index.faiss", "wb") as f:
f.write(r.content)
# download the store
r = requests.get(base_path + vectorstore + "index.pkl")
with open(vectorstore + "index.pkl", "wb") as f:
f.write(r.content)
return {"status": "loaded"}
@user.route("/api/create_prompt", methods=["POST"])
def create_prompt():
data = request.get_json()
content = data["content"]
name = data["name"]
if name == "":
return {"status": "error"}
user = "local"
resp = prompts_collection.insert_one(
{
"name": name,
"content": content,
"user": user,
}
)
new_id = str(resp.inserted_id)
return {"id": new_id}
@user.route("/api/get_prompts", methods=["GET"])
def get_prompts():
user = "local"
prompts = prompts_collection.find({"user": user})
list_prompts = []
list_prompts.append({"id": "default", "name": "default", "type": "public"})
list_prompts.append({"id": "creative", "name": "creative", "type": "public"})
list_prompts.append({"id": "strict", "name": "strict", "type": "public"})
for prompt in prompts:
list_prompts.append({"id": str(prompt["_id"]), "name": prompt["name"], "type": "private"})
return jsonify(list_prompts)
@user.route("/api/get_single_prompt", methods=["GET"])
def get_single_prompt():
prompt_id = request.args.get("id")
if prompt_id == 'default':
with open(os.path.join(current_dir, "prompts", "chat_combine_default.txt"), "r") as f:
chat_combine_template = f.read()
return jsonify({"content": chat_combine_template})
elif prompt_id == 'creative':
with open(os.path.join(current_dir, "prompts", "chat_combine_creative.txt"), "r") as f:
chat_reduce_creative = f.read()
return jsonify({"content": chat_reduce_creative})
elif prompt_id == 'strict':
with open(os.path.join(current_dir, "prompts", "chat_combine_strict.txt"), "r") as f:
chat_reduce_strict = f.read()
return jsonify({"content": chat_reduce_strict})
prompt = prompts_collection.find_one({"_id": ObjectId(prompt_id)})
return jsonify({"content": prompt["content"]})
@user.route("/api/delete_prompt", methods=["POST"])
def delete_prompt():
data = request.get_json()
id = data["id"]
prompts_collection.delete_one(
{
"_id": ObjectId(id),
}
)
return {"status": "ok"}
@user.route("/api/update_prompt", methods=["POST"])
def update_prompt_name():
data = request.get_json()
id = data["id"]
name = data["name"]
content = data["content"]
# check if name is null
if name == "":
return {"status": "error"}
prompts_collection.update_one({"_id": ObjectId(id)},{"$set":{"name":name, "content": content}})
return {"status": "ok"}
# Conversations
api.add_namespace(conversations_ns)
# Agents (main, sharing, webhooks)
api.add_namespace(agents_ns)
api.add_namespace(agents_sharing_ns)
api.add_namespace(agents_webhooks_ns)
# Prompts
api.add_namespace(prompts_ns)
# Sharing
api.add_namespace(sharing_ns)
# Sources (main, chunks, upload)
api.add_namespace(sources_ns)
api.add_namespace(sources_chunks_ns)
api.add_namespace(sources_upload_ns)
# Tools (main, MCP)
api.add_namespace(tools_ns)
api.add_namespace(tools_mcp_ns)

View File

@@ -0,0 +1,5 @@
"""Sharing module."""
from .routes import sharing_ns
__all__ = ["sharing_ns"]

View File

@@ -0,0 +1,289 @@
"""Conversation sharing routes."""
import uuid
from bson.binary import Binary, UuidRepresentation
from bson.dbref import DBRef
from bson.objectid import ObjectId
from flask import current_app, jsonify, make_response, request
from flask_restx import fields, inputs, Namespace, Resource
from application.api import api
from application.api.user.base import (
agents_collection,
attachments_collection,
conversations_collection,
shared_conversations_collections,
)
from application.utils import check_required_fields
sharing_ns = Namespace(
"sharing", description="Conversation sharing operations", path="/api"
)
@sharing_ns.route("/share")
class ShareConversation(Resource):
share_conversation_model = api.model(
"ShareConversationModel",
{
"conversation_id": fields.String(
required=True, description="Conversation ID"
),
"user": fields.String(description="User ID (optional)"),
"prompt_id": fields.String(description="Prompt ID (optional)"),
"chunks": fields.Integer(description="Chunks count (optional)"),
},
)
@api.expect(share_conversation_model)
@api.doc(description="Share a conversation")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
required_fields = ["conversation_id"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
is_promptable = request.args.get("isPromptable", type=inputs.boolean)
if is_promptable is None:
return make_response(
jsonify({"success": False, "message": "isPromptable is required"}), 400
)
conversation_id = data["conversation_id"]
try:
conversation = conversations_collection.find_one(
{"_id": ObjectId(conversation_id)}
)
if conversation is None:
return make_response(
jsonify(
{
"status": "error",
"message": "Conversation does not exist",
}
),
404,
)
current_n_queries = len(conversation["queries"])
explicit_binary = Binary.from_uuid(
uuid.uuid4(), UuidRepresentation.STANDARD
)
if is_promptable:
prompt_id = data.get("prompt_id", "default")
chunks = data.get("chunks", "2")
name = conversation["name"] + "(shared)"
new_api_key_data = {
"prompt_id": prompt_id,
"chunks": chunks,
"user": user,
}
if "source" in data and ObjectId.is_valid(data["source"]):
new_api_key_data["source"] = DBRef(
"sources", ObjectId(data["source"])
)
if "retriever" in data:
new_api_key_data["retriever"] = data["retriever"]
pre_existing_api_document = agents_collection.find_one(new_api_key_data)
if pre_existing_api_document:
api_uuid = pre_existing_api_document["key"]
pre_existing = shared_conversations_collections.find_one(
{
"conversation_id": ObjectId(conversation_id),
"isPromptable": is_promptable,
"first_n_queries": current_n_queries,
"user": user,
"api_key": api_uuid,
}
)
if pre_existing is not None:
return make_response(
jsonify(
{
"success": True,
"identifier": str(pre_existing["uuid"].as_uuid()),
}
),
200,
)
else:
shared_conversations_collections.insert_one(
{
"uuid": explicit_binary,
"conversation_id": ObjectId(conversation_id),
"isPromptable": is_promptable,
"first_n_queries": current_n_queries,
"user": user,
"api_key": api_uuid,
}
)
return make_response(
jsonify(
{
"success": True,
"identifier": str(explicit_binary.as_uuid()),
}
),
201,
)
else:
api_uuid = str(uuid.uuid4())
new_api_key_data["key"] = api_uuid
new_api_key_data["name"] = name
if "source" in data and ObjectId.is_valid(data["source"]):
new_api_key_data["source"] = DBRef(
"sources", ObjectId(data["source"])
)
if "retriever" in data:
new_api_key_data["retriever"] = data["retriever"]
agents_collection.insert_one(new_api_key_data)
shared_conversations_collections.insert_one(
{
"uuid": explicit_binary,
"conversation_id": ObjectId(conversation_id),
"isPromptable": is_promptable,
"first_n_queries": current_n_queries,
"user": user,
"api_key": api_uuid,
}
)
return make_response(
jsonify(
{
"success": True,
"identifier": str(explicit_binary.as_uuid()),
}
),
201,
)
pre_existing = shared_conversations_collections.find_one(
{
"conversation_id": ObjectId(conversation_id),
"isPromptable": is_promptable,
"first_n_queries": current_n_queries,
"user": user,
}
)
if pre_existing is not None:
return make_response(
jsonify(
{
"success": True,
"identifier": str(pre_existing["uuid"].as_uuid()),
}
),
200,
)
else:
shared_conversations_collections.insert_one(
{
"uuid": explicit_binary,
"conversation_id": ObjectId(conversation_id),
"isPromptable": is_promptable,
"first_n_queries": current_n_queries,
"user": user,
}
)
return make_response(
jsonify(
{"success": True, "identifier": str(explicit_binary.as_uuid())}
),
201,
)
except Exception as err:
current_app.logger.error(
f"Error sharing conversation: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
@sharing_ns.route("/shared_conversation/<string:identifier>")
class GetPubliclySharedConversations(Resource):
@api.doc(description="Get publicly shared conversations by identifier")
def get(self, identifier: str):
try:
query_uuid = Binary.from_uuid(
uuid.UUID(identifier), UuidRepresentation.STANDARD
)
shared = shared_conversations_collections.find_one({"uuid": query_uuid})
conversation_queries = []
if (
shared
and "conversation_id" in shared
):
# conversation_id is now stored as an ObjectId, not a DBRef
conversation_id = shared["conversation_id"]
conversation = conversations_collection.find_one(
{"_id": conversation_id}
)
if conversation is None:
return make_response(
jsonify(
{
"success": False,
"error": "might have broken url or the conversation does not exist",
}
),
404,
)
conversation_queries = conversation["queries"][
: (shared["first_n_queries"])
]
for query in conversation_queries:
if "attachments" in query and query["attachments"]:
attachment_details = []
for attachment_id in query["attachments"]:
try:
attachment = attachments_collection.find_one(
{"_id": ObjectId(attachment_id)}
)
if attachment:
attachment_details.append(
{
"id": str(attachment["_id"]),
"fileName": attachment.get(
"filename", "Unknown file"
),
}
)
except Exception as e:
current_app.logger.error(
f"Error retrieving attachment {attachment_id}: {e}",
exc_info=True,
)
query["attachments"] = attachment_details
else:
return make_response(
jsonify(
{
"success": False,
"error": "might have broken url or the conversation does not exist",
}
),
404,
)
date = conversation["_id"].generation_time.isoformat()
res = {
"success": True,
"queries": conversation_queries,
"title": conversation["name"],
"timestamp": date,
}
if shared["isPromptable"] and "api_key" in shared:
res["api_key"] = shared["api_key"]
return make_response(jsonify(res), 200)
except Exception as err:
current_app.logger.error(
f"Error getting shared conversation: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)

View File

@@ -0,0 +1,7 @@
"""Sources module."""
from .chunks import sources_chunks_ns
from .routes import sources_ns
from .upload import sources_upload_ns
__all__ = ["sources_ns", "sources_chunks_ns", "sources_upload_ns"]

View File

@@ -0,0 +1,278 @@
"""Source document management chunk management."""
from bson.objectid import ObjectId
from flask import current_app, jsonify, make_response, request
from flask_restx import fields, Namespace, Resource
from application.api import api
from application.api.user.base import get_vector_store, sources_collection
from application.utils import check_required_fields, num_tokens_from_string
sources_chunks_ns = Namespace(
"sources", description="Source document management operations", path="/api"
)
@sources_chunks_ns.route("/get_chunks")
class GetChunks(Resource):
@api.doc(
description="Retrieves chunks from a document, optionally filtered by file path and search term",
params={
"id": "The document ID",
"page": "Page number for pagination",
"per_page": "Number of chunks per page",
"path": "Optional: Filter chunks by relative file path",
"search": "Optional: Search term to filter chunks by title or content",
},
)
def get(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
doc_id = request.args.get("id")
page = int(request.args.get("page", 1))
per_page = int(request.args.get("per_page", 10))
path = request.args.get("path")
search_term = request.args.get("search", "").strip().lower()
if not ObjectId.is_valid(doc_id):
return make_response(jsonify({"error": "Invalid doc_id"}), 400)
doc = sources_collection.find_one({"_id": ObjectId(doc_id), "user": user})
if not doc:
return make_response(
jsonify({"error": "Document not found or access denied"}), 404
)
try:
store = get_vector_store(doc_id)
chunks = store.get_chunks()
filtered_chunks = []
for chunk in chunks:
metadata = chunk.get("metadata", {})
# Filter by path if provided
if path:
chunk_source = metadata.get("source", "")
# Check if the chunk's source matches the requested path
if not chunk_source or not chunk_source.endswith(path):
continue
# Filter by search term if provided
if search_term:
text_match = search_term in chunk.get("text", "").lower()
title_match = search_term in metadata.get("title", "").lower()
if not (text_match or title_match):
continue
filtered_chunks.append(chunk)
chunks = filtered_chunks
total_chunks = len(chunks)
start = (page - 1) * per_page
end = start + per_page
paginated_chunks = chunks[start:end]
return make_response(
jsonify(
{
"page": page,
"per_page": per_page,
"total": total_chunks,
"chunks": paginated_chunks,
"path": path if path else None,
"search": search_term if search_term else None,
}
),
200,
)
except Exception as e:
current_app.logger.error(f"Error getting chunks: {e}", exc_info=True)
return make_response(jsonify({"success": False}), 500)
@sources_chunks_ns.route("/add_chunk")
class AddChunk(Resource):
@api.expect(
api.model(
"AddChunkModel",
{
"id": fields.String(required=True, description="Document ID"),
"text": fields.String(required=True, description="Text of the chunk"),
"metadata": fields.Raw(
required=False,
description="Metadata associated with the chunk",
),
},
)
)
@api.doc(
description="Adds a new chunk to the document",
)
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
required_fields = ["id", "text"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
doc_id = data.get("id")
text = data.get("text")
metadata = data.get("metadata", {})
token_count = num_tokens_from_string(text)
metadata["token_count"] = token_count
if not ObjectId.is_valid(doc_id):
return make_response(jsonify({"error": "Invalid doc_id"}), 400)
doc = sources_collection.find_one({"_id": ObjectId(doc_id), "user": user})
if not doc:
return make_response(
jsonify({"error": "Document not found or access denied"}), 404
)
try:
store = get_vector_store(doc_id)
chunk_id = store.add_chunk(text, metadata)
return make_response(
jsonify({"message": "Chunk added successfully", "chunk_id": chunk_id}),
201,
)
except Exception as e:
current_app.logger.error(f"Error adding chunk: {e}", exc_info=True)
return make_response(jsonify({"success": False}), 500)
@sources_chunks_ns.route("/delete_chunk")
class DeleteChunk(Resource):
@api.doc(
description="Deletes a specific chunk from the document.",
params={"id": "The document ID", "chunk_id": "The ID of the chunk to delete"},
)
def delete(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
doc_id = request.args.get("id")
chunk_id = request.args.get("chunk_id")
if not ObjectId.is_valid(doc_id):
return make_response(jsonify({"error": "Invalid doc_id"}), 400)
doc = sources_collection.find_one({"_id": ObjectId(doc_id), "user": user})
if not doc:
return make_response(
jsonify({"error": "Document not found or access denied"}), 404
)
try:
store = get_vector_store(doc_id)
deleted = store.delete_chunk(chunk_id)
if deleted:
return make_response(
jsonify({"message": "Chunk deleted successfully"}), 200
)
else:
return make_response(
jsonify({"message": "Chunk not found or could not be deleted"}),
404,
)
except Exception as e:
current_app.logger.error(f"Error deleting chunk: {e}", exc_info=True)
return make_response(jsonify({"success": False}), 500)
@sources_chunks_ns.route("/update_chunk")
class UpdateChunk(Resource):
@api.expect(
api.model(
"UpdateChunkModel",
{
"id": fields.String(required=True, description="Document ID"),
"chunk_id": fields.String(
required=True, description="Chunk ID to update"
),
"text": fields.String(
required=False, description="New text of the chunk"
),
"metadata": fields.Raw(
required=False,
description="Updated metadata associated with the chunk",
),
},
)
)
@api.doc(
description="Updates an existing chunk in the document.",
)
def put(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
required_fields = ["id", "chunk_id"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
doc_id = data.get("id")
chunk_id = data.get("chunk_id")
text = data.get("text")
metadata = data.get("metadata")
if text is not None:
token_count = num_tokens_from_string(text)
if metadata is None:
metadata = {}
metadata["token_count"] = token_count
if not ObjectId.is_valid(doc_id):
return make_response(jsonify({"error": "Invalid doc_id"}), 400)
doc = sources_collection.find_one({"_id": ObjectId(doc_id), "user": user})
if not doc:
return make_response(
jsonify({"error": "Document not found or access denied"}), 404
)
try:
store = get_vector_store(doc_id)
chunks = store.get_chunks()
existing_chunk = next((c for c in chunks if c["doc_id"] == chunk_id), None)
if not existing_chunk:
return make_response(jsonify({"error": "Chunk not found"}), 404)
new_text = text if text is not None else existing_chunk["text"]
if metadata is not None:
new_metadata = existing_chunk["metadata"].copy()
new_metadata.update(metadata)
else:
new_metadata = existing_chunk["metadata"].copy()
if text is not None:
new_metadata["token_count"] = num_tokens_from_string(new_text)
try:
new_chunk_id = store.add_chunk(new_text, new_metadata)
deleted = store.delete_chunk(chunk_id)
if not deleted:
current_app.logger.warning(
f"Failed to delete old chunk {chunk_id}, but new chunk {new_chunk_id} was created"
)
return make_response(
jsonify(
{
"message": "Chunk updated successfully",
"chunk_id": new_chunk_id,
"original_chunk_id": chunk_id,
}
),
200,
)
except Exception as add_error:
current_app.logger.error(f"Failed to add updated chunk: {add_error}")
return make_response(
jsonify({"error": "Failed to update chunk - addition failed"}), 500
)
except Exception as e:
current_app.logger.error(f"Error updating chunk: {e}", exc_info=True)
return make_response(jsonify({"success": False}), 500)

View File

@@ -0,0 +1,323 @@
"""Source document management routes."""
import json
import math
from bson.objectid import ObjectId
from flask import current_app, jsonify, make_response, redirect, request
from flask_restx import fields, Namespace, Resource
from application.api import api
from application.api.user.base import sources_collection
from application.core.settings import settings
from application.storage.storage_creator import StorageCreator
from application.utils import check_required_fields
from application.vectorstore.vector_creator import VectorCreator
sources_ns = Namespace(
"sources", description="Source document management operations", path="/api"
)
@sources_ns.route("/sources")
class CombinedJson(Resource):
@api.doc(description="Provide JSON file with combined available indexes")
def get(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = [
{
"name": "Default",
"date": "default",
"model": settings.EMBEDDINGS_NAME,
"location": "remote",
"tokens": "",
"retriever": "classic",
}
]
try:
for index in sources_collection.find({"user": user}).sort("date", -1):
data.append(
{
"id": str(index["_id"]),
"name": index.get("name"),
"date": index.get("date"),
"model": settings.EMBEDDINGS_NAME,
"location": "local",
"tokens": index.get("tokens", ""),
"retriever": index.get("retriever", "classic"),
"syncFrequency": index.get("sync_frequency", ""),
"is_nested": bool(index.get("directory_structure")),
"type": index.get(
"type", "file"
), # Add type field with default "file"
}
)
except Exception as err:
current_app.logger.error(f"Error retrieving sources: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify(data), 200)
@sources_ns.route("/sources/paginated")
class PaginatedSources(Resource):
@api.doc(description="Get document with pagination, sorting and filtering")
def get(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
sort_field = request.args.get("sort", "date") # Default to 'date'
sort_order = request.args.get("order", "desc") # Default to 'desc'
page = int(request.args.get("page", 1)) # Default to 1
rows_per_page = int(request.args.get("rows", 10)) # Default to 10
# add .strip() to remove leading and trailing whitespaces
search_term = request.args.get(
"search", ""
).strip() # add search for filter documents
# Prepare query for filtering
query = {"user": user}
if search_term:
query["name"] = {
"$regex": search_term,
"$options": "i", # using case-insensitive search
}
total_documents = sources_collection.count_documents(query)
total_pages = max(1, math.ceil(total_documents / rows_per_page))
page = min(
max(1, page), total_pages
) # add this to make sure page inbound is within the range
sort_order = 1 if sort_order == "asc" else -1
skip = (page - 1) * rows_per_page
try:
documents = (
sources_collection.find(query)
.sort(sort_field, sort_order)
.skip(skip)
.limit(rows_per_page)
)
paginated_docs = []
for doc in documents:
doc_data = {
"id": str(doc["_id"]),
"name": doc.get("name", ""),
"date": doc.get("date", ""),
"model": settings.EMBEDDINGS_NAME,
"location": "local",
"tokens": doc.get("tokens", ""),
"retriever": doc.get("retriever", "classic"),
"syncFrequency": doc.get("sync_frequency", ""),
"isNested": bool(doc.get("directory_structure")),
"type": doc.get("type", "file"),
}
paginated_docs.append(doc_data)
response = {
"total": total_documents,
"totalPages": total_pages,
"currentPage": page,
"paginated": paginated_docs,
}
return make_response(jsonify(response), 200)
except Exception as err:
current_app.logger.error(
f"Error retrieving paginated sources: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
@sources_ns.route("/delete_by_ids")
class DeleteByIds(Resource):
@api.doc(
description="Deletes documents from the vector store by IDs",
params={"path": "Comma-separated list of IDs"},
)
def get(self):
ids = request.args.get("path")
if not ids:
return make_response(
jsonify({"success": False, "message": "Missing required fields"}), 400
)
try:
result = sources_collection.delete_index(ids=ids)
if result:
return make_response(jsonify({"success": True}), 200)
except Exception as err:
current_app.logger.error(f"Error deleting indexes: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": False}), 400)
@sources_ns.route("/delete_old")
class DeleteOldIndexes(Resource):
@api.doc(
description="Deletes old indexes and associated files",
params={"source_id": "The source ID to delete"},
)
def get(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
source_id = request.args.get("source_id")
if not source_id:
return make_response(
jsonify({"success": False, "message": "Missing required fields"}), 400
)
doc = sources_collection.find_one(
{"_id": ObjectId(source_id), "user": decoded_token.get("sub")}
)
if not doc:
return make_response(jsonify({"status": "not found"}), 404)
storage = StorageCreator.get_storage()
try:
# Delete vector index
if settings.VECTOR_STORE == "faiss":
index_path = f"indexes/{str(doc['_id'])}"
if storage.file_exists(f"{index_path}/index.faiss"):
storage.delete_file(f"{index_path}/index.faiss")
if storage.file_exists(f"{index_path}/index.pkl"):
storage.delete_file(f"{index_path}/index.pkl")
else:
vectorstore = VectorCreator.create_vectorstore(
settings.VECTOR_STORE, source_id=str(doc["_id"])
)
vectorstore.delete_index()
if "file_path" in doc and doc["file_path"]:
file_path = doc["file_path"]
if storage.is_directory(file_path):
files = storage.list_files(file_path)
for f in files:
storage.delete_file(f)
else:
storage.delete_file(file_path)
except FileNotFoundError:
pass
except Exception as err:
current_app.logger.error(
f"Error deleting files and indexes: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
sources_collection.delete_one({"_id": ObjectId(source_id)})
return make_response(jsonify({"success": True}), 200)
@sources_ns.route("/combine")
class RedirectToSources(Resource):
@api.doc(
description="Redirects /api/combine to /api/sources for backward compatibility"
)
def get(self):
return redirect("/api/sources", code=301)
@sources_ns.route("/manage_sync")
class ManageSync(Resource):
manage_sync_model = api.model(
"ManageSyncModel",
{
"source_id": fields.String(required=True, description="Source ID"),
"sync_frequency": fields.String(
required=True,
description="Sync frequency (never, daily, weekly, monthly)",
),
},
)
@api.expect(manage_sync_model)
@api.doc(description="Manage sync frequency for sources")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
required_fields = ["source_id", "sync_frequency"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
source_id = data["source_id"]
sync_frequency = data["sync_frequency"]
if sync_frequency not in ["never", "daily", "weekly", "monthly"]:
return make_response(
jsonify({"success": False, "message": "Invalid frequency"}), 400
)
update_data = {"$set": {"sync_frequency": sync_frequency}}
try:
sources_collection.update_one(
{
"_id": ObjectId(source_id),
"user": user,
},
update_data,
)
except Exception as err:
current_app.logger.error(
f"Error updating sync frequency: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True}), 200)
@sources_ns.route("/directory_structure")
class DirectoryStructure(Resource):
@api.doc(
description="Get the directory structure for a document",
params={"id": "The document ID"},
)
def get(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
doc_id = request.args.get("id")
if not doc_id:
return make_response(jsonify({"error": "Document ID is required"}), 400)
if not ObjectId.is_valid(doc_id):
return make_response(jsonify({"error": "Invalid document ID"}), 400)
try:
doc = sources_collection.find_one({"_id": ObjectId(doc_id), "user": user})
if not doc:
return make_response(
jsonify({"error": "Document not found or access denied"}), 404
)
directory_structure = doc.get("directory_structure", {})
base_path = doc.get("file_path", "")
provider = None
remote_data = doc.get("remote_data")
try:
if isinstance(remote_data, str) and remote_data:
remote_data_obj = json.loads(remote_data)
provider = remote_data_obj.get("provider")
except Exception as e:
current_app.logger.warning(
f"Failed to parse remote_data for doc {doc_id}: {e}"
)
return make_response(
jsonify(
{
"success": True,
"directory_structure": directory_structure,
"base_path": base_path,
"provider": provider,
}
),
200,
)
except Exception as e:
current_app.logger.error(
f"Error retrieving directory structure: {e}", exc_info=True
)
return make_response(jsonify({"success": False, "error": str(e)}), 500)

View File

@@ -0,0 +1,583 @@
"""Source document management upload functionality."""
import json
import os
import tempfile
import zipfile
from bson.objectid import ObjectId
from flask import current_app, jsonify, make_response, request
from flask_restx import fields, Namespace, Resource
from application.api import api
from application.api.user.base import sources_collection
from application.api.user.tasks import ingest, ingest_connector_task, ingest_remote
from application.core.settings import settings
from application.parser.connectors.connector_creator import ConnectorCreator
from application.storage.storage_creator import StorageCreator
from application.utils import check_required_fields, safe_filename
sources_upload_ns = Namespace(
"sources", description="Source document management operations", path="/api"
)
@sources_upload_ns.route("/upload")
class UploadFile(Resource):
@api.expect(
api.model(
"UploadModel",
{
"user": fields.String(required=True, description="User ID"),
"name": fields.String(required=True, description="Job name"),
"file": fields.Raw(required=True, description="File(s) to upload"),
},
)
)
@api.doc(
description="Uploads a file to be vectorized and indexed",
)
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
data = request.form
files = request.files.getlist("file")
required_fields = ["user", "name"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields or not files or all(file.filename == "" for file in files):
return make_response(
jsonify(
{
"status": "error",
"message": "Missing required fields or files",
}
),
400,
)
user = decoded_token.get("sub")
job_name = request.form["name"]
# Create safe versions for filesystem operations
safe_user = safe_filename(user)
dir_name = safe_filename(job_name)
base_path = f"{settings.UPLOAD_FOLDER}/{safe_user}/{dir_name}"
try:
storage = StorageCreator.get_storage()
for file in files:
original_filename = file.filename
safe_file = safe_filename(original_filename)
with tempfile.TemporaryDirectory() as temp_dir:
temp_file_path = os.path.join(temp_dir, safe_file)
file.save(temp_file_path)
if zipfile.is_zipfile(temp_file_path):
try:
with zipfile.ZipFile(temp_file_path, "r") as zip_ref:
zip_ref.extractall(path=temp_dir)
# Walk through extracted files and upload them
for root, _, files in os.walk(temp_dir):
for extracted_file in files:
if (
os.path.join(root, extracted_file)
== temp_file_path
):
continue
rel_path = os.path.relpath(
os.path.join(root, extracted_file), temp_dir
)
storage_path = f"{base_path}/{rel_path}"
with open(
os.path.join(root, extracted_file), "rb"
) as f:
storage.save_file(f, storage_path)
except Exception as e:
current_app.logger.error(
f"Error extracting zip: {e}", exc_info=True
)
# If zip extraction fails, save the original zip file
file_path = f"{base_path}/{safe_file}"
with open(temp_file_path, "rb") as f:
storage.save_file(f, file_path)
else:
# For non-zip files, save directly
file_path = f"{base_path}/{safe_file}"
with open(temp_file_path, "rb") as f:
storage.save_file(f, file_path)
task = ingest.delay(
settings.UPLOAD_FOLDER,
[
".rst",
".md",
".pdf",
".txt",
".docx",
".csv",
".epub",
".html",
".mdx",
".json",
".xlsx",
".pptx",
".png",
".jpg",
".jpeg",
],
job_name,
user,
file_path=base_path,
filename=dir_name,
)
except Exception as err:
current_app.logger.error(f"Error uploading file: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True, "task_id": task.id}), 200)
@sources_upload_ns.route("/remote")
class UploadRemote(Resource):
@api.expect(
api.model(
"RemoteUploadModel",
{
"user": fields.String(required=True, description="User ID"),
"source": fields.String(
required=True, description="Source of the data"
),
"name": fields.String(required=True, description="Job name"),
"data": fields.String(required=True, description="Data to process"),
"repo_url": fields.String(description="GitHub repository URL"),
},
)
)
@api.doc(
description="Uploads remote source for vectorization",
)
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
data = request.form
required_fields = ["user", "source", "name", "data"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
config = json.loads(data["data"])
source_data = None
if data["source"] == "github":
source_data = config.get("repo_url")
elif data["source"] in ["crawler", "url"]:
source_data = config.get("url")
elif data["source"] == "reddit":
source_data = config
elif data["source"] in ConnectorCreator.get_supported_connectors():
session_token = config.get("session_token")
if not session_token:
return make_response(
jsonify(
{
"success": False,
"error": f"Missing session_token in {data['source']} configuration",
}
),
400,
)
# Process file_ids
file_ids = config.get("file_ids", [])
if isinstance(file_ids, str):
file_ids = [id.strip() for id in file_ids.split(",") if id.strip()]
elif not isinstance(file_ids, list):
file_ids = []
# Process folder_ids
folder_ids = config.get("folder_ids", [])
if isinstance(folder_ids, str):
folder_ids = [
id.strip() for id in folder_ids.split(",") if id.strip()
]
elif not isinstance(folder_ids, list):
folder_ids = []
config["file_ids"] = file_ids
config["folder_ids"] = folder_ids
task = ingest_connector_task.delay(
job_name=data["name"],
user=decoded_token.get("sub"),
source_type=data["source"],
session_token=session_token,
file_ids=file_ids,
folder_ids=folder_ids,
recursive=config.get("recursive", False),
retriever=config.get("retriever", "classic"),
)
return make_response(
jsonify({"success": True, "task_id": task.id}), 200
)
task = ingest_remote.delay(
source_data=source_data,
job_name=data["name"],
user=decoded_token.get("sub"),
loader=data["source"],
)
except Exception as err:
current_app.logger.error(
f"Error uploading remote source: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True, "task_id": task.id}), 200)
@sources_upload_ns.route("/manage_source_files")
class ManageSourceFiles(Resource):
@api.expect(
api.model(
"ManageSourceFilesModel",
{
"source_id": fields.String(
required=True, description="Source ID to modify"
),
"operation": fields.String(
required=True,
description="Operation: 'add', 'remove', or 'remove_directory'",
),
"file_paths": fields.List(
fields.String,
required=False,
description="File paths to remove (for remove operation)",
),
"directory_path": fields.String(
required=False,
description="Directory path to remove (for remove_directory operation)",
),
"file": fields.Raw(
required=False, description="Files to add (for add operation)"
),
"parent_dir": fields.String(
required=False,
description="Parent directory path relative to source root",
),
},
)
)
@api.doc(
description="Add files, remove files, or remove directories from an existing source",
)
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(
jsonify({"success": False, "message": "Unauthorized"}), 401
)
user = decoded_token.get("sub")
source_id = request.form.get("source_id")
operation = request.form.get("operation")
if not source_id or not operation:
return make_response(
jsonify(
{
"success": False,
"message": "source_id and operation are required",
}
),
400,
)
if operation not in ["add", "remove", "remove_directory"]:
return make_response(
jsonify(
{
"success": False,
"message": "operation must be 'add', 'remove', or 'remove_directory'",
}
),
400,
)
try:
ObjectId(source_id)
except Exception:
return make_response(
jsonify({"success": False, "message": "Invalid source ID format"}), 400
)
try:
source = sources_collection.find_one(
{"_id": ObjectId(source_id), "user": user}
)
if not source:
return make_response(
jsonify(
{
"success": False,
"message": "Source not found or access denied",
}
),
404,
)
except Exception as err:
current_app.logger.error(f"Error finding source: {err}", exc_info=True)
return make_response(
jsonify({"success": False, "message": "Database error"}), 500
)
try:
storage = StorageCreator.get_storage()
source_file_path = source.get("file_path", "")
parent_dir = request.form.get("parent_dir", "")
if parent_dir and (parent_dir.startswith("/") or ".." in parent_dir):
return make_response(
jsonify(
{"success": False, "message": "Invalid parent directory path"}
),
400,
)
if operation == "add":
files = request.files.getlist("file")
if not files or all(file.filename == "" for file in files):
return make_response(
jsonify(
{
"success": False,
"message": "No files provided for add operation",
}
),
400,
)
added_files = []
target_dir = source_file_path
if parent_dir:
target_dir = f"{source_file_path}/{parent_dir}"
for file in files:
if file.filename:
safe_filename_str = safe_filename(file.filename)
file_path = f"{target_dir}/{safe_filename_str}"
# Save file to storage
storage.save_file(file, file_path)
added_files.append(safe_filename_str)
# Trigger re-ingestion pipeline
from application.api.user.tasks import reingest_source_task
task = reingest_source_task.delay(source_id=source_id, user=user)
return make_response(
jsonify(
{
"success": True,
"message": f"Added {len(added_files)} files",
"added_files": added_files,
"parent_dir": parent_dir,
"reingest_task_id": task.id,
}
),
200,
)
elif operation == "remove":
file_paths_str = request.form.get("file_paths")
if not file_paths_str:
return make_response(
jsonify(
{
"success": False,
"message": "file_paths required for remove operation",
}
),
400,
)
try:
file_paths = (
json.loads(file_paths_str)
if isinstance(file_paths_str, str)
else file_paths_str
)
except Exception:
return make_response(
jsonify(
{"success": False, "message": "Invalid file_paths format"}
),
400,
)
# Remove files from storage and directory structure
removed_files = []
for file_path in file_paths:
full_path = f"{source_file_path}/{file_path}"
# Remove from storage
if storage.file_exists(full_path):
storage.delete_file(full_path)
removed_files.append(file_path)
# Trigger re-ingestion pipeline
from application.api.user.tasks import reingest_source_task
task = reingest_source_task.delay(source_id=source_id, user=user)
return make_response(
jsonify(
{
"success": True,
"message": f"Removed {len(removed_files)} files",
"removed_files": removed_files,
"reingest_task_id": task.id,
}
),
200,
)
elif operation == "remove_directory":
directory_path = request.form.get("directory_path")
if not directory_path:
return make_response(
jsonify(
{
"success": False,
"message": "directory_path required for remove_directory operation",
}
),
400,
)
# Validate directory path (prevent path traversal)
if directory_path.startswith("/") or ".." in directory_path:
current_app.logger.warning(
f"Invalid directory path attempted for removal. "
f"User: {user}, Source ID: {source_id}, Directory path: {directory_path}"
)
return make_response(
jsonify(
{"success": False, "message": "Invalid directory path"}
),
400,
)
full_directory_path = (
f"{source_file_path}/{directory_path}"
if directory_path
else source_file_path
)
if not storage.is_directory(full_directory_path):
current_app.logger.warning(
f"Directory not found or is not a directory for removal. "
f"User: {user}, Source ID: {source_id}, Directory path: {directory_path}, "
f"Full path: {full_directory_path}"
)
return make_response(
jsonify(
{
"success": False,
"message": "Directory not found or is not a directory",
}
),
404,
)
success = storage.remove_directory(full_directory_path)
if not success:
current_app.logger.error(
f"Failed to remove directory from storage. "
f"User: {user}, Source ID: {source_id}, Directory path: {directory_path}, "
f"Full path: {full_directory_path}"
)
return make_response(
jsonify(
{"success": False, "message": "Failed to remove directory"}
),
500,
)
current_app.logger.info(
f"Successfully removed directory. "
f"User: {user}, Source ID: {source_id}, Directory path: {directory_path}, "
f"Full path: {full_directory_path}"
)
# Trigger re-ingestion pipeline
from application.api.user.tasks import reingest_source_task
task = reingest_source_task.delay(source_id=source_id, user=user)
return make_response(
jsonify(
{
"success": True,
"message": f"Successfully removed directory: {directory_path}",
"removed_directory": directory_path,
"reingest_task_id": task.id,
}
),
200,
)
except Exception as err:
error_context = f"operation={operation}, user={user}, source_id={source_id}"
if operation == "remove_directory":
directory_path = request.form.get("directory_path", "")
error_context += f", directory_path={directory_path}"
elif operation == "remove":
file_paths_str = request.form.get("file_paths", "")
error_context += f", file_paths={file_paths_str}"
elif operation == "add":
parent_dir = request.form.get("parent_dir", "")
error_context += f", parent_dir={parent_dir}"
current_app.logger.error(
f"Error managing source files: {err} ({error_context})", exc_info=True
)
return make_response(
jsonify({"success": False, "message": "Operation failed"}), 500
)
@sources_upload_ns.route("/task_status")
class TaskStatus(Resource):
task_status_model = api.model(
"TaskStatusModel",
{"task_id": fields.String(required=True, description="Task ID")},
)
@api.expect(task_status_model)
@api.doc(description="Get celery job status")
def get(self):
task_id = request.args.get("task_id")
if not task_id:
return make_response(
jsonify({"success": False, "message": "Task ID is required"}), 400
)
try:
from application.celery_init import celery
task = celery.AsyncResult(task_id)
task_meta = task.info
print(f"Task status: {task.status}")
if task.status == "PENDING":
inspect = celery.control.inspect()
active_workers = inspect.ping()
if not active_workers:
raise ConnectionError("Service unavailable")
if not isinstance(
task_meta, (dict, list, str, int, float, bool, type(None))
):
task_meta = str(task_meta) # Convert to a string representation
except ConnectionError as err:
return make_response(
jsonify({"success": False, "message": str(err)}), 503
)
except Exception as err:
current_app.logger.error(f"Error getting task status: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"status": task.status, "result": task_meta}), 200)

View File

@@ -1,7 +1,112 @@
from application.worker import ingest_worker
from application.celery import celery
from datetime import timedelta
from application.celery_init import celery
from application.worker import (
agent_webhook_worker,
attachment_worker,
ingest_worker,
mcp_oauth,
mcp_oauth_status,
remote_worker,
sync_worker,
)
@celery.task(bind=True)
def ingest(self, directory, formats, name_job, filename, user):
resp = ingest_worker(self, directory, formats, name_job, filename, user)
def ingest(self, directory, formats, job_name, user, file_path, filename):
resp = ingest_worker(self, directory, formats, job_name, file_path, filename, user)
return resp
@celery.task(bind=True)
def ingest_remote(self, source_data, job_name, user, loader):
resp = remote_worker(self, source_data, job_name, user, loader)
return resp
@celery.task(bind=True)
def reingest_source_task(self, source_id, user):
from application.worker import reingest_source_worker
resp = reingest_source_worker(self, source_id, user)
return resp
@celery.task(bind=True)
def schedule_syncs(self, frequency):
resp = sync_worker(self, frequency)
return resp
@celery.task(bind=True)
def store_attachment(self, file_info, user):
resp = attachment_worker(self, file_info, user)
return resp
@celery.task(bind=True)
def process_agent_webhook(self, agent_id, payload):
resp = agent_webhook_worker(self, agent_id, payload)
return resp
@celery.task(bind=True)
def ingest_connector_task(
self,
job_name,
user,
source_type,
session_token=None,
file_ids=None,
folder_ids=None,
recursive=True,
retriever="classic",
operation_mode="upload",
doc_id=None,
sync_frequency="never",
):
from application.worker import ingest_connector
resp = ingest_connector(
self,
job_name,
user,
source_type,
session_token=session_token,
file_ids=file_ids,
folder_ids=folder_ids,
recursive=recursive,
retriever=retriever,
operation_mode=operation_mode,
doc_id=doc_id,
sync_frequency=sync_frequency,
)
return resp
@celery.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
sender.add_periodic_task(
timedelta(days=1),
schedule_syncs.s("daily"),
)
sender.add_periodic_task(
timedelta(weeks=1),
schedule_syncs.s("weekly"),
)
sender.add_periodic_task(
timedelta(days=30),
schedule_syncs.s("monthly"),
)
@celery.task(bind=True)
def mcp_oauth_task(self, config, user):
resp = mcp_oauth(self, config, user)
return resp
@celery.task(bind=True)
def mcp_oauth_status_task(self, task_id):
resp = mcp_oauth_status(self, task_id)
return resp

View File

@@ -0,0 +1,6 @@
"""Tools module."""
from .mcp import tools_mcp_ns
from .routes import tools_ns
__all__ = ["tools_ns", "tools_mcp_ns"]

View File

@@ -0,0 +1,333 @@
"""Tool management MCP server integration."""
import json
from email.quoprimime import unquote
from bson.objectid import ObjectId
from flask import current_app, jsonify, make_response, redirect, request
from flask_restx import fields, Namespace, Resource
from application.agents.tools.mcp_tool import MCPOAuthManager, MCPTool
from application.api import api
from application.api.user.base import user_tools_collection
from application.cache import get_redis_instance
from application.security.encryption import encrypt_credentials
from application.utils import check_required_fields
tools_mcp_ns = Namespace("tools", description="Tool management operations", path="/api")
@tools_mcp_ns.route("/mcp_server/test")
class TestMCPServerConfig(Resource):
@api.expect(
api.model(
"MCPServerTestModel",
{
"config": fields.Raw(
required=True, description="MCP server configuration to test"
),
},
)
)
@api.doc(description="Test MCP server connection with provided configuration")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
required_fields = ["config"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
config = data["config"]
auth_credentials = {}
auth_type = config.get("auth_type", "none")
if auth_type == "api_key" and "api_key" in config:
auth_credentials["api_key"] = config["api_key"]
if "api_key_header" in config:
auth_credentials["api_key_header"] = config["api_key_header"]
elif auth_type == "bearer" and "bearer_token" in config:
auth_credentials["bearer_token"] = config["bearer_token"]
elif auth_type == "basic":
if "username" in config:
auth_credentials["username"] = config["username"]
if "password" in config:
auth_credentials["password"] = config["password"]
test_config = config.copy()
test_config["auth_credentials"] = auth_credentials
mcp_tool = MCPTool(config=test_config, user_id=user)
result = mcp_tool.test_connection()
return make_response(jsonify(result), 200)
except Exception as e:
current_app.logger.error(f"Error testing MCP server: {e}", exc_info=True)
return make_response(
jsonify(
{"success": False, "error": f"Connection test failed: {str(e)}"}
),
500,
)
@tools_mcp_ns.route("/mcp_server/save")
class MCPServerSave(Resource):
@api.expect(
api.model(
"MCPServerSaveModel",
{
"id": fields.String(
required=False, description="Tool ID for updates (optional)"
),
"displayName": fields.String(
required=True, description="Display name for the MCP server"
),
"config": fields.Raw(
required=True, description="MCP server configuration"
),
"status": fields.Boolean(
required=False, default=True, description="Tool status"
),
},
)
)
@api.doc(description="Create or update MCP server with automatic tool discovery")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
required_fields = ["displayName", "config"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
config = data["config"]
auth_credentials = {}
auth_type = config.get("auth_type", "none")
if auth_type == "api_key":
if "api_key" in config and config["api_key"]:
auth_credentials["api_key"] = config["api_key"]
if "api_key_header" in config:
auth_credentials["api_key_header"] = config["api_key_header"]
elif auth_type == "bearer":
if "bearer_token" in config and config["bearer_token"]:
auth_credentials["bearer_token"] = config["bearer_token"]
elif auth_type == "basic":
if "username" in config and config["username"]:
auth_credentials["username"] = config["username"]
if "password" in config and config["password"]:
auth_credentials["password"] = config["password"]
mcp_config = config.copy()
mcp_config["auth_credentials"] = auth_credentials
if auth_type == "oauth":
if not config.get("oauth_task_id"):
return make_response(
jsonify(
{
"success": False,
"error": "Connection not authorized. Please complete the OAuth authorization first.",
}
),
400,
)
redis_client = get_redis_instance()
manager = MCPOAuthManager(redis_client)
result = manager.get_oauth_status(config["oauth_task_id"])
if not result.get("status") == "completed":
return make_response(
jsonify(
{
"success": False,
"error": "OAuth failed or not completed. Please try authorizing again.",
}
),
400,
)
actions_metadata = result.get("tools", [])
elif auth_type == "none" or auth_credentials:
mcp_tool = MCPTool(config=mcp_config, user_id=user)
mcp_tool.discover_tools()
actions_metadata = mcp_tool.get_actions_metadata()
else:
raise Exception(
"No valid credentials provided for the selected authentication type"
)
storage_config = config.copy()
if auth_credentials:
encrypted_credentials_string = encrypt_credentials(
auth_credentials, user
)
storage_config["encrypted_credentials"] = encrypted_credentials_string
for field in [
"api_key",
"bearer_token",
"username",
"password",
"api_key_header",
]:
storage_config.pop(field, None)
transformed_actions = []
for action in actions_metadata:
action["active"] = True
if "parameters" in action:
if "properties" in action["parameters"]:
for param_name, param_details in action["parameters"][
"properties"
].items():
param_details["filled_by_llm"] = True
param_details["value"] = ""
transformed_actions.append(action)
tool_data = {
"name": "mcp_tool",
"displayName": data["displayName"],
"customName": data["displayName"],
"description": f"MCP Server: {storage_config.get('server_url', 'Unknown')}",
"config": storage_config,
"actions": transformed_actions,
"status": data.get("status", True),
"user": user,
}
tool_id = data.get("id")
if tool_id:
result = user_tools_collection.update_one(
{"_id": ObjectId(tool_id), "user": user, "name": "mcp_tool"},
{"$set": {k: v for k, v in tool_data.items() if k != "user"}},
)
if result.matched_count == 0:
return make_response(
jsonify(
{
"success": False,
"error": "Tool not found or access denied",
}
),
404,
)
response_data = {
"success": True,
"id": tool_id,
"message": f"MCP server updated successfully! Discovered {len(transformed_actions)} tools.",
"tools_count": len(transformed_actions),
}
else:
result = user_tools_collection.insert_one(tool_data)
tool_id = str(result.inserted_id)
response_data = {
"success": True,
"id": tool_id,
"message": f"MCP server created successfully! Discovered {len(transformed_actions)} tools.",
"tools_count": len(transformed_actions),
}
return make_response(jsonify(response_data), 200)
except Exception as e:
current_app.logger.error(f"Error saving MCP server: {e}", exc_info=True)
return make_response(
jsonify(
{"success": False, "error": f"Failed to save MCP server: {str(e)}"}
),
500,
)
@tools_mcp_ns.route("/mcp_server/callback")
class MCPOAuthCallback(Resource):
@api.expect(
api.model(
"MCPServerCallbackModel",
{
"code": fields.String(required=True, description="Authorization code"),
"state": fields.String(required=True, description="State parameter"),
"error": fields.String(
required=False, description="Error message (if any)"
),
},
)
)
@api.doc(
description="Handle OAuth callback by providing the authorization code and state"
)
def get(self):
code = request.args.get("code")
state = request.args.get("state")
error = request.args.get("error")
if error:
return redirect(
f"/api/connectors/callback-status?status=error&message=OAuth+error:+{error}.+Please+try+again+and+make+sure+to+grant+all+requested+permissions,+including+offline+access.&provider=mcp_tool"
)
if not code or not state:
return redirect(
"/api/connectors/callback-status?status=error&message=Authorization+code+or+state+not+provided.+Please+complete+the+authorization+process+and+make+sure+to+grant+offline+access.&provider=mcp_tool"
)
try:
redis_client = get_redis_instance()
if not redis_client:
return redirect(
"/api/connectors/callback-status?status=error&message=Internal+server+error:+Redis+not+available.&provider=mcp_tool"
)
code = unquote(code)
manager = MCPOAuthManager(redis_client)
success = manager.handle_oauth_callback(state, code, error)
if success:
return redirect(
"/api/connectors/callback-status?status=success&message=Authorization+code+received+successfully.+You+can+close+this+window.&provider=mcp_tool"
)
else:
return redirect(
"/api/connectors/callback-status?status=error&message=OAuth+callback+failed.&provider=mcp_tool"
)
except Exception as e:
current_app.logger.error(
f"Error handling MCP OAuth callback: {str(e)}", exc_info=True
)
return redirect(
f"/api/connectors/callback-status?status=error&message=Internal+server+error:+{str(e)}.&provider=mcp_tool"
)
@tools_mcp_ns.route("/mcp_server/oauth_status/<string:task_id>")
class MCPOAuthStatus(Resource):
def get(self, task_id):
"""
Get current status of OAuth flow.
Frontend should poll this endpoint periodically.
"""
try:
redis_client = get_redis_instance()
status_key = f"mcp_oauth_status:{task_id}"
status_data = redis_client.get(status_key)
if status_data:
status = json.loads(status_data)
return make_response(
jsonify({"success": True, "task_id": task_id, **status})
)
else:
return make_response(
jsonify(
{
"success": False,
"error": "Task not found or expired",
"task_id": task_id,
}
),
404,
)
except Exception as e:
current_app.logger.error(
f"Error getting OAuth status for task {task_id}: {str(e)}"
)
return make_response(
jsonify({"success": False, "error": str(e), "task_id": task_id}), 500
)

View File

@@ -0,0 +1,416 @@
"""Tool management routes."""
from bson.objectid import ObjectId
from flask import current_app, jsonify, make_response, request
from flask_restx import fields, Namespace, Resource
from application.agents.tools.tool_manager import ToolManager
from application.api import api
from application.api.user.base import user_tools_collection
from application.security.encryption import decrypt_credentials, encrypt_credentials
from application.utils import check_required_fields, validate_function_name
tool_config = {}
tool_manager = ToolManager(config=tool_config)
tools_ns = Namespace("tools", description="Tool management operations", path="/api")
@tools_ns.route("/available_tools")
class AvailableTools(Resource):
@api.doc(description="Get available tools for a user")
def get(self):
try:
tools_metadata = []
for tool_name, tool_instance in tool_manager.tools.items():
doc = tool_instance.__doc__.strip()
lines = doc.split("\n", 1)
name = lines[0].strip()
description = lines[1].strip() if len(lines) > 1 else ""
tools_metadata.append(
{
"name": tool_name,
"displayName": name,
"description": description,
"configRequirements": tool_instance.get_config_requirements(),
}
)
except Exception as err:
current_app.logger.error(
f"Error getting available tools: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True, "data": tools_metadata}), 200)
@tools_ns.route("/get_tools")
class GetTools(Resource):
@api.doc(description="Get tools created by a user")
def get(self):
try:
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
tools = user_tools_collection.find({"user": user})
user_tools = []
for tool in tools:
tool_copy = {**tool}
tool_copy["id"] = str(tool["_id"])
tool_copy.pop("_id", None)
user_tools.append(tool_copy)
except Exception as err:
current_app.logger.error(f"Error getting user tools: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True, "tools": user_tools}), 200)
@tools_ns.route("/create_tool")
class CreateTool(Resource):
@api.expect(
api.model(
"CreateToolModel",
{
"name": fields.String(required=True, description="Name of the tool"),
"displayName": fields.String(
required=True, description="Display name for the tool"
),
"description": fields.String(
required=True, description="Tool description"
),
"config": fields.Raw(
required=True, description="Configuration of the tool"
),
"customName": fields.String(
required=False, description="Custom name for the tool"
),
"status": fields.Boolean(
required=True, description="Status of the tool"
),
},
)
)
@api.doc(description="Create a new tool")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
required_fields = [
"name",
"displayName",
"description",
"config",
"status",
]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
tool_instance = tool_manager.tools.get(data["name"])
if not tool_instance:
return make_response(
jsonify({"success": False, "message": "Tool not found"}), 404
)
actions_metadata = tool_instance.get_actions_metadata()
transformed_actions = []
for action in actions_metadata:
action["active"] = True
if "parameters" in action:
if "properties" in action["parameters"]:
for param_name, param_details in action["parameters"][
"properties"
].items():
param_details["filled_by_llm"] = True
param_details["value"] = ""
transformed_actions.append(action)
except Exception as err:
current_app.logger.error(
f"Error getting tool actions: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
try:
new_tool = {
"user": user,
"name": data["name"],
"displayName": data["displayName"],
"description": data["description"],
"customName": data.get("customName", ""),
"actions": transformed_actions,
"config": data["config"],
"status": data["status"],
}
resp = user_tools_collection.insert_one(new_tool)
new_id = str(resp.inserted_id)
except Exception as err:
current_app.logger.error(f"Error creating tool: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"id": new_id}), 200)
@tools_ns.route("/update_tool")
class UpdateTool(Resource):
@api.expect(
api.model(
"UpdateToolModel",
{
"id": fields.String(required=True, description="Tool ID"),
"name": fields.String(description="Name of the tool"),
"displayName": fields.String(description="Display name for the tool"),
"customName": fields.String(description="Custom name for the tool"),
"description": fields.String(description="Tool description"),
"config": fields.Raw(description="Configuration of the tool"),
"actions": fields.List(
fields.Raw, description="Actions the tool can perform"
),
"status": fields.Boolean(description="Status of the tool"),
},
)
)
@api.doc(description="Update a tool by ID")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
required_fields = ["id"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
update_data = {}
if "name" in data:
update_data["name"] = data["name"]
if "displayName" in data:
update_data["displayName"] = data["displayName"]
if "customName" in data:
update_data["customName"] = data["customName"]
if "description" in data:
update_data["description"] = data["description"]
if "actions" in data:
update_data["actions"] = data["actions"]
if "config" in data:
if "actions" in data["config"]:
for action_name in list(data["config"]["actions"].keys()):
if not validate_function_name(action_name):
return make_response(
jsonify(
{
"success": False,
"message": f"Invalid function name '{action_name}'. Function names must match pattern '^[a-zA-Z0-9_-]+$'.",
"param": "tools[].function.name",
}
),
400,
)
tool_doc = user_tools_collection.find_one(
{"_id": ObjectId(data["id"]), "user": user}
)
if tool_doc and tool_doc.get("name") == "mcp_tool":
config = data["config"]
existing_config = tool_doc.get("config", {})
storage_config = existing_config.copy()
storage_config.update(config)
existing_credentials = {}
if "encrypted_credentials" in existing_config:
existing_credentials = decrypt_credentials(
existing_config["encrypted_credentials"], user
)
auth_credentials = existing_credentials.copy()
auth_type = storage_config.get("auth_type", "none")
if auth_type == "api_key":
if "api_key" in config and config["api_key"]:
auth_credentials["api_key"] = config["api_key"]
if "api_key_header" in config:
auth_credentials["api_key_header"] = config[
"api_key_header"
]
elif auth_type == "bearer":
if "bearer_token" in config and config["bearer_token"]:
auth_credentials["bearer_token"] = config["bearer_token"]
elif "encrypted_token" in config and config["encrypted_token"]:
auth_credentials["bearer_token"] = config["encrypted_token"]
elif auth_type == "basic":
if "username" in config and config["username"]:
auth_credentials["username"] = config["username"]
if "password" in config and config["password"]:
auth_credentials["password"] = config["password"]
if auth_type != "none" and auth_credentials:
encrypted_credentials_string = encrypt_credentials(
auth_credentials, user
)
storage_config["encrypted_credentials"] = (
encrypted_credentials_string
)
elif auth_type == "none":
storage_config.pop("encrypted_credentials", None)
for field in [
"api_key",
"bearer_token",
"encrypted_token",
"username",
"password",
"api_key_header",
]:
storage_config.pop(field, None)
update_data["config"] = storage_config
else:
update_data["config"] = data["config"]
if "status" in data:
update_data["status"] = data["status"]
user_tools_collection.update_one(
{"_id": ObjectId(data["id"]), "user": user},
{"$set": update_data},
)
except Exception as err:
current_app.logger.error(f"Error updating tool: {err}", exc_info=True)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True}), 200)
@tools_ns.route("/update_tool_config")
class UpdateToolConfig(Resource):
@api.expect(
api.model(
"UpdateToolConfigModel",
{
"id": fields.String(required=True, description="Tool ID"),
"config": fields.Raw(
required=True, description="Configuration of the tool"
),
},
)
)
@api.doc(description="Update the configuration of a tool")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
required_fields = ["id", "config"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
user_tools_collection.update_one(
{"_id": ObjectId(data["id"]), "user": user},
{"$set": {"config": data["config"]}},
)
except Exception as err:
current_app.logger.error(
f"Error updating tool config: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True}), 200)
@tools_ns.route("/update_tool_actions")
class UpdateToolActions(Resource):
@api.expect(
api.model(
"UpdateToolActionsModel",
{
"id": fields.String(required=True, description="Tool ID"),
"actions": fields.List(
fields.Raw,
required=True,
description="Actions the tool can perform",
),
},
)
)
@api.doc(description="Update the actions of a tool")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
required_fields = ["id", "actions"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
user_tools_collection.update_one(
{"_id": ObjectId(data["id"]), "user": user},
{"$set": {"actions": data["actions"]}},
)
except Exception as err:
current_app.logger.error(
f"Error updating tool actions: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True}), 200)
@tools_ns.route("/update_tool_status")
class UpdateToolStatus(Resource):
@api.expect(
api.model(
"UpdateToolStatusModel",
{
"id": fields.String(required=True, description="Tool ID"),
"status": fields.Boolean(
required=True, description="Status of the tool"
),
},
)
)
@api.doc(description="Update the status of a tool")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
required_fields = ["id", "status"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
user_tools_collection.update_one(
{"_id": ObjectId(data["id"]), "user": user},
{"$set": {"status": data["status"]}},
)
except Exception as err:
current_app.logger.error(
f"Error updating tool status: {err}", exc_info=True
)
return make_response(jsonify({"success": False}), 400)
return make_response(jsonify({"success": True}), 200)
@tools_ns.route("/delete_tool")
class DeleteTool(Resource):
@api.expect(
api.model(
"DeleteToolModel",
{"id": fields.String(required=True, description="Tool ID")},
)
)
@api.doc(description="Delete a tool by ID")
def post(self):
decoded_token = request.decoded_token
if not decoded_token:
return make_response(jsonify({"success": False}), 401)
user = decoded_token.get("sub")
data = request.get_json()
required_fields = ["id"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
result = user_tools_collection.delete_one(
{"_id": ObjectId(data["id"]), "user": user}
)
if result.deleted_count == 0:
return {"success": False, "message": "Tool not found"}, 404
except Exception as err:
current_app.logger.error(f"Error deleting tool: {err}", exc_info=True)
return {"success": False}, 400
return {"success": True}, 200

View File

@@ -1,44 +1,115 @@
import os
import platform
import uuid
import dotenv
from application.celery import celery
from flask import Flask, request, redirect
from application.core.settings import settings
from application.api.user.routes import user
from application.api.answer.routes import answer
from application.api.internal.routes import internal
from flask import Flask, jsonify, redirect, request
from jose import jwt
from application.auth import handle_auth
from application.core.logging_config import setup_logging
setup_logging()
from application.api import api # noqa: E402
from application.api.answer import answer # noqa: E402
from application.api.internal.routes import internal # noqa: E402
from application.api.user.routes import user # noqa: E402
from application.api.connector.routes import connector # noqa: E402
from application.celery_init import celery # noqa: E402
from application.core.settings import settings # noqa: E402
if platform.system() == "Windows":
import pathlib
pathlib.PosixPath = pathlib.WindowsPath
pathlib.PosixPath = pathlib.WindowsPath
dotenv.load_dotenv()
app = Flask(__name__)
app.register_blueprint(user)
app.register_blueprint(answer)
app.register_blueprint(internal)
app.register_blueprint(connector)
app.config.update(
UPLOAD_FOLDER="inputs",
CELERY_BROKER_URL=settings.CELERY_BROKER_URL,
CELERY_RESULT_BACKEND=settings.CELERY_RESULT_BACKEND,
MONGO_URI=settings.MONGO_URI
MONGO_URI=settings.MONGO_URI,
)
celery.config_from_object("application.celeryconfig")
api.init_app(app)
if settings.AUTH_TYPE in ("simple_jwt", "session_jwt") and not settings.JWT_SECRET_KEY:
key_file = ".jwt_secret_key"
try:
with open(key_file, "r") as f:
settings.JWT_SECRET_KEY = f.read().strip()
except FileNotFoundError:
new_key = os.urandom(32).hex()
with open(key_file, "w") as f:
f.write(new_key)
settings.JWT_SECRET_KEY = new_key
except Exception as e:
raise RuntimeError(f"Failed to setup JWT_SECRET_KEY: {e}")
SIMPLE_JWT_TOKEN = None
if settings.AUTH_TYPE == "simple_jwt":
payload = {"sub": "local"}
SIMPLE_JWT_TOKEN = jwt.encode(payload, settings.JWT_SECRET_KEY, algorithm="HS256")
print(f"Generated Simple JWT Token: {SIMPLE_JWT_TOKEN}")
@app.route("/")
def home():
if request.remote_addr in ('0.0.0.0', '127.0.0.1', 'localhost', '172.18.0.1'):
return redirect('http://localhost:5173')
if request.remote_addr in ("0.0.0.0", "127.0.0.1", "localhost", "172.18.0.1"):
return redirect("http://localhost:5173")
else:
return 'Welcome to DocsGPT Backend!'
return "Welcome to DocsGPT Backend!"
@app.route("/api/config")
def get_config():
response = {
"auth_type": settings.AUTH_TYPE,
"requires_auth": settings.AUTH_TYPE in ["simple_jwt", "session_jwt"],
}
return jsonify(response)
@app.route("/api/generate_token")
def generate_token():
if settings.AUTH_TYPE == "session_jwt":
new_user_id = str(uuid.uuid4())
token = jwt.encode(
{"sub": new_user_id}, settings.JWT_SECRET_KEY, algorithm="HS256"
)
return jsonify({"token": token})
return jsonify({"error": "Token generation not allowed in current auth mode"}), 400
@app.before_request
def authenticate_request():
if request.method == "OPTIONS":
return "", 200
decoded_token = handle_auth(request)
if not decoded_token:
request.decoded_token = None
elif "error" in decoded_token:
return jsonify(decoded_token), 401
else:
request.decoded_token = decoded_token
@app.after_request
def after_request(response):
response.headers.add("Access-Control-Allow-Origin", "*")
response.headers.add("Access-Control-Allow-Headers", "Content-Type,Authorization")
response.headers.add("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS")
response.headers.add("Access-Control-Allow-Headers", "Content-Type, Authorization")
response.headers.add(
"Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"
)
return response
if __name__ == "__main__":
app.run(debug=True, port=7091)
if __name__ == "__main__":
app.run(debug=settings.FLASK_DEBUG_MODE, port=7091)

28
application/auth.py Normal file
View File

@@ -0,0 +1,28 @@
from jose import jwt
from application.core.settings import settings
def handle_auth(request, data={}):
if settings.AUTH_TYPE in ["simple_jwt", "session_jwt"]:
jwt_token = request.headers.get("Authorization")
if not jwt_token:
return None
jwt_token = jwt_token.replace("Bearer ", "")
try:
decoded_token = jwt.decode(
jwt_token,
settings.JWT_SECRET_KEY,
algorithms=["HS256"],
options={"verify_exp": False},
)
return decoded_token
except Exception as e:
return {
"message": f"Authentication error: {str(e)}",
"error": "invalid_token",
}
else:
return {"sub": "local"}

117
application/cache.py Normal file
View File

@@ -0,0 +1,117 @@
import json
import logging
import time
from threading import Lock
import redis
from application.core.settings import settings
from application.utils import get_hash
logger = logging.getLogger(__name__)
_redis_instance = None
_redis_creation_failed = False
_instance_lock = Lock()
def get_redis_instance():
global _redis_instance, _redis_creation_failed
if _redis_instance is None and not _redis_creation_failed:
with _instance_lock:
if _redis_instance is None and not _redis_creation_failed:
try:
_redis_instance = redis.Redis.from_url(
settings.CACHE_REDIS_URL, socket_connect_timeout=2
)
except ValueError as e:
logger.error(f"Invalid Redis URL: {e}")
_redis_creation_failed = True # Stop future attempts
_redis_instance = None
except redis.ConnectionError as e:
logger.error(f"Redis connection error: {e}")
_redis_instance = None # Keep trying for connection errors
return _redis_instance
def gen_cache_key(messages, model="docgpt", tools=None):
if not all(isinstance(msg, dict) for msg in messages):
raise ValueError("All messages must be dictionaries.")
messages_str = json.dumps(messages)
tools_str = json.dumps(str(tools)) if tools else ""
combined = f"{model}_{messages_str}_{tools_str}"
cache_key = get_hash(combined)
return cache_key
def gen_cache(func):
def wrapper(self, model, messages, stream, tools=None, *args, **kwargs):
if tools is not None:
return func(self, model, messages, stream, tools, *args, **kwargs)
try:
cache_key = gen_cache_key(messages, model, tools)
except ValueError as e:
logger.error(f"Cache key generation failed: {e}")
return func(self, model, messages, stream, tools, *args, **kwargs)
redis_client = get_redis_instance()
if redis_client:
try:
cached_response = redis_client.get(cache_key)
if cached_response:
return cached_response.decode("utf-8")
except Exception as e:
logger.error(f"Error getting cached response: {e}", exc_info=True)
result = func(self, model, messages, stream, tools, *args, **kwargs)
if redis_client and isinstance(result, str):
try:
redis_client.set(cache_key, result, ex=1800)
except Exception as e:
logger.error(f"Error setting cache: {e}", exc_info=True)
return result
return wrapper
def stream_cache(func):
def wrapper(self, model, messages, stream, tools=None, *args, **kwargs):
if tools is not None:
yield from func(self, model, messages, stream, tools, *args, **kwargs)
return
try:
cache_key = gen_cache_key(messages, model, tools)
except ValueError as e:
logger.error(f"Cache key generation failed: {e}")
yield from func(self, model, messages, stream, tools, *args, **kwargs)
return
redis_client = get_redis_instance()
if redis_client:
try:
cached_response = redis_client.get(cache_key)
if cached_response:
logger.info(f"Cache hit for stream key: {cache_key}")
cached_response = json.loads(cached_response.decode("utf-8"))
for chunk in cached_response:
yield chunk
time.sleep(0.03) # Simulate streaming delay
return
except Exception as e:
logger.error(f"Error getting cached stream: {e}", exc_info=True)
stream_cache_data = []
for chunk in func(self, model, messages, stream, tools, *args, **kwargs):
yield chunk
stream_cache_data.append(str(chunk))
if redis_client:
try:
redis_client.set(cache_key, json.dumps(stream_cache_data), ex=1800)
logger.info(f"Stream cache saved for key: {cache_key}")
except Exception as e:
logger.error(f"Error setting stream cache: {e}", exc_info=True)
return wrapper

View File

@@ -1,9 +0,0 @@
from celery import Celery
from application.core.settings import settings
def make_celery(app_name=__name__):
celery = Celery(app_name, broker=settings.CELERY_BROKER_URL, backend=settings.CELERY_RESULT_BACKEND)
celery.conf.update(settings)
return celery
celery = make_celery()

View File

@@ -0,0 +1,23 @@
from celery import Celery
from application.core.settings import settings
from celery.signals import setup_logging
def make_celery(app_name=__name__):
celery = Celery(
app_name,
broker=settings.CELERY_BROKER_URL,
backend=settings.CELERY_RESULT_BACKEND,
)
celery.conf.update(settings)
return celery
@setup_logging.connect
def config_loggers(*args, **kwargs):
from application.core.logging_config import setup_logging
setup_logging()
celery = make_celery()

View File

@@ -0,0 +1,22 @@
from logging.config import dictConfig
def setup_logging():
dictConfig({
'version': 1,
'formatters': {
'default': {
'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
}
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"stream": "ext://sys.stdout",
"formatter": "default",
}
},
'root': {
'level': 'INFO',
'handlers': ['console'],
},
})

View File

@@ -0,0 +1,24 @@
from application.core.settings import settings
from pymongo import MongoClient
class MongoDB:
_client = None
@classmethod
def get_client(cls):
"""
Get the MongoDB client instance, creating it if necessary.
"""
if cls._client is None:
cls._client = MongoClient(settings.MONGO_URI)
return cls._client
@classmethod
def close_client(cls):
"""
Close the MongoDB client connection.
"""
if cls._client is not None:
cls._client.close()
cls._client = None

Some files were not shown because too many files have changed in this diff Show More