Compare commits

..

1166 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
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
Digvijay Shelar
56e3a1c3b2 DocsGPT DEMO UPDATED 2024-10-14 17:08:47 +05:30
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
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
260 changed files with 21851 additions and 12579 deletions

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

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

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

@@ -0,0 +1,19 @@
# 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: "github-actions"
directory: "/"
schedule:
interval: "daily"

14
.github/holopin.yml vendored
View File

@@ -1,5 +1,11 @@
organization: arc53
defaultSticker: clqmdf0ed34290glbvqh0kzxd
organization: docsgpt
defaultSticker: cm1ulwkkl180570cl82rtzympu
stickers:
- id: clqmdf0ed34290glbvqh0kzxd
alias: festive
- 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/**/*'

View File

@@ -1,10 +1,8 @@
name: Build and push DocsGPT Docker image
on:
workflow_dispatch:
push:
branches:
- main
release:
types: [published]
jobs:
deploy:
@@ -14,34 +12,36 @@ jobs:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v3
- 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 }}
- name: Build and push Docker images to docker.io and ghcr.io
uses: docker/build-push-action@v4
uses: docker/build-push-action@v6
with:
file: './application/Dockerfile'
platforms: linux/amd64
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 }},${{ secrets.DOCKER_USERNAME }}/docsgpt:latest
ghcr.io/${{ github.repository_owner }}/docsgpt:${{ github.event.release.tag_name }},ghcr.io/${{ github.repository_owner }}/docsgpt:latest
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/docsgpt:latest
cache-to: type=inline

View File

@@ -1,10 +1,8 @@
name: Build and push DocsGPT-FE Docker image
on:
workflow_dispatch:
push:
branches:
- main
release:
types: [published]
jobs:
deploy:
@@ -14,22 +12,22 @@ jobs:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v3
- 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 }}
@@ -37,12 +35,14 @@ jobs:
# 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
uses: docker/build-push-action@v6
with:
file: './frontend/Dockerfile'
platforms: linux/amd64, linux/arm64
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 }},${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:latest
ghcr.io/${{ github.repository_owner }}/docsgpt-fe:${{ github.event.release.tag_name }},ghcr.io/${{ github.repository_owner }}/docsgpt-fe:latest
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:latest
cache-to: type=inline

View File

@@ -0,0 +1,49 @@
name: Build and push DocsGPT Docker image for development
on:
workflow_dispatch:
push:
branches:
- main
jobs:
deploy:
if: github.repository == 'arc53/DocsGPT'
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- 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 Docker images to docker.io and ghcr.io
uses: docker/build-push-action@v6
with:
file: './application/Dockerfile'
platforms: linux/amd64
context: ./application
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/docsgpt:develop
ghcr.io/${{ github.repository_owner }}/docsgpt:develop
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/docsgpt:develop
cache-to: type=inline

View File

@@ -0,0 +1,49 @@
name: Build and push DocsGPT FE Docker image for development
on:
workflow_dispatch:
push:
branches:
- main
jobs:
deploy:
if: github.repository == 'arc53/DocsGPT'
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- 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 Docker images to docker.io and ghcr.io
uses: docker/build-push-action@v6
with:
file: './frontend/Dockerfile'
platforms: linux/amd64
context: ./frontend
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:develop
ghcr.io/${{ github.repository_owner }}/docsgpt-fe:develop
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/docsgpt-fe:develop
cache-to: type=inline

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,11 +6,11 @@ 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
@@ -21,10 +21,10 @@ jobs:
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
- 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

2
.gitignore vendored
View File

@@ -172,5 +172,5 @@ application/vectors/
node_modules/
.vscode/settings.json
models/
/models/
model/

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

@@ -0,0 +1,54 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Docker Debug Frontend",
"request": "launch",
"type": "chrome",
"preLaunchTask": "docker-compose: debug:frontend",
"url": "http://127.0.0.1:5173",
"webRoot": "${workspaceFolder}/frontend",
"skipFiles": [
"<node_internals>/**"
]
},
{
"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}"
}
]
}

21
.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,21 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "docker-compose",
"label": "docker-compose: debug:frontend",
"dockerCompose": {
"up": {
"detached": true,
"services": [
"frontend"
],
"build": true
},
"files": [
"${workspaceFolder}/docker-compose.yaml"
]
}
}
]
}

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:
@@ -35,15 +37,14 @@ Tech Stack Overview:
### 🌐 If you are looking to contribute to frontend (⚛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).
Please try to follow the guidelines.
### 🖥 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.
@@ -125,4 +126,4 @@ 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!🙏
# Thank you so much for considering to contributing DocsGPT!🙏

210
README.md
View File

@@ -3,13 +3,11 @@
</h1>
<p align="center">
<strong>Open-Source Documentation Assistant</strong>
<strong>Open-Source RAG Assistant</strong>
</p>
<p align="left">
<strong><a href="https://www.docsgpt.cloud/">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://www.docsgpt.cloud/">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 genAI tool that helps users get reliable answers from any knowledge source, while avoiding hallucinations. It enables quick and reliable information retrieval, with tooling and agentic system capability built in.
</p>
<div align="center">
@@ -20,173 +18,122 @@ Say goodbye to time-consuming manual searches, and let <strong><a href="https://
<a href="https://discord.gg/n5BX8dh8rU">![link to discord](https://img.shields.io/discord/1070046503302877216)</a>
<a href="https://twitter.com/docsgptai">![X (formerly Twitter) URL](https://img.shields.io/twitter/follow/docsgptai)</a>
<br>
[☁️ Cloud Version](https://app.docsgpt.cloud/) • [💬 Discord](https://discord.gg/n5BX8dh8rU) • [📖 Guides](https://docs.docsgpt.cloud/)
<br>
[👫 Contribute](https://github.com/arc53/DocsGPT/blob/main/CONTRIBUTING.md) • [🏠 Self-host](https://docs.docsgpt.cloud/Guides/How-to-use-different-LLM) • [⚡️ Quickstart](https://github.com/arc53/DocsGPT#quickstart)
</div>
<div align="center">
<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>🔗 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)
- [ ] Anthropic Tool compatibility
- [ ] Add triggerable actions / tools (webhook)
- [ ] Add OAuth 2.0 authentication for tools and sources
- [ ] Manually updating chunks in the app UI
- [ ] Devcontainer for easy development
- [ ] Chatbots menu re-design to handle tools, scheduling, and more
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.
- [Get Enterprise / teams Demo :wave:](https://www.docsgpt.cloud/contact)
- [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
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!
## Our Open-Source Models Optimized for DocsGPT:
| Name | Base Model | Requirements (or similar) |
| --------------------------------------------------------------------- | ----------- | ------------------------- |
| [Docsgpt-7b-mistral](https://huggingface.co/Arc53/docsgpt-7b-mistral) | Mistral-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: [Cloud Version](https://app.docsgpt.cloud/)
- :speech_balloon: :tada: [Join our Discord](https://discord.gg/n5BX8dh8rU)
- :books: :sunglasses: [Guides](https://docs.docsgpt.cloud/)
- :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.cloud/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.cloud/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>.
## QuickStart
> [!Note]
> Make sure you have [Docker](https://docs.docker.com/engine/install/) installed
1. Clone the repository and run the following command:
```bash
git clone https://github.com/arc53/DocsGPT.git
cd DocsGPT
```
On Mac OS or Linux, write:
`./setup.sh`
2. Run the following command:
```bash
./setup.sh
```
It will install all the dependencies and allow you to download the local model, use OpenAI or use our LLM API.
Otherwise, refer to this Guide for Windows:
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 variables and `VITE_API_STREAMING` to true or false, depending on whether you want streaming answers or not.
On windows:
2. Create a `.env` file in your root directory and set the env variables.
It should look like this inside:
```
LLM_NAME=[docsgpt or openai or others]
VITE_API_STREAMING=true
API_KEY=[if LLM_NAME is openai]
```
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.
See optional environment variables in the [/application/.env_sample](https://github.com/arc53/DocsGPT/blob/main/application/.env_sample) file.
3. Run [./run-with-docker-compose.sh](https://github.com/arc53/DocsGPT/blob/main/run-with-docker-compose.sh).
3. Run the following command:
```bash
docker compose up --build
```
4. Navigate to http://localhost:5173/.
To stop, just run `Ctrl + C`.
## Development Environments
### Spin up Mongo and Redis
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).
Run
```
docker compose -f docker-compose-dev.yaml build
docker compose -f docker-compose-dev.yaml up -d
```
### Run the Backend
> [!Note]
> Make sure you have Python 3.10 or 3.11 installed.
1. Export required environment variables or prepare a `.env` file in the project folder:
- Copy [.env_sample](https://github.com/arc53/DocsGPT/blob/main/application/.env_sample) and create `.env`.
(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. Download embedding model and save it in the `model/` folder:
You can use the script below, or download it manually from [here](https://d3dg1063dc54p9.cloudfront.net/models/embeddings/mpnet-base-v2.zip), unzip it and save it in the `model/` folder.
```commandline
wget https://d3dg1063dc54p9.cloudfront.net/models/embeddings/mpnet-base-v2.zip
unzip mpnet-base-v2.zip -d model
rm mpnet-base-v2.zip
```
4. Install dependencies for the backend:
```commandline
pip install -r application/requirements.txt
```
5. Run the app using `flask --app application/app.py run --host=0.0.0.0 --port=7091`.
6. 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.
## Many Thanks To Our Contributors⚡
<a href="https://github.com/arc53/DocsGPT/graphs/contributors" alt="View Contributors">
@@ -197,4 +144,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

View File

@@ -4,21 +4,18 @@ FROM ubuntu:24.04 as builder
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa
apt-get install -y software-properties-common && \
add-apt-repository ppa:deadsnakes/ppa && \
# Install necessary packages and Python
RUN apt-get update && \
apt-get install -y --no-install-recommends gcc curl wget unzip libc6-dev python3.11 python3.11-distutils python3.11-venv && \
apt-get clean && \
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.11 ]; then \
ln -s /usr/bin/python3.11 /usr/bin/python; \
RUN if [ -f /usr/bin/python3.12 ]; then \
ln -s /usr/bin/python3.12 /usr/bin/python; \
else \
echo "Python 3.11 not found"; exit 1; \
echo "Python 3.12 not found"; exit 1; \
fi
# Download and unzip the model
@@ -27,7 +24,7 @@ RUN wget https://d3dg1063dc54p9.cloudfront.net/models/embeddings/mpnet-base-v2.z
rm mpnet-base-v2.zip
# Install Rust
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
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/*
@@ -36,7 +33,7 @@ RUN apt-get remove --purge -y wget unzip && apt-get autoremove -y && rm -rf /var
COPY requirements.txt .
# Setup Python virtual environment
RUN python3.11 -m venv /venv
RUN python3.12 -m venv /venv
# Activate virtual environment and install Python packages
ENV PATH="/venv/bin:$PATH"
@@ -50,13 +47,11 @@ RUN pip install --no-cache-dir --upgrade pip && \
FROM ubuntu:24.04 as final
RUN apt-get update && \
apt-get install -y software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa
apt-get install -y software-properties-common && \
add-apt-repository ppa:deadsnakes/ppa && \
# Install Python
RUN apt-get update && apt-get install -y --no-install-recommends python3.11 && \
ln -s /usr/bin/python3.11 /usr/bin/python && \
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

View File

@@ -1,36 +1,47 @@
import asyncio
import datetime
import json
import logging
import os
import sys
from flask import Blueprint, request, Response
import json
import datetime
import logging
import traceback
from pymongo import MongoClient
from bson.dbref import DBRef
from bson.objectid import ObjectId
from flask import Blueprint, current_app, make_response, request, Response
from flask_restx import fields, Namespace, Resource
from application.core.mongo_db import MongoDB
from application.core.settings import settings
from application.error import bad_request
from application.extensions import api
from application.llm.llm_creator import LLMCreator
from application.retriever.retriever_creator import RetrieverCreator
from application.error import bad_request
from application.utils import check_required_fields, limit_chat_history
logger = logging.getLogger(__name__)
mongo = MongoClient(settings.MONGO_URI)
mongo = MongoDB.get_client()
db = mongo["docsgpt"]
conversations_collection = db["conversations"]
vectors_collection = db["vectors"]
sources_collection = db["sources"]
prompts_collection = db["prompts"]
api_key_collection = db["api_keys"]
user_logs_collection = db["user_logs"]
answer = Blueprint("answer", __name__)
answer_ns = Namespace("answer", description="Answer related operations", path="/")
api.add_namespace(answer_ns)
gpt_model = ""
# to have some kind of default behaviour
if settings.LLM_NAME == "openai":
gpt_model = "gpt-3.5-turbo"
gpt_model = "gpt-4o-mini"
elif settings.LLM_NAME == "anthropic":
gpt_model = "claude-2"
elif settings.LLM_NAME == "groq":
gpt_model = "llama3-8b-8192"
if settings.MODEL_NAME: # in case there is particular model name configured
gpt_model = settings.MODEL_NAME
@@ -74,27 +85,29 @@ def run_async_chain(chain, question, chat_history):
def get_data_from_api_key(api_key):
data = api_key_collection.find_one({"key": api_key})
# # Raise custom exception if the API key is not found
if data is None:
raise Exception("Invalid API Key, please generate new key", 401)
if "retriever" not in data:
data["retriever"] = None
if "source" in data and isinstance(data["source"], DBRef):
source_doc = db.dereference(data["source"])
data["source"] = str(source_doc["_id"])
if "retriever" in source_doc:
data["retriever"] = source_doc["retriever"]
else:
data["source"] = {}
return data
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 get_retriever(source_id: str):
doc = sources_collection.find_one({"_id": ObjectId(source_id)})
if doc is None:
raise Exception("Source document does not exist", 404)
retriever_name = None if "retriever" not in doc else doc["retriever"]
return retriever_name
def is_azure_configured():
@@ -105,8 +118,31 @@ def is_azure_configured():
)
def save_conversation(conversation_id, question, response, source_log_docs, llm):
if conversation_id is not None and conversation_id != "None":
def save_conversation(conversation_id, question, response, source_log_docs, llm,index=None):
if conversation_id is not None and index is not None:
conversations_collection.update_one(
{"_id": ObjectId(conversation_id), f"queries.{index}": {"$exists": True}},
{
"$set": {
f"queries.{index}.prompt": question,
f"queries.{index}.response": response,
f"queries.{index}.sources": source_log_docs,
}
}
)
##remove following queries from the array
conversations_collection.update_one(
{"_id": ObjectId(conversation_id), f"queries.{index}": {"$exists": True}},
{
"$push":{
"queries":{
"$each":[],
"$slice":index+1
}
}
}
)
elif conversation_id is not None and conversation_id != "None":
conversations_collection.update_one(
{"_id": ObjectId(conversation_id)},
{
@@ -128,17 +164,17 @@ def save_conversation(conversation_id, question, response, source_log_docs, llm)
"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,
"language as the system",
},
{
"role": "user",
"content": "Summarise following conversation in no more than 3 words, "
"respond ONLY with the summary, use the same language as the "
"system",
"system \n\nUser: "
+ question
+ "\n\n"
+ "AI: "
+ response,
},
]
@@ -172,12 +208,21 @@ def get_prompt(prompt_id):
return prompt
def complete_stream(question, retriever, conversation_id, user_api_key):
def complete_stream(
question, retriever, conversation_id, user_api_key, isNoneDoc=False,index=None
):
try:
response_full = ""
source_log_docs = []
answer = retriever.gen()
sources = retriever.search()
for source in sources:
if "text" in source:
source["text"] = source["text"][:100].strip() + "..."
if len(sources) > 0:
data = json.dumps({"type": "source", "source": sources})
yield f"data: {data}\n\n"
for line in answer:
if "answer" in line:
response_full += str(line["answer"])
@@ -186,254 +231,416 @@ def complete_stream(question, retriever, conversation_id, user_api_key):
elif "source" in line:
source_log_docs.append(line["source"])
if isNoneDoc:
for doc in source_log_docs:
doc["source"] = "None"
llm = LLMCreator.create_llm(
settings.LLM_NAME, api_key=settings.API_KEY, user_api_key=user_api_key
)
conversation_id = save_conversation(
conversation_id, question, response_full, source_log_docs, llm
)
# 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"
if user_api_key is None:
conversation_id = save_conversation(
conversation_id, question, response_full, source_log_docs, llm,index
)
# 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"
retriever_params = retriever.get_params()
user_logs_collection.insert_one(
{
"action": "stream_answer",
"level": "info",
"user": "local",
"api_key": user_api_key,
"question": question,
"response": response_full,
"sources": source_log_docs,
"retriever_params": retriever_params,
"timestamp": datetime.datetime.now(datetime.timezone.utc),
}
)
data = json.dumps({"type": "end"})
yield f"data: {data}\n\n"
except Exception as e:
print("\033[91merr", str(e), file=sys.stderr)
data = json.dumps({"type": "error","error":"Please try again later. We apologize for any inconvenience.",
"error_exception": str(e)})
yield f"data: {data}\n\n"
return
@answer.route("/stream", methods=["POST"])
def stream():
try:
data = request.get_json()
# get parameter from url question
question = data["question"]
if "history" not in data:
history = []
else:
history = data["history"]
history = json.loads(history)
if "conversation_id" not in data:
conversation_id = None
else:
conversation_id = data["conversation_id"]
if "prompt_id" in data:
prompt_id = data["prompt_id"]
else:
prompt_id = "default"
if "selectedDocs" in data and data["selectedDocs"] is None:
chunks = 0
elif "chunks" in data:
chunks = int(data["chunks"])
else:
chunks = 2
if "token_limit" in data:
token_limit = data["token_limit"]
else:
token_limit = settings.DEFAULT_MAX_HISTORY
# check if active_docs or api_key is set
if "api_key" in data:
data_key = get_data_from_api_key(data["api_key"])
chunks = int(data_key["chunks"])
prompt_id = data_key["prompt_id"]
source = {"active_docs": data_key["source"]}
user_api_key = data["api_key"]
elif "active_docs" in data:
source = {"active_docs": data["active_docs"]}
user_api_key = None
else:
source = {}
user_api_key = None
if (
source["active_docs"].split("/")[0] == "default"
or source["active_docs"].split("/")[0] == "local"
):
retriever_name = "classic"
else:
retriever_name = source["active_docs"]
prompt = get_prompt(prompt_id)
retriever = RetrieverCreator.create_retriever(
retriever_name,
question=question,
source=source,
chat_history=history,
prompt=prompt,
chunks=chunks,
token_limit=token_limit,
gpt_model=gpt_model,
user_api_key=user_api_key,
)
return Response(
complete_stream(
question=question,
retriever=retriever,
conversation_id=conversation_id,
user_api_key=user_api_key,
),
mimetype="text/event-stream",
)
except ValueError:
message = "Malformed request body"
print("\033[91merr", str(message), file=sys.stderr)
return Response(
error_stream_generate(message),
status=400,
mimetype="text/event-stream",
)
except Exception as e:
print("\033[91merr", str(e), file=sys.stderr)
message = e.args[0]
status_code = 400
# # Custom exceptions with two arguments, index 1 as status code
if(len(e.args) >= 2):
status_code = e.args[1]
return Response(
error_stream_generate(message),
status=status_code,
mimetype="text/event-stream",
)
def error_stream_generate(err_response):
data = json.dumps({"type": "error", "error":err_response})
yield f"data: {data}\n\n"
@answer.route("/api/answer", methods=["POST"])
def api_answer():
data = request.get_json()
question = data["question"]
if "history" not in data:
history = []
else:
history = data["history"]
if "conversation_id" not in data:
conversation_id = None
else:
conversation_id = data["conversation_id"]
print("-" * 5)
if "prompt_id" in data:
prompt_id = data["prompt_id"]
else:
prompt_id = "default"
if "chunks" in data:
chunks = int(data["chunks"])
else:
chunks = 2
if "token_limit" in data:
token_limit = data["token_limit"]
else:
token_limit = settings.DEFAULT_MAX_HISTORY
# use try and except to check for exception
try:
# check if the vectorstore is set
if "api_key" in data:
data_key = get_data_from_api_key(data["api_key"])
chunks = int(data_key["chunks"])
prompt_id = data_key["prompt_id"]
source = {"active_docs": data_key["source"]}
user_api_key = data["api_key"]
else:
source = data
user_api_key = None
if (
source["active_docs"].split("/")[0] == "default"
or source["active_docs"].split("/")[0] == "local"
):
retriever_name = "classic"
else:
retriever_name = source["active_docs"]
prompt = get_prompt(prompt_id)
retriever = RetrieverCreator.create_retriever(
retriever_name,
question=question,
source=source,
chat_history=history,
prompt=prompt,
chunks=chunks,
token_limit=token_limit,
gpt_model=gpt_model,
user_api_key=user_api_key,
)
source_log_docs = []
response_full = ""
for line in retriever.gen():
if "source" in line:
source_log_docs.append(line["source"])
elif "answer" in line:
response_full += line["answer"]
llm = LLMCreator.create_llm(
settings.LLM_NAME, api_key=settings.API_KEY, user_api_key=user_api_key
)
result = {"answer": response_full, "sources": source_log_docs}
result["conversation_id"] = save_conversation(
conversation_id, question, response_full, source_log_docs, llm
)
return result
except Exception as e:
# print whole traceback
traceback.print_exc()
print(str(e))
return bad_request(500, str(e))
data = json.dumps(
{
"type": "error",
"error": "Please try again later. We apologize for any inconvenience.",
"error_exception": str(e),
}
)
yield f"data: {data}\n\n"
return
@answer.route("/api/search", methods=["POST"])
def api_search():
data = request.get_json()
# get parameter from url question
question = data["question"]
if "chunks" in data:
chunks = int(data["chunks"])
else:
chunks = 2
if "api_key" in data:
data_key = get_data_from_api_key(data["api_key"])
chunks = int(data_key["chunks"])
source = {"active_docs": data_key["source"]}
user_api_key = data["api_key"]
elif "active_docs" in data:
source = {"active_docs": data["active_docs"]}
user_api_key = None
else:
source = {}
user_api_key = None
if (
source["active_docs"].split("/")[0] == "default"
or source["active_docs"].split("/")[0] == "local"
):
retriever_name = "classic"
else:
retriever_name = source["active_docs"]
if "token_limit" in data:
token_limit = data["token_limit"]
else:
token_limit = settings.DEFAULT_MAX_HISTORY
retriever = RetrieverCreator.create_retriever(
retriever_name,
question=question,
source=source,
chat_history=[],
prompt="default",
chunks=chunks,
token_limit=token_limit,
gpt_model=gpt_model,
user_api_key=user_api_key,
@answer_ns.route("/stream")
class Stream(Resource):
stream_model = api.model(
"StreamModel",
{
"question": fields.String(
required=True, description="Question to be asked"
),
"history": fields.List(
fields.String, required=False, description="Chat history"
),
"conversation_id": fields.String(
required=False, description="Conversation ID"
),
"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="The position where query is to be updated"
),
},
)
docs = retriever.search()
return docs
@api.expect(stream_model)
@api.doc(description="Stream a response based on the question and retriever")
def post(self):
data = request.get_json()
required_fields = ["question"]
if "index" in data:
required_fields = ["question","conversation_id"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
question = data["question"]
history = limit_chat_history(json.loads(data.get("history", [])), gpt_model=gpt_model)
conversation_id = data.get("conversation_id")
prompt_id = data.get("prompt_id", "default")
index=data.get("index",None)
chunks = int(data.get("chunks", 2))
token_limit = data.get("token_limit", settings.DEFAULT_MAX_HISTORY)
retriever_name = data.get("retriever", "classic")
if "api_key" in data:
data_key = get_data_from_api_key(data["api_key"])
chunks = int(data_key.get("chunks", 2))
prompt_id = data_key.get("prompt_id", "default")
source = {"active_docs": data_key.get("source")}
retriever_name = data_key.get("retriever", retriever_name)
user_api_key = data["api_key"]
elif "active_docs" in data:
source = {"active_docs": data["active_docs"]}
retriever_name = get_retriever(data["active_docs"]) or retriever_name
user_api_key = None
else:
source = {}
user_api_key = None
current_app.logger.info(
f"/stream - request_data: {data}, source: {source}",
extra={"data": json.dumps({"request_data": data, "source": source})},
)
prompt = get_prompt(prompt_id)
if "isNoneDoc" in data and data["isNoneDoc"] is True:
chunks = 0
retriever = RetrieverCreator.create_retriever(
retriever_name,
question=question,
source=source,
chat_history=history,
prompt=prompt,
chunks=chunks,
token_limit=token_limit,
gpt_model=gpt_model,
user_api_key=user_api_key,
)
return Response(
complete_stream(
question=question,
retriever=retriever,
conversation_id=conversation_id,
user_api_key=user_api_key,
isNoneDoc=data.get("isNoneDoc"),
index=index,
),
mimetype="text/event-stream",
)
except ValueError:
message = "Malformed request body"
print("\033[91merr", str(message), file=sys.stderr)
return Response(
error_stream_generate(message),
status=400,
mimetype="text/event-stream",
)
except Exception as e:
current_app.logger.error(
f"/stream - error: {str(e)} - traceback: {traceback.format_exc()}",
extra={"error": str(e), "traceback": traceback.format_exc()},
)
message = e.args[0]
status_code = 400
# Custom exceptions with two arguments, index 1 as status code
if len(e.args) >= 2:
status_code = e.args[1]
return Response(
error_stream_generate(message),
status=status_code,
mimetype="text/event-stream",
)
def error_stream_generate(err_response):
data = json.dumps({"type": "error", "error": err_response})
yield f"data: {data}\n\n"
@answer_ns.route("/api/answer")
class Answer(Resource):
answer_model = api.model(
"AnswerModel",
{
"question": fields.String(
required=True, description="The question to answer"
),
"history": fields.List(
fields.String, required=False, description="Conversation history"
),
"conversation_id": fields.String(
required=False, description="Conversation ID"
),
"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"
),
},
)
@api.expect(answer_model)
@api.doc(description="Provide an answer based on the question and retriever")
def post(self):
data = request.get_json()
required_fields = ["question"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
question = data["question"]
history = limit_chat_history(json.loads(data.get("history", [])), gpt_model=gpt_model)
conversation_id = data.get("conversation_id")
prompt_id = data.get("prompt_id", "default")
chunks = int(data.get("chunks", 2))
token_limit = data.get("token_limit", settings.DEFAULT_MAX_HISTORY)
retriever_name = data.get("retriever", "classic")
if "api_key" in data:
data_key = get_data_from_api_key(data["api_key"])
chunks = int(data_key.get("chunks", 2))
prompt_id = data_key.get("prompt_id", "default")
source = {"active_docs": data_key.get("source")}
retriever_name = data_key.get("retriever", retriever_name)
user_api_key = data["api_key"]
elif "active_docs" in data:
source = {"active_docs": data["active_docs"]}
retriever_name = get_retriever(data["active_docs"]) or retriever_name
user_api_key = None
else:
source = {}
user_api_key = None
prompt = get_prompt(prompt_id)
current_app.logger.info(
f"/api/answer - request_data: {data}, source: {source}",
extra={"data": json.dumps({"request_data": data, "source": source})},
)
retriever = RetrieverCreator.create_retriever(
retriever_name,
question=question,
source=source,
chat_history=history,
prompt=prompt,
chunks=chunks,
token_limit=token_limit,
gpt_model=gpt_model,
user_api_key=user_api_key,
)
source_log_docs = []
response_full = ""
for line in retriever.gen():
if "source" in line:
source_log_docs.append(line["source"])
elif "answer" in line:
response_full += line["answer"]
if data.get("isNoneDoc"):
for doc in source_log_docs:
doc["source"] = "None"
llm = LLMCreator.create_llm(
settings.LLM_NAME, api_key=settings.API_KEY, user_api_key=user_api_key
)
result = {"answer": response_full, "sources": source_log_docs}
result["conversation_id"] = str(
save_conversation(
conversation_id, question, response_full, source_log_docs, llm
)
)
retriever_params = retriever.get_params()
user_logs_collection.insert_one(
{
"action": "api_answer",
"level": "info",
"user": "local",
"api_key": user_api_key,
"question": question,
"response": response_full,
"sources": source_log_docs,
"retriever_params": retriever_params,
"timestamp": datetime.datetime.now(datetime.timezone.utc),
}
)
except Exception as e:
current_app.logger.error(
f"/api/answer - error: {str(e)} - traceback: {traceback.format_exc()}",
extra={"error": str(e), "traceback": traceback.format_exc()},
)
return bad_request(500, str(e))
return make_response(result, 200)
@answer_ns.route("/api/search")
class Search(Resource):
search_model = api.model(
"SearchModel",
{
"question": fields.String(
required=True, description="The question to search"
),
"chunks": fields.Integer(
required=False, default=2, description="Number of chunks"
),
"api_key": fields.String(
required=False, description="API key for authentication"
),
"active_docs": fields.String(
required=False, description="Active documents for retrieval"
),
"retriever": fields.String(required=False, description="Retriever type"),
"token_limit": fields.Integer(
required=False, description="Limit for tokens"
),
"isNoneDoc": fields.Boolean(
required=False, description="Flag indicating if no document is used"
),
},
)
@api.expect(search_model)
@api.doc(
description="Search for relevant documents based on the question and retriever"
)
def post(self):
data = request.get_json()
required_fields = ["question"]
missing_fields = check_required_fields(data, required_fields)
if missing_fields:
return missing_fields
try:
question = data["question"]
chunks = int(data.get("chunks", 2))
token_limit = data.get("token_limit", settings.DEFAULT_MAX_HISTORY)
retriever_name = data.get("retriever", "classic")
if "api_key" in data:
data_key = get_data_from_api_key(data["api_key"])
chunks = int(data_key.get("chunks", 2))
source = {"active_docs": data_key.get("source")}
user_api_key = data["api_key"]
elif "active_docs" in data:
source = {"active_docs": data["active_docs"]}
user_api_key = None
else:
source = {}
user_api_key = None
current_app.logger.info(
f"/api/answer - request_data: {data}, source: {source}",
extra={"data": json.dumps({"request_data": data, "source": source})},
)
retriever = RetrieverCreator.create_retriever(
retriever_name,
question=question,
source=source,
chat_history=[],
prompt="default",
chunks=chunks,
token_limit=token_limit,
gpt_model=gpt_model,
user_api_key=user_api_key,
)
docs = retriever.search()
retriever_params = retriever.get_params()
user_logs_collection.insert_one(
{
"action": "api_search",
"level": "info",
"user": "local",
"api_key": user_api_key,
"question": question,
"sources": docs,
"retriever_params": retriever_params,
"timestamp": datetime.datetime.now(datetime.timezone.utc),
}
)
if data.get("isNoneDoc"):
for doc in docs:
doc["source"] = "None"
except Exception as e:
current_app.logger.error(
f"/api/search - error: {str(e)} - traceback: {traceback.format_exc()}",
extra={"error": str(e), "traceback": traceback.format_exc()},
)
return bad_request(500, str(e))
return make_response(docs, 200)

View File

@@ -1,20 +1,25 @@
import os
import datetime
from flask import Blueprint, request, send_from_directory
from pymongo import MongoClient
from werkzeug.utils import secure_filename
from bson.objectid import ObjectId
from application.core.mongo_db import MongoDB
from application.core.settings import settings
mongo = MongoClient(settings.MONGO_URI)
mongo = MongoDB.get_client()
db = mongo["docsgpt"]
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,7 +29,6 @@ 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."""
@@ -35,7 +39,13 @@ def upload_index_files():
return {"status": "no name"}
job_name = secure_filename(request.form["name"])
tokens = secure_filename(request.form["tokens"])
save_dir = os.path.join(current_dir, "indexes", user, job_name)
retriever = secure_filename(request.form["retriever"])
id = secure_filename(request.form["id"])
type = secure_filename(request.form["type"])
remote_data = request.form["remote_data"] if "remote_data" in request.form else None
sync_frequency = secure_filename(request.form["sync_frequency"]) if "sync_frequency" in request.form else None
save_dir = os.path.join(current_dir, "indexes", str(id))
if settings.VECTOR_STORE == "faiss":
if "file_faiss" not in request.files:
print("No file part")
@@ -50,22 +60,45 @@ def upload_index_files():
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",
"tokens": tokens
}
)
return {"status": "ok"}
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,
}
},
)
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,
}
)
return {"status": "ok"}

File diff suppressed because it is too large Load Diff

View File

@@ -1,12 +1,38 @@
from application.worker import ingest_worker, remote_worker
from datetime import timedelta
from application.celery_init import celery
from application.worker import ingest_worker, 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)
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 schedule_syncs(self, frequency):
resp = sync_worker(self, 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"),
)

View File

@@ -1,17 +1,23 @@
import platform
import dotenv
from application.celery_init import celery
from flask import Flask, request, redirect
from application.core.settings import settings
from application.api.user.routes import user
from flask import Flask, redirect, request
from application.api.answer.routes import answer
from application.api.internal.routes import internal
from application.api.user.routes import user
from application.celery_init import celery
from application.core.logging_config import setup_logging
from application.core.settings import settings
from application.extensions import api
if platform.system() == "Windows":
import pathlib
pathlib.PosixPath = pathlib.WindowsPath
dotenv.load_dotenv()
setup_logging()
app = Flask(__name__)
app.register_blueprint(user)
@@ -21,16 +27,19 @@ 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)
@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.after_request
def after_request(response):
@@ -39,6 +48,6 @@ def after_request(response):
response.headers.add("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS")
return response
if __name__ == "__main__":
app.run(debug=settings.FLASK_DEBUG_MODE, port=7091)

103
application/cache.py Normal file
View File

@@ -0,0 +1,103 @@
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
_instance_lock = Lock()
def get_redis_instance():
global _redis_instance
if _redis_instance is None:
with _instance_lock:
if _redis_instance is None:
try:
_redis_instance = redis.Redis.from_url(
settings.CACHE_REDIS_URL, socket_connect_timeout=2
)
except redis.ConnectionError as e:
logger.error(f"Redis connection error: {e}")
_redis_instance = None
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):
try:
cache_key = gen_cache_key(messages, model, tools)
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 redis.ConnectionError as e:
logger.error(f"Redis connection error: {e}")
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 redis.ConnectionError as e:
logger.error(f"Redis connection error: {e}")
return result
except ValueError as e:
logger.error(e)
return "Error: No user message found in the conversation to generate a cache key."
return wrapper
def stream_cache(func):
def wrapper(self, model, messages, stream, tools=None, *args, **kwargs):
cache_key = gen_cache_key(messages, model, tools)
logger.info(f"Stream cache key: {cache_key}")
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)
return
except redis.ConnectionError as e:
logger.error(f"Redis connection error: {e}")
result = func(self, model, messages, stream, tools=tools, *args, **kwargs)
stream_cache_data = []
for chunk in result:
stream_cache_data.append(chunk)
yield 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 redis.ConnectionError as e:
logger.error(f"Redis connection error: {e}")
return wrapper

View File

@@ -1,9 +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 = 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

View File

@@ -16,11 +16,15 @@ class Settings(BaseSettings):
MONGO_URI: str = "mongodb://localhost:27017/docsgpt"
MODEL_PATH: str = os.path.join(current_dir, "models/docsgpt-7b-f16.gguf")
DEFAULT_MAX_HISTORY: int = 150
MODEL_TOKEN_LIMITS: dict = {"gpt-3.5-turbo": 4096, "claude-2": 1e5}
MODEL_TOKEN_LIMITS: dict = {"gpt-4o-mini": 128000, "gpt-3.5-turbo": 4096, "claude-2": 1e5}
UPLOAD_FOLDER: str = "inputs"
VECTOR_STORE: str = "faiss" # "faiss" or "elasticsearch" or "qdrant"
PARSE_PDF_AS_IMAGE: bool = False
VECTOR_STORE: str = "faiss" # "faiss" or "elasticsearch" or "qdrant" or "milvus" or "lancedb"
RETRIEVERS_ENABLED: list = ["classic_rag", "duckduck_search"] # also brave_search
# LLM Cache
CACHE_REDIS_URL: str = "redis://localhost:6379/2"
API_URL: str = "http://localhost:7091" # backend url for celery worker
API_KEY: Optional[str] = None # LLM api key
@@ -29,6 +33,7 @@ class Settings(BaseSettings):
OPENAI_API_VERSION: Optional[str] = None # azure openai api version
AZURE_DEPLOYMENT_NAME: Optional[str] = None # azure deployment name for answering
AZURE_EMBEDDINGS_DEPLOYMENT_NAME: Optional[str] = None # azure deployment name for embeddings
OPENAI_BASE_URL: Optional[str] = None # openai base url for open ai compatable models
# elasticsearch
ELASTIC_CLOUD_ID: Optional[str] = None # cloud id for elasticsearch
@@ -61,6 +66,14 @@ class Settings(BaseSettings):
QDRANT_PATH: Optional[str] = None
QDRANT_DISTANCE_FUNC: str = "Cosine"
# Milvus vectorstore config
MILVUS_COLLECTION_NAME: Optional[str] = "docsgpt"
MILVUS_URI: Optional[str] = "./milvus_local.db" # milvus lite version as default
MILVUS_TOKEN: Optional[str] = ""
# LanceDB vectorstore config
LANCEDB_PATH: str = "/tmp/lancedb" # Path where LanceDB stores its local data
LANCEDB_TABLE_NAME: Optional[str] = "docsgpts" # Name of the table to use for storing vectors
BRAVE_SEARCH_API_KEY: Optional[str] = None
FLASK_DEBUG_MODE: bool = False

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

@@ -17,7 +17,7 @@ class AnthropicLLM(BaseLLM):
self.AI_PROMPT = AI_PROMPT
def _raw_gen(
self, baseself, model, messages, stream=False, max_tokens=300, **kwargs
self, baseself, model, messages, stream=False, tools=None, max_tokens=300, **kwargs
):
context = messages[0]["content"]
user_question = messages[-1]["content"]
@@ -34,7 +34,7 @@ class AnthropicLLM(BaseLLM):
return completion.completion
def _raw_gen_stream(
self, baseself, model, messages, stream=True, max_tokens=300, **kwargs
self, baseself, model, messages, stream=True, tools=None, max_tokens=300, **kwargs
):
context = messages[0]["content"]
user_question = messages[-1]["content"]

View File

@@ -1,4 +1,6 @@
from abc import ABC, abstractmethod
from application.cache import gen_cache, stream_cache
from application.usage import gen_token_usage, stream_token_usage
@@ -6,23 +8,49 @@ class BaseLLM(ABC):
def __init__(self):
self.token_usage = {"prompt_tokens": 0, "generated_tokens": 0}
def _apply_decorator(self, method, decorator, *args, **kwargs):
return decorator(method, *args, **kwargs)
def _apply_decorator(self, method, decorators, *args, **kwargs):
for decorator in decorators:
method = decorator(method)
return method(self, *args, **kwargs)
@abstractmethod
def _raw_gen(self, model, messages, stream, *args, **kwargs):
def _raw_gen(self, model, messages, stream, tools, *args, **kwargs):
pass
def gen(self, model, messages, stream=False, *args, **kwargs):
return self._apply_decorator(self._raw_gen, gen_token_usage)(
self, model=model, messages=messages, stream=stream, *args, **kwargs
def gen(self, model, messages, stream=False, tools=None, *args, **kwargs):
decorators = [gen_token_usage, gen_cache]
return self._apply_decorator(
self._raw_gen,
decorators=decorators,
model=model,
messages=messages,
stream=stream,
tools=tools,
*args,
**kwargs
)
@abstractmethod
def _raw_gen_stream(self, model, messages, stream, *args, **kwargs):
pass
def gen_stream(self, model, messages, stream=True, *args, **kwargs):
return self._apply_decorator(self._raw_gen_stream, stream_token_usage)(
self, model=model, messages=messages, stream=stream, *args, **kwargs
def gen_stream(self, model, messages, stream=True, tools=None, *args, **kwargs):
decorators = [stream_cache, stream_token_usage]
return self._apply_decorator(
self._raw_gen_stream,
decorators=decorators,
model=model,
messages=messages,
stream=stream,
tools=tools,
*args,
**kwargs
)
def supports_tools(self):
return hasattr(self, "_supports_tools") and callable(
getattr(self, "_supports_tools")
)
def _supports_tools(self):
raise NotImplementedError("Subclass must implement _supports_tools method")

View File

@@ -9,35 +9,25 @@ class DocsGPTAPILLM(BaseLLM):
super().__init__(*args, **kwargs)
self.api_key = api_key
self.user_api_key = user_api_key
self.endpoint = "https://llm.docsgpt.co.uk"
self.endpoint = "https://llm.arc53.com"
def _raw_gen(self, baseself, model, messages, stream=False, *args, **kwargs):
context = messages[0]["content"]
user_question = messages[-1]["content"]
prompt = f"### Instruction \n {user_question} \n ### Context \n {context} \n ### Answer \n"
response = requests.post(
f"{self.endpoint}/answer", json={"prompt": prompt, "max_new_tokens": 30}
f"{self.endpoint}/answer", json={"messages": messages, "max_new_tokens": 30}
)
response_clean = response.json()["a"].replace("###", "")
return response_clean
def _raw_gen_stream(self, baseself, model, messages, stream=True, *args, **kwargs):
context = messages[0]["content"]
user_question = messages[-1]["content"]
prompt = f"### Instruction \n {user_question} \n ### Context \n {context} \n ### Answer \n"
# send prompt to endpoint /stream
response = requests.post(
f"{self.endpoint}/stream",
json={"prompt": prompt, "max_new_tokens": 256},
json={"messages": messages, "max_new_tokens": 256},
stream=True,
)
for line in response.iter_lines():
if line:
# data = json.loads(line)
data_str = line.decode("utf-8")
if data_str.startswith("data: "):
data = json.loads(data_str[6:])

View File

@@ -0,0 +1,159 @@
from google import genai
from google.genai import types
from application.llm.base import BaseLLM
class GoogleLLM(BaseLLM):
def __init__(self, api_key=None, user_api_key=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self.api_key = api_key
self.user_api_key = user_api_key
def _clean_messages_google(self, messages):
cleaned_messages = []
for message in messages:
role = message.get("role")
content = message.get("content")
if role == "assistant":
role = "model"
parts = []
if role and content is not None:
if isinstance(content, str):
parts = [types.Part.from_text(content)]
elif isinstance(content, list):
for item in content:
if "text" in item:
parts.append(types.Part.from_text(item["text"]))
elif "function_call" in item:
parts.append(
types.Part.from_function_call(
name=item["function_call"]["name"],
args=item["function_call"]["args"],
)
)
elif "function_response" in item:
parts.append(
types.Part.from_function_response(
name=item["function_response"]["name"],
response=item["function_response"]["response"],
)
)
else:
raise ValueError(
f"Unexpected content dictionary format:{item}"
)
else:
raise ValueError(f"Unexpected content type: {type(content)}")
cleaned_messages.append(types.Content(role=role, parts=parts))
return cleaned_messages
def _clean_tools_format(self, tools_list):
genai_tools = []
for tool_data in tools_list:
if tool_data["type"] == "function":
function = tool_data["function"]
parameters = function["parameters"]
properties = parameters.get("properties", {})
if properties:
genai_function = dict(
name=function["name"],
description=function["description"],
parameters={
"type": "OBJECT",
"properties": {
k: {
**v,
"type": v["type"].upper() if v["type"] else None,
}
for k, v in properties.items()
},
"required": (
parameters["required"]
if "required" in parameters
else []
),
},
)
else:
genai_function = dict(
name=function["name"],
description=function["description"],
)
genai_tool = types.Tool(function_declarations=[genai_function])
genai_tools.append(genai_tool)
return genai_tools
def _raw_gen(
self,
baseself,
model,
messages,
stream=False,
tools=None,
formatting="openai",
**kwargs,
):
client = genai.Client(api_key=self.api_key)
if formatting == "openai":
messages = self._clean_messages_google(messages)
config = types.GenerateContentConfig()
if messages[0].role == "system":
config.system_instruction = messages[0].parts[0].text
messages = messages[1:]
if tools:
cleaned_tools = self._clean_tools_format(tools)
config.tools = cleaned_tools
response = client.models.generate_content(
model=model,
contents=messages,
config=config,
)
return response
else:
response = client.models.generate_content(
model=model, contents=messages, config=config
)
return response.text
def _raw_gen_stream(
self,
baseself,
model,
messages,
stream=True,
tools=None,
formatting="openai",
**kwargs,
):
client = genai.Client(api_key=self.api_key)
if formatting == "openai":
messages = self._clean_messages_google(messages)
config = types.GenerateContentConfig()
if messages[0].role == "system":
config.system_instruction = messages[0].parts[0].text
messages = messages[1:]
if tools:
cleaned_tools = self._clean_tools_format(tools)
config.tools = cleaned_tools
response = client.models.generate_content_stream(
model=model,
contents=messages,
config=config,
)
for chunk in response:
if chunk.text is not None:
yield chunk.text
def _supports_tools(self):
return True

32
application/llm/groq.py Normal file
View File

@@ -0,0 +1,32 @@
from application.llm.base import BaseLLM
from openai import OpenAI
class GroqLLM(BaseLLM):
def __init__(self, api_key=None, user_api_key=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self.client = OpenAI(api_key=api_key, base_url="https://api.groq.com/openai/v1")
self.api_key = api_key
self.user_api_key = user_api_key
def _raw_gen(self, baseself, model, messages, stream=False, tools=None, **kwargs):
if tools:
response = self.client.chat.completions.create(
model=model, messages=messages, stream=stream, tools=tools, **kwargs
)
return response.choices[0]
else:
response = self.client.chat.completions.create(
model=model, messages=messages, stream=stream, **kwargs
)
return response.choices[0].message.content
def _raw_gen_stream(
self, baseself, model, messages, stream=True, tools=None, **kwargs
):
response = self.client.chat.completions.create(
model=model, messages=messages, stream=stream, **kwargs
)
for line in response:
if line.choices[0].delta.content is not None:
yield line.choices[0].delta.content

View File

@@ -1,3 +1,4 @@
from application.llm.groq import GroqLLM
from application.llm.openai import OpenAILLM, AzureOpenAILLM
from application.llm.sagemaker import SagemakerAPILLM
from application.llm.huggingface import HuggingFaceLLM
@@ -5,6 +6,7 @@ from application.llm.llama_cpp import LlamaCpp
from application.llm.anthropic import AnthropicLLM
from application.llm.docsgpt_provider import DocsGPTAPILLM
from application.llm.premai import PremAILLM
from application.llm.google_ai import GoogleLLM
class LLMCreator:
@@ -17,6 +19,8 @@ class LLMCreator:
"anthropic": AnthropicLLM,
"docsgpt": DocsGPTAPILLM,
"premai": PremAILLM,
"groq": GroqLLM,
"google": GoogleLLM
}
@classmethod

View File

@@ -1,40 +1,40 @@
from application.llm.base import BaseLLM
from application.core.settings import settings
from application.llm.base import BaseLLM
class OpenAILLM(BaseLLM):
def __init__(self, api_key=None, user_api_key=None, *args, **kwargs):
global openai
from openai import OpenAI
super().__init__(*args, **kwargs)
self.client = OpenAI(
api_key=api_key,
)
if settings.OPENAI_BASE_URL:
self.client = OpenAI(api_key=api_key, base_url=settings.OPENAI_BASE_URL)
else:
self.client = OpenAI(api_key=api_key)
self.api_key = api_key
self.user_api_key = user_api_key
def _get_openai(self):
# Import openai when needed
import openai
return openai
def _raw_gen(
self,
baseself,
model,
messages,
stream=False,
tools=None,
engine=settings.AZURE_DEPLOYMENT_NAME,
**kwargs
**kwargs,
):
response = self.client.chat.completions.create(
model=model, messages=messages, stream=stream, **kwargs
)
return response.choices[0].message.content
if tools:
response = self.client.chat.completions.create(
model=model, messages=messages, stream=stream, tools=tools, **kwargs
)
return response.choices[0]
else:
response = self.client.chat.completions.create(
model=model, messages=messages, stream=stream, **kwargs
)
return response.choices[0].message.content
def _raw_gen_stream(
self,
@@ -42,19 +42,21 @@ class OpenAILLM(BaseLLM):
model,
messages,
stream=True,
tools=None,
engine=settings.AZURE_DEPLOYMENT_NAME,
**kwargs
**kwargs,
):
response = self.client.chat.completions.create(
model=model, messages=messages, stream=stream, **kwargs
)
for line in response:
# import sys
# print(line.choices[0].delta.content, file=sys.stderr)
if line.choices[0].delta.content is not None:
yield line.choices[0].delta.content
def _supports_tools(self):
return True
class AzureOpenAILLM(OpenAILLM):
@@ -73,8 +75,3 @@ class AzureOpenAILLM(OpenAILLM):
api_base=settings.OPENAI_API_BASE,
deployment_name=settings.AZURE_DEPLOYMENT_NAME,
)
def _get_openai(self):
openai = super()._get_openai()
return openai

View File

@@ -76,7 +76,7 @@ class SagemakerAPILLM(BaseLLM):
self.endpoint = settings.SAGEMAKER_ENDPOINT
self.runtime = runtime
def _raw_gen(self, baseself, model, messages, stream=False, **kwargs):
def _raw_gen(self, baseself, model, messages, stream=False, tools=None, **kwargs):
context = messages[0]["content"]
user_question = messages[-1]["content"]
prompt = f"### Instruction \n {user_question} \n ### Context \n {context} \n ### Answer \n"
@@ -105,7 +105,7 @@ class SagemakerAPILLM(BaseLLM):
print(result[0]["generated_text"], file=sys.stderr)
return result[0]["generated_text"][len(prompt) :]
def _raw_gen_stream(self, baseself, model, messages, stream=True, **kwargs):
def _raw_gen_stream(self, baseself, model, messages, stream=True, tools=None, **kwargs):
context = messages[0]["content"]
user_question = messages[-1]["content"]
prompt = f"### Instruction \n {user_question} \n ### Context \n {context} \n ### Answer \n"

View File

@@ -0,0 +1,118 @@
import re
from typing import List, Tuple
import logging
from application.parser.schema.base import Document
from application.utils import get_encoding
logger = logging.getLogger(__name__)
class Chunker:
def __init__(
self,
chunking_strategy: str = "classic_chunk",
max_tokens: int = 2000,
min_tokens: int = 150,
duplicate_headers: bool = False,
):
if chunking_strategy not in ["classic_chunk"]:
raise ValueError(f"Unsupported chunking strategy: {chunking_strategy}")
self.chunking_strategy = chunking_strategy
self.max_tokens = max_tokens
self.min_tokens = min_tokens
self.duplicate_headers = duplicate_headers
self.encoding = get_encoding()
def separate_header_and_body(self, text: str) -> Tuple[str, str]:
header_pattern = r"^(.*?\n){3}"
match = re.match(header_pattern, text)
if match:
header = match.group(0)
body = text[len(header):]
else:
header, body = "", text # No header, treat entire text as body
return header, body
def combine_documents(self, doc: Document, next_doc: Document) -> Document:
combined_text = doc.text + " " + next_doc.text
combined_token_count = len(self.encoding.encode(combined_text))
new_doc = Document(
text=combined_text,
doc_id=doc.doc_id,
embedding=doc.embedding,
extra_info={**(doc.extra_info or {}), "token_count": combined_token_count}
)
return new_doc
def split_document(self, doc: Document) -> List[Document]:
split_docs = []
header, body = self.separate_header_and_body(doc.text)
header_tokens = self.encoding.encode(header) if header else []
body_tokens = self.encoding.encode(body)
current_position = 0
part_index = 0
while current_position < len(body_tokens):
end_position = current_position + self.max_tokens - len(header_tokens)
chunk_tokens = (header_tokens + body_tokens[current_position:end_position]
if self.duplicate_headers or part_index == 0 else body_tokens[current_position:end_position])
chunk_text = self.encoding.decode(chunk_tokens)
new_doc = Document(
text=chunk_text,
doc_id=f"{doc.doc_id}-{part_index}",
embedding=doc.embedding,
extra_info={**(doc.extra_info or {}), "token_count": len(chunk_tokens)}
)
split_docs.append(new_doc)
current_position = end_position
part_index += 1
header_tokens = []
return split_docs
def classic_chunk(self, documents: List[Document]) -> List[Document]:
processed_docs = []
i = 0
while i < len(documents):
doc = documents[i]
tokens = self.encoding.encode(doc.text)
token_count = len(tokens)
if self.min_tokens <= token_count <= self.max_tokens:
doc.extra_info = doc.extra_info or {}
doc.extra_info["token_count"] = token_count
processed_docs.append(doc)
i += 1
elif token_count < self.min_tokens:
if i + 1 < len(documents):
next_doc = documents[i + 1]
next_tokens = self.encoding.encode(next_doc.text)
if token_count + len(next_tokens) <= self.max_tokens:
# Combine small documents
combined_doc = self.combine_documents(doc, next_doc)
processed_docs.append(combined_doc)
i += 2
else:
# Keep the small document as is if adding next_doc would exceed max_tokens
doc.extra_info = doc.extra_info or {}
doc.extra_info["token_count"] = token_count
processed_docs.append(doc)
i += 1
else:
# No next document to combine with; add the small document as is
doc.extra_info = doc.extra_info or {}
doc.extra_info["token_count"] = token_count
processed_docs.append(doc)
i += 1
else:
# Split large documents
processed_docs.extend(self.split_document(doc))
i += 1
return processed_docs
def chunk(
self,
documents: List[Document]
) -> List[Document]:
if self.chunking_strategy == "classic_chunk":
return self.classic_chunk(documents)
else:
raise ValueError("Unsupported chunking strategy")

View File

@@ -0,0 +1,86 @@
import os
import logging
from retry import retry
from tqdm import tqdm
from application.core.settings import settings
from application.vectorstore.vector_creator import VectorCreator
@retry(tries=10, delay=60)
def add_text_to_store_with_retry(store, doc, source_id):
"""
Add a document's text and metadata to the vector store with retry logic.
Args:
store: The vector store object.
doc: The document to be added.
source_id: Unique identifier for the source.
"""
try:
doc.metadata["source_id"] = str(source_id)
store.add_texts([doc.page_content], metadatas=[doc.metadata])
except Exception as e:
logging.error(f"Failed to add document with retry: {e}")
raise
def embed_and_store_documents(docs, folder_name, source_id, task_status):
"""
Embeds documents and stores them in a vector store.
Args:
docs (list): List of documents to be embedded and stored.
folder_name (str): Directory to save the vector store.
source_id (str): Unique identifier for the source.
task_status: Task state manager for progress updates.
Returns:
None
"""
# Ensure the folder exists
if not os.path.exists(folder_name):
os.makedirs(folder_name)
# Initialize vector store
if settings.VECTOR_STORE == "faiss":
docs_init = [docs.pop(0)]
store = VectorCreator.create_vectorstore(
settings.VECTOR_STORE,
docs_init=docs_init,
source_id=folder_name,
embeddings_key=os.getenv("EMBEDDINGS_KEY"),
)
else:
store = VectorCreator.create_vectorstore(
settings.VECTOR_STORE,
source_id=source_id,
embeddings_key=os.getenv("EMBEDDINGS_KEY"),
)
store.delete_index()
total_docs = len(docs)
# Process and embed documents
for idx, doc in tqdm(
enumerate(docs),
desc="Embedding 🦖",
unit="docs",
total=total_docs,
bar_format="{l_bar}{bar}| Time Left: {remaining}",
):
try:
# Update task status for progress tracking
progress = int(((idx + 1) / total_docs) * 100)
task_status.update_state(state="PROGRESS", meta={"current": progress})
# Add document to vector store
add_text_to_store_with_retry(store, doc, source_id)
except Exception as e:
logging.error(f"Error embedding document {idx}: {e}")
logging.info(f"Saving progress at document {idx} out of {total_docs}")
store.save_local(folder_name)
break
# Save the vector store
if settings.VECTOR_STORE == "faiss":
store.save_local(folder_name)
logging.info("Vector store saved successfully.")

View File

@@ -10,18 +10,27 @@ from application.parser.file.epub_parser import EpubParser
from application.parser.file.html_parser import HTMLParser
from application.parser.file.markdown_parser import MarkdownParser
from application.parser.file.rst_parser import RstParser
from application.parser.file.tabular_parser import PandasCSVParser
from application.parser.file.tabular_parser import PandasCSVParser,ExcelParser
from application.parser.file.json_parser import JSONParser
from application.parser.file.pptx_parser import PPTXParser
from application.parser.file.image_parser import ImageParser
from application.parser.schema.base import Document
DEFAULT_FILE_EXTRACTOR: Dict[str, BaseParser] = {
".pdf": PDFParser(),
".docx": DocxParser(),
".csv": PandasCSVParser(),
".xlsx":ExcelParser(),
".epub": EpubParser(),
".md": MarkdownParser(),
".rst": RstParser(),
".html": HTMLParser(),
".mdx": MarkdownParser(),
".json":JSONParser(),
".pptx":PPTXParser(),
".png": ImageParser(),
".jpg": ImageParser(),
".jpeg": ImageParser(),
}

View File

@@ -7,7 +7,8 @@ from pathlib import Path
from typing import Dict
from application.parser.file.base_parser import BaseParser
from application.core.settings import settings
import requests
class PDFParser(BaseParser):
"""PDF parser."""
@@ -18,6 +19,15 @@ class PDFParser(BaseParser):
def parse_file(self, file: Path, errors: str = "ignore") -> str:
"""Parse file."""
if settings.PARSE_PDF_AS_IMAGE:
doc2md_service = "https://llm.arc53.com/doc2md"
# alternatively you can use local vision capable LLM
with open(file, "rb") as file_loaded:
files = {'file': file_loaded}
response = requests.post(doc2md_service, files=files)
data = response.json()["markdown"]
return data
try:
import PyPDF2
except ImportError:

View File

@@ -3,7 +3,6 @@
Contains parser for html files.
"""
import re
from pathlib import Path
from typing import Dict, Union
@@ -18,66 +17,8 @@ class HTMLParser(BaseParser):
return {}
def parse_file(self, file: Path, errors: str = "ignore") -> Union[str, list[str]]:
"""Parse file.
from langchain_community.document_loaders import BSHTMLLoader
Returns:
Union[str, List[str]]: a string or a List of strings.
"""
try:
from unstructured.partition.html import partition_html
from unstructured.staging.base import convert_to_isd
from unstructured.cleaners.core import clean
except ImportError:
raise ValueError("unstructured package is required to parse HTML files.")
# Using the unstructured library to convert the html to isd format
# isd sample : isd = [
# {"text": "My Title", "type": "Title"},
# {"text": "My Narrative", "type": "NarrativeText"}
# ]
with open(file, "r", encoding="utf-8") as fp:
elements = partition_html(file=fp)
isd = convert_to_isd(elements)
# Removing non ascii charactwers from isd_el['text']
for isd_el in isd:
isd_el['text'] = isd_el['text'].encode("ascii", "ignore").decode()
# Removing all the \n characters from isd_el['text'] using regex and replace with single space
# Removing all the extra spaces from isd_el['text'] using regex and replace with single space
for isd_el in isd:
isd_el['text'] = re.sub(r'\n', ' ', isd_el['text'], flags=re.MULTILINE | re.DOTALL)
isd_el['text'] = re.sub(r"\s{2,}", " ", isd_el['text'], flags=re.MULTILINE | re.DOTALL)
# more cleaning: extra_whitespaces, dashes, bullets, trailing_punctuation
for isd_el in isd:
clean(isd_el['text'], extra_whitespace=True, dashes=True, bullets=True, trailing_punctuation=True)
# Creating a list of all the indexes of isd_el['type'] = 'Title'
title_indexes = [i for i, isd_el in enumerate(isd) if isd_el['type'] == 'Title']
# Creating 'Chunks' - List of lists of strings
# each list starting with isd_el['type'] = 'Title' and all the data till the next 'Title'
# Each Chunk can be thought of as an individual set of data, which can be sent to the model
# Where Each Title is grouped together with the data under it
Chunks = [[]]
final_chunks = list(list())
for i, isd_el in enumerate(isd):
if i in title_indexes:
Chunks.append([])
Chunks[-1].append(isd_el['text'])
# Removing all the chunks with sum of length of all the strings in the chunk < 25
# TODO: This value can be an user defined variable
for chunk in Chunks:
# sum of length of all the strings in the chunk
sum = 0
sum += len(str(chunk))
if sum < 25:
Chunks.remove(chunk)
else:
# appending all the approved chunks to final_chunks as a single string
final_chunks.append(" ".join([str(item) for item in chunk]))
return final_chunks
loader = BSHTMLLoader(file)
data = loader.load()
return data

View File

@@ -0,0 +1,27 @@
"""Image parser.
Contains parser for .png, .jpg, .jpeg files.
"""
from pathlib import Path
import requests
from typing import Dict, Union
from application.parser.file.base_parser import BaseParser
class ImageParser(BaseParser):
"""Image parser."""
def _init_parser(self) -> Dict:
"""Init parser."""
return {}
def parse_file(self, file: Path, errors: str = "ignore") -> Union[str, list[str]]:
doc2md_service = "https://llm.arc53.com/doc2md"
# alternatively you can use local vision capable LLM
with open(file, "rb") as file_loaded:
files = {'file': file_loaded}
response = requests.post(doc2md_service, files=files)
data = response.json()["markdown"]
return data

View File

@@ -0,0 +1,57 @@
import json
from typing import Any, Dict, List, Union
from pathlib import Path
from application.parser.file.base_parser import BaseParser
class JSONParser(BaseParser):
r"""JSON (.json) parser.
Parses JSON files into a list of strings or a concatenated document.
It handles both JSON objects (dictionaries) and arrays (lists).
Args:
concat_rows (bool): Whether to concatenate all rows into one document.
If set to False, a Document will be created for each item in the JSON.
True by default.
row_joiner (str): Separator to use for joining each row.
Only used when `concat_rows=True`.
Set to "\n" by default.
json_config (dict): Options for parsing JSON. Can be used to specify options like
custom decoding or formatting. Set to empty dict by default.
"""
def __init__(
self,
*args: Any,
concat_rows: bool = True,
row_joiner: str = "\n",
json_config: dict = {},
**kwargs: Any
) -> None:
"""Init params."""
super().__init__(*args, **kwargs)
self._concat_rows = concat_rows
self._row_joiner = row_joiner
self._json_config = json_config
def _init_parser(self) -> Dict:
"""Init parser."""
return {}
def parse_file(self, file: Path, errors: str = "ignore") -> Union[str, List[str]]:
"""Parse JSON file."""
with open(file, 'r', encoding='utf-8') as f:
data = json.load(f, **self._json_config)
if isinstance(data, dict):
data = [data]
if self._concat_rows:
return self._row_joiner.join([str(item) for item in data])
else:
return data

View File

@@ -0,0 +1,75 @@
"""PPT parser.
Contains parsers for presentation (.pptx) files to extract slide text.
"""
from pathlib import Path
from typing import Any, Dict, List, Union
from application.parser.file.base_parser import BaseParser
class PPTXParser(BaseParser):
r"""PPTX (.pptx) parser for extracting text from PowerPoint slides.
Args:
concat_slides (bool): Specifies whether to concatenate all slide text into one document.
- If True, slide texts will be joined together as a single string.
- If False, each slide's text will be stored as a separate entry in a list.
Set to True by default.
slide_separator (str): Separator used to join slides' text content.
Only used when `concat_slides=True`. Default is "\n".
Refer to https://python-pptx.readthedocs.io/en/latest/ for more information.
"""
def __init__(
self,
*args: Any,
concat_slides: bool = True,
slide_separator: str = "\n",
**kwargs: Any
) -> None:
"""Init params."""
super().__init__(*args, **kwargs)
self._concat_slides = concat_slides
self._slide_separator = slide_separator
def _init_parser(self) -> Dict:
"""Init parser."""
return {}
def parse_file(self, file: Path, errors: str = "ignore") -> Union[str, List[str]]:
r"""
Parse a .pptx file and extract text from each slide.
Args:
file (Path): Path to the .pptx file.
errors (str): Error handling policy ('ignore' by default).
Returns:
Union[str, List[str]]: Concatenated text if concat_slides is True,
otherwise a list of slide texts.
"""
try:
from pptx import Presentation
except ImportError:
raise ImportError("pptx module is required to read .PPTX files.")
try:
presentation = Presentation(file)
slide_texts=[]
# Iterate over each slide in the presentation
for slide in presentation.slides:
slide_text=""
# Iterate over each shape in the slide
for shape in slide.shapes:
# Check if the shape has a 'text' attribute and append that to the slide_text
if hasattr(shape,"text"):
slide_text+=shape.text
slide_texts.append(slide_text.strip())
if self._concat_slides:
return self._slide_separator.join(slide_texts)
else:
return slide_texts
except Exception as e:
raise e

View File

@@ -91,6 +91,25 @@ class RstParser(BaseParser):
]
return rst_tups
def chunk_by_token_count(self, text: str, max_tokens: int = 100) -> List[str]:
"""Chunk text by token count."""
avg_token_length = 5
chunk_size = max_tokens * avg_token_length
chunks = []
for i in range(0, len(text), chunk_size):
chunk = text[i:i+chunk_size]
if i + chunk_size < len(text):
last_space = chunk.rfind(' ')
if last_space != -1:
chunk = chunk[:last_space]
chunks.append(chunk.strip())
return chunks
def remove_images(self, content: str) -> str:
pattern = r"\.\. image:: (.*)"
content = re.sub(pattern, "", content)
@@ -136,7 +155,7 @@ class RstParser(BaseParser):
return {}
def parse_tups(
self, filepath: Path, errors: str = "ignore"
self, filepath: Path, errors: str = "ignore",max_tokens: Optional[int] = 1000
) -> List[Tuple[Optional[str], str]]:
"""Parse file into tuples."""
with open(filepath, "r") as f:
@@ -156,6 +175,15 @@ class RstParser(BaseParser):
rst_tups = self.remove_whitespaces_excess(rst_tups)
if self._remove_characters_excess:
rst_tups = self.remove_characters_excess(rst_tups)
# Apply chunking if max_tokens is provided
if max_tokens is not None:
chunked_tups = []
for header, text in rst_tups:
chunks = self.chunk_by_token_count(text, max_tokens)
for idx, chunk in enumerate(chunks):
chunked_tups.append((f"{header} - Chunk {idx + 1}", chunk))
return chunked_tups
return rst_tups
def parse_file(

View File

@@ -113,3 +113,68 @@ class PandasCSVParser(BaseParser):
return (self._row_joiner).join(text_list)
else:
return text_list
class ExcelParser(BaseParser):
r"""Excel (.xlsx) parser.
Parses Excel files using Pandas `read_excel` function.
If special parameters are required, use the `pandas_config` dict.
Args:
concat_rows (bool): whether to concatenate all rows into one document.
If set to False, a Document will be created for each row.
True by default.
col_joiner (str): Separator to use for joining cols per row.
Set to ", " by default.
row_joiner (str): Separator to use for joining each row.
Only used when `concat_rows=True`.
Set to "\n" by default.
pandas_config (dict): Options for the `pandas.read_excel` function call.
Refer to https://pandas.pydata.org/docs/reference/api/pandas.read_excel.html
for more information.
Set to empty dict by default, this means pandas will try to figure
out the table structure on its own.
"""
def __init__(
self,
*args: Any,
concat_rows: bool = True,
col_joiner: str = ", ",
row_joiner: str = "\n",
pandas_config: dict = {},
**kwargs: Any
) -> None:
"""Init params."""
super().__init__(*args, **kwargs)
self._concat_rows = concat_rows
self._col_joiner = col_joiner
self._row_joiner = row_joiner
self._pandas_config = pandas_config
def _init_parser(self) -> Dict:
"""Init parser."""
return {}
def parse_file(self, file: Path, errors: str = "ignore") -> Union[str, List[str]]:
"""Parse file."""
try:
import pandas as pd
except ImportError:
raise ValueError("pandas module is required to read Excel files.")
df = pd.read_excel(file, **self._pandas_config)
text_list = df.apply(
lambda row: (self._col_joiner).join(row.astype(str).tolist()), axis=1
).tolist()
if self._concat_rows:
return (self._row_joiner).join(text_list)
else:
return text_list

View File

@@ -1,66 +0,0 @@
import os
import javalang
def find_files(directory):
files_list = []
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith('.java'):
files_list.append(os.path.join(root, file))
return files_list
def extract_functions(file_path):
with open(file_path, "r") as file:
java_code = file.read()
methods = {}
tree = javalang.parse.parse(java_code)
for _, node in tree.filter(javalang.tree.MethodDeclaration):
method_name = node.name
start_line = node.position.line - 1
end_line = start_line
brace_count = 0
for line in java_code.splitlines()[start_line:]:
end_line += 1
brace_count += line.count("{") - line.count("}")
if brace_count == 0:
break
method_source_code = "\n".join(java_code.splitlines()[start_line:end_line])
methods[method_name] = method_source_code
return methods
def extract_classes(file_path):
with open(file_path, 'r') as file:
source_code = file.read()
classes = {}
tree = javalang.parse.parse(source_code)
for class_decl in tree.types:
class_name = class_decl.name
declarations = []
methods = []
for field_decl in class_decl.fields:
field_name = field_decl.declarators[0].name
field_type = field_decl.type.name
declarations.append(f"{field_type} {field_name}")
for method_decl in class_decl.methods:
methods.append(method_decl.name)
class_string = "Declarations: " + ", ".join(declarations) + "\n Method name: " + ", ".join(methods)
classes[class_name] = class_string
return classes
def extract_functions_and_classes(directory):
files = find_files(directory)
functions_dict = {}
classes_dict = {}
for file in files:
functions = extract_functions(file)
if functions:
functions_dict[file] = functions
classes = extract_classes(file)
if classes:
classes_dict[file] = classes
return functions_dict, classes_dict

View File

@@ -1,70 +0,0 @@
import os
import escodegen
import esprima
def find_files(directory):
files_list = []
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith('.js'):
files_list.append(os.path.join(root, file))
return files_list
def extract_functions(file_path):
with open(file_path, 'r') as file:
source_code = file.read()
functions = {}
tree = esprima.parseScript(source_code)
for node in tree.body:
if node.type == 'FunctionDeclaration':
func_name = node.id.name if node.id else '<anonymous>'
functions[func_name] = escodegen.generate(node)
elif node.type == 'VariableDeclaration':
for declaration in node.declarations:
if declaration.init and declaration.init.type == 'FunctionExpression':
func_name = declaration.id.name if declaration.id else '<anonymous>'
functions[func_name] = escodegen.generate(declaration.init)
elif node.type == 'ClassDeclaration':
for subnode in node.body.body:
if subnode.type == 'MethodDefinition':
func_name = subnode.key.name
functions[func_name] = escodegen.generate(subnode.value)
elif subnode.type == 'VariableDeclaration':
for declaration in subnode.declarations:
if declaration.init and declaration.init.type == 'FunctionExpression':
func_name = declaration.id.name if declaration.id else '<anonymous>'
functions[func_name] = escodegen.generate(declaration.init)
return functions
def extract_classes(file_path):
with open(file_path, 'r') as file:
source_code = file.read()
classes = {}
tree = esprima.parseScript(source_code)
for node in tree.body:
if node.type == 'ClassDeclaration':
class_name = node.id.name
function_names = []
for subnode in node.body.body:
if subnode.type == 'MethodDefinition':
function_names.append(subnode.key.name)
classes[class_name] = ", ".join(function_names)
return classes
def extract_functions_and_classes(directory):
files = find_files(directory)
functions_dict = {}
classes_dict = {}
for file in files:
functions = extract_functions(file)
if functions:
functions_dict[file] = functions
classes = extract_classes(file)
if classes:
classes_dict[file] = classes
return functions_dict, classes_dict

View File

@@ -1,72 +0,0 @@
import os
from application.vectorstore.vector_creator import VectorCreator
from application.core.settings import settings
from retry import retry
# from langchain_community.embeddings import HuggingFaceEmbeddings
# from langchain_community.embeddings import HuggingFaceInstructEmbeddings
# from langchain_community.embeddings import CohereEmbeddings
@retry(tries=10, delay=60)
def store_add_texts_with_retry(store, i):
store.add_texts([i.page_content], metadatas=[i.metadata])
# store_pine.add_texts([i.page_content], metadatas=[i.metadata])
def call_openai_api(docs, folder_name, task_status):
# Function to create a vector store from the documents and save it to disk
if not os.path.exists(f"{folder_name}"):
os.makedirs(f"{folder_name}")
from tqdm import tqdm
c1 = 0
if settings.VECTOR_STORE == "faiss":
docs_init = [docs[0]]
docs.pop(0)
store = VectorCreator.create_vectorstore(
settings.VECTOR_STORE,
docs_init=docs_init,
path=f"{folder_name}",
embeddings_key=os.getenv("EMBEDDINGS_KEY"),
)
else:
store = VectorCreator.create_vectorstore(
settings.VECTOR_STORE,
path=f"{folder_name}",
embeddings_key=os.getenv("EMBEDDINGS_KEY"),
)
# Uncomment for MPNet embeddings
# model_name = "sentence-transformers/all-mpnet-base-v2"
# hf = HuggingFaceEmbeddings(model_name=model_name)
# store = FAISS.from_documents(docs_test, hf)
s1 = len(docs)
for i in tqdm(
docs,
desc="Embedding 🦖",
unit="docs",
total=len(docs),
bar_format="{l_bar}{bar}| Time Left: {remaining}",
):
try:
task_status.update_state(
state="PROGRESS", meta={"current": int((c1 / s1) * 100)}
)
store_add_texts_with_retry(store, i)
except Exception as e:
print(e)
print("Error on ", i)
print("Saving progress")
print(f"stopped at {c1} out of {len(docs)}")
store.save_local(f"{folder_name}")
break
c1 += 1
if settings.VECTOR_STORE == "faiss":
store.save_local(f"{folder_name}")

View File

@@ -1,121 +0,0 @@
import ast
import os
from pathlib import Path
import tiktoken
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
def find_files(directory):
files_list = []
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith('.py'):
files_list.append(os.path.join(root, file))
return files_list
def extract_functions(file_path):
with open(file_path, 'r') as file:
source_code = file.read()
functions = {}
tree = ast.parse(source_code)
for node in ast.walk(tree):
if isinstance(node, ast.FunctionDef):
func_name = node.name
func_def = ast.get_source_segment(source_code, node)
functions[func_name] = func_def
return functions
def extract_classes(file_path):
with open(file_path, 'r') as file:
source_code = file.read()
classes = {}
tree = ast.parse(source_code)
for node in ast.walk(tree):
if isinstance(node, ast.ClassDef):
class_name = node.name
function_names = []
for subnode in ast.walk(node):
if isinstance(subnode, ast.FunctionDef):
function_names.append(subnode.name)
classes[class_name] = ", ".join(function_names)
return classes
def extract_functions_and_classes(directory):
files = find_files(directory)
functions_dict = {}
classes_dict = {}
for file in files:
functions = extract_functions(file)
if functions:
functions_dict[file] = functions
classes = extract_classes(file)
if classes:
classes_dict[file] = classes
return functions_dict, classes_dict
def parse_functions(functions_dict, formats, dir):
c1 = len(functions_dict)
for i, (source, functions) in enumerate(functions_dict.items(), start=1):
print(f"Processing file {i}/{c1}")
source_w = source.replace(dir + "/", "").replace("." + formats, ".md")
subfolders = "/".join(source_w.split("/")[:-1])
Path(f"outputs/{subfolders}").mkdir(parents=True, exist_ok=True)
for j, (name, function) in enumerate(functions.items(), start=1):
print(f"Processing function {j}/{len(functions)}")
prompt = PromptTemplate(
input_variables=["code"],
template="Code: \n{code}, \nDocumentation: ",
)
llm = OpenAI(temperature=0)
response = llm(prompt.format(code=function))
mode = "a" if Path(f"outputs/{source_w}").exists() else "w"
with open(f"outputs/{source_w}", mode) as f:
f.write(
f"\n\n# Function name: {name} \n\nFunction: \n```\n{function}\n```, \nDocumentation: \n{response}")
def parse_classes(classes_dict, formats, dir):
c1 = len(classes_dict)
for i, (source, classes) in enumerate(classes_dict.items()):
print(f"Processing file {i + 1}/{c1}")
source_w = source.replace(dir + "/", "").replace("." + formats, ".md")
subfolders = "/".join(source_w.split("/")[:-1])
Path(f"outputs/{subfolders}").mkdir(parents=True, exist_ok=True)
for name, function_names in classes.items():
print(f"Processing Class {i + 1}/{c1}")
prompt = PromptTemplate(
input_variables=["class_name", "functions_names"],
template="Class name: {class_name} \nFunctions: {functions_names}, \nDocumentation: ",
)
llm = OpenAI(temperature=0)
response = llm(prompt.format(class_name=name, functions_names=function_names))
with open(f"outputs/{source_w}", "a" if Path(f"outputs/{source_w}").exists() else "w") as f:
f.write(f"\n\n# Class name: {name} \n\nFunctions: \n{function_names}, \nDocumentation: \n{response}")
def transform_to_docs(functions_dict, classes_dict, formats, dir):
docs_content = ''.join([str(key) + str(value) for key, value in functions_dict.items()])
docs_content += ''.join([str(key) + str(value) for key, value in classes_dict.items()])
num_tokens = len(tiktoken.get_encoding("cl100k_base").encode(docs_content))
total_price = ((num_tokens / 1000) * 0.02)
print(f"Number of Tokens = {num_tokens:,d}")
print(f"Approx Cost = ${total_price:,.2f}")
user_input = input("Price Okay? (Y/N)\n").lower()
if user_input == "y" or user_input == "":
if not Path("outputs").exists():
Path("outputs").mkdir()
parse_functions(functions_dict, formats, dir)
parse_classes(classes_dict, formats, dir)
print("All done!")
else:
print("The API was not called. No money was spent.")

View File

@@ -2,16 +2,16 @@ import requests
from urllib.parse import urlparse, urljoin
from bs4 import BeautifulSoup
from application.parser.remote.base import BaseRemote
from application.parser.schema.base import Document
from langchain_community.document_loaders import WebBaseLoader
class CrawlerLoader(BaseRemote):
def __init__(self, limit=10):
from langchain.document_loaders import WebBaseLoader
self.loader = WebBaseLoader # Initialize the document loader
self.limit = limit # Set the limit for the number of pages to scrape
def load_data(self, inputs):
url = inputs
# Check if the input is a list and if it is, use the first element
if isinstance(url, list) and url:
url = url[0]
@@ -19,24 +19,29 @@ class CrawlerLoader(BaseRemote):
if not urlparse(url).scheme:
url = "http://" + url
visited_urls = set() # Keep track of URLs that have been visited
base_url = urlparse(url).scheme + "://" + urlparse(url).hostname # Extract the base URL
urls_to_visit = [url] # List of URLs to be visited, starting with the initial URL
loaded_content = [] # Store the loaded content from each URL
visited_urls = set()
base_url = urlparse(url).scheme + "://" + urlparse(url).hostname
urls_to_visit = [url]
loaded_content = []
# Continue crawling until there are no more URLs to visit
while urls_to_visit:
current_url = urls_to_visit.pop(0) # Get the next URL to visit
visited_urls.add(current_url) # Mark the URL as visited
current_url = urls_to_visit.pop(0)
visited_urls.add(current_url)
# Try to load and process the content from the current URL
try:
response = requests.get(current_url) # Fetch the content of the current URL
response.raise_for_status() # Raise an exception for HTTP errors
loader = self.loader([current_url]) # Initialize the document loader for the current URL
loaded_content.extend(loader.load()) # Load the content and add it to the loaded_content list
response = requests.get(current_url)
response.raise_for_status()
loader = self.loader([current_url])
docs = loader.load()
# Convert the loaded documents to your Document schema
for doc in docs:
loaded_content.append(
Document(
doc.page_content,
extra_info=doc.metadata
)
)
except Exception as e:
# Print an error message if loading or processing fails and continue with the next URL
print(f"Error processing URL {current_url}: {e}")
continue
@@ -45,15 +50,15 @@ class CrawlerLoader(BaseRemote):
all_links = [
urljoin(current_url, a['href'])
for a in soup.find_all('a', href=True)
if base_url in urljoin(current_url, a['href']) # Ensure links are from the same domain
if base_url in urljoin(current_url, a['href'])
]
# Add new links to the list of URLs to visit if they haven't been visited yet
urls_to_visit.extend([link for link in all_links if link not in visited_urls])
urls_to_visit = list(set(urls_to_visit)) # Remove duplicate URLs
urls_to_visit = list(set(urls_to_visit))
# Stop crawling if the limit of pages to scrape is reached
if self.limit is not None and len(visited_urls) >= self.limit:
break
return loaded_content # Return the loaded content from all visited URLs
return loaded_content

View File

@@ -0,0 +1,139 @@
import requests
from urllib.parse import urlparse, urljoin
from bs4 import BeautifulSoup
from application.parser.remote.base import BaseRemote
import re
from markdownify import markdownify
from application.parser.schema.base import Document
import tldextract
class CrawlerLoader(BaseRemote):
def __init__(self, limit=10, allow_subdomains=False):
"""
Given a URL crawl web pages up to `self.limit`,
convert HTML content to Markdown, and returning a list of Document objects.
:param limit: The maximum number of pages to crawl.
:param allow_subdomains: If True, crawl pages on subdomains of the base domain.
"""
self.limit = limit
self.allow_subdomains = allow_subdomains
self.session = requests.Session()
def load_data(self, inputs):
url = inputs
if isinstance(url, list) and url:
url = url[0]
# Ensure the URL has a scheme (if not, default to http)
if not urlparse(url).scheme:
url = "http://" + url
# Keep track of visited URLs to avoid revisiting the same page
visited_urls = set()
# Determine the base domain for link filtering using tldextract
base_domain = self._get_base_domain(url)
urls_to_visit = {url}
documents = []
while urls_to_visit:
current_url = urls_to_visit.pop()
# Skip if already visited
if current_url in visited_urls:
continue
visited_urls.add(current_url)
# Fetch the page content
html_content = self._fetch_page(current_url)
if html_content is None:
continue
# Convert the HTML to Markdown for cleaner text formatting
title, language, processed_markdown = self._process_html_to_markdown(html_content, current_url)
if processed_markdown:
# Create a Document for each visited page
documents.append(
Document(
processed_markdown, # content
None, # doc_id
None, # embedding
{"source": current_url, "title": title, "language": language} # extra_info
)
)
# Extract links and filter them according to domain rules
new_links = self._extract_links(html_content, current_url)
filtered_links = self._filter_links(new_links, base_domain)
# Add any new, not-yet-visited links to the queue
urls_to_visit.update(link for link in filtered_links if link not in visited_urls)
# If we've reached the limit, stop crawling
if self.limit is not None and len(visited_urls) >= self.limit:
break
return documents
def _fetch_page(self, url):
try:
response = self.session.get(url, timeout=10)
response.raise_for_status()
return response.text
except requests.exceptions.RequestException as e:
print(f"Error fetching URL {url}: {e}")
return None
def _process_html_to_markdown(self, html_content, current_url):
soup = BeautifulSoup(html_content, 'html.parser')
title_tag = soup.find('title')
title = title_tag.text.strip() if title_tag else "No Title"
# Extract language
language_tag = soup.find('html')
language = language_tag.get('lang', 'en') if language_tag else "en"
markdownified = markdownify(html_content, heading_style="ATX", newline_style="BACKSLASH")
# Reduce sequences of more than two newlines to exactly three
markdownified = re.sub(r'\n{3,}', '\n\n\n', markdownified)
return title, language, markdownified
def _extract_links(self, html_content, current_url):
soup = BeautifulSoup(html_content, 'html.parser')
links = []
for a in soup.find_all('a', href=True):
full_url = urljoin(current_url, a['href'])
links.append((full_url, a.text.strip()))
return links
def _get_base_domain(self, url):
extracted = tldextract.extract(url)
# Reconstruct the domain as domain.suffix
base_domain = f"{extracted.domain}.{extracted.suffix}"
return base_domain
def _filter_links(self, links, base_domain):
"""
Filter the extracted links to only include those that match the crawling criteria:
- If allow_subdomains is True, allow any link whose domain ends with the base_domain.
- If allow_subdomains is False, only allow exact matches of the base_domain.
"""
filtered = []
for link, _ in links:
parsed_link = urlparse(link)
if not parsed_link.netloc:
continue
extracted = tldextract.extract(parsed_link.netloc)
link_base = f"{extracted.domain}.{extracted.suffix}"
if self.allow_subdomains:
# For subdomains: sub.example.com ends with example.com
if link_base == base_domain or link_base.endswith("." + base_domain):
filtered.append(link)
else:
# Exact domain match
if link_base == base_domain:
filtered.append(link)
return filtered

View File

@@ -0,0 +1,58 @@
import base64
import requests
from typing import List
from application.parser.remote.base import BaseRemote
from langchain_core.documents import Document
import mimetypes
class GitHubLoader(BaseRemote):
def __init__(self):
self.access_token = None
self.headers = {
"Authorization": f"token {self.access_token}"
} if self.access_token else {}
return
def fetch_file_content(self, repo_url: str, file_path: str) -> str:
url = f"https://api.github.com/repos/{repo_url}/contents/{file_path}"
response = requests.get(url, headers=self.headers)
if response.status_code == 200:
content = response.json()
mime_type, _ = mimetypes.guess_type(file_path) # Guess the MIME type based on the file extension
if content.get("encoding") == "base64":
if mime_type and mime_type.startswith("text"): # Handle only text files
try:
decoded_content = base64.b64decode(content["content"]).decode("utf-8")
return f"Filename: {file_path}\n\n{decoded_content}"
except Exception as e:
raise e
else:
return f"Filename: {file_path} is a binary file and was skipped."
else:
return f"Filename: {file_path}\n\n{content['content']}"
else:
response.raise_for_status()
def fetch_repo_files(self, repo_url: str, path: str = "") -> List[str]:
url = f"https://api.github.com/repos/{repo_url}/contents/{path}"
response = requests.get(url, headers={**self.headers, "Accept": "application/vnd.github.v3.raw"})
contents = response.json()
files = []
for item in contents:
if item["type"] == "file":
files.append(item["path"])
elif item["type"] == "dir":
files.extend(self.fetch_repo_files(repo_url, item["path"]))
return files
def load_data(self, repo_url: str) -> List[Document]:
repo_name = repo_url.split("github.com/")[-1]
files = self.fetch_repo_files(repo_name)
documents = []
for file_path in files:
content = self.fetch_file_content(repo_name, file_path)
documents.append(Document(page_content=content, metadata={"title": file_path,
"source": f"https://github.com/{repo_name}/blob/main/{file_path}"}))
return documents

View File

@@ -1,10 +1,19 @@
from application.parser.remote.base import BaseRemote
from langchain_community.document_loaders import RedditPostsLoader
import json
class RedditPostsLoaderRemote(BaseRemote):
def load_data(self, inputs):
data = eval(inputs)
try:
data = json.loads(inputs)
except json.JSONDecodeError as e:
raise ValueError(f"Invalid JSON input: {e}")
required_fields = ["client_id", "client_secret", "user_agent", "search_queries"]
missing_fields = [field for field in required_fields if field not in data]
if missing_fields:
raise ValueError(f"Missing required fields: {', '.join(missing_fields)}")
client_id = data.get("client_id")
client_secret = data.get("client_secret")
user_agent = data.get("user_agent")

View File

@@ -2,6 +2,7 @@ from application.parser.remote.sitemap_loader import SitemapLoader
from application.parser.remote.crawler_loader import CrawlerLoader
from application.parser.remote.web_loader import WebLoader
from application.parser.remote.reddit_loader import RedditPostsLoaderRemote
from application.parser.remote.github_loader import GitHubLoader
class RemoteCreator:
@@ -10,6 +11,7 @@ class RemoteCreator:
"sitemap": SitemapLoader,
"crawler": CrawlerLoader,
"reddit": RedditPostsLoaderRemote,
"github": GitHubLoader,
}
@classmethod

View File

@@ -5,7 +5,7 @@ from application.parser.remote.base import BaseRemote
class SitemapLoader(BaseRemote):
def __init__(self, limit=20):
from langchain.document_loaders import WebBaseLoader
from langchain_community.document_loaders import WebBaseLoader
self.loader = WebBaseLoader
self.limit = limit # Adding limit to control the number of URLs to process

View File

@@ -1,5 +1,7 @@
from application.parser.remote.base import BaseRemote
from application.parser.schema.base import Document
from langchain_community.document_loaders import WebBaseLoader
from urllib.parse import urlparse
headers = {
"User-Agent": "Mozilla/5.0",
@@ -23,10 +25,20 @@ class WebLoader(BaseRemote):
urls = [urls]
documents = []
for url in urls:
# Check if the URL scheme is provided, if not, assume http
if not urlparse(url).scheme:
url = "http://" + url
try:
loader = self.loader([url], header_template=headers)
documents.extend(loader.load())
loaded_docs = loader.load()
for doc in loaded_docs:
documents.append(
Document(
doc.page_content,
extra_info=doc.metadata,
)
)
except Exception as e:
print(f"Error processing URL {url}: {e}")
continue
return documents
return documents

View File

@@ -1,79 +0,0 @@
import re
from math import ceil
from typing import List
import tiktoken
from application.parser.schema.base import Document
def separate_header_and_body(text):
header_pattern = r"^(.*?\n){3}"
match = re.match(header_pattern, text)
header = match.group(0)
body = text[len(header):]
return header, body
def group_documents(documents: List[Document], min_tokens: int, max_tokens: int) -> List[Document]:
docs = []
current_group = None
for doc in documents:
doc_len = len(tiktoken.get_encoding("cl100k_base").encode(doc.text))
# Check if current group is empty or if the document can be added based on token count and matching metadata
if (current_group is None or
(len(tiktoken.get_encoding("cl100k_base").encode(current_group.text)) + doc_len < max_tokens and
doc_len < min_tokens and
current_group.extra_info == doc.extra_info)):
if current_group is None:
current_group = doc # Use the document directly to retain its metadata
else:
current_group.text += " " + doc.text # Append text to the current group
else:
docs.append(current_group)
current_group = doc # Start a new group with the current document
if current_group is not None:
docs.append(current_group)
return docs
def split_documents(documents: List[Document], max_tokens: int) -> List[Document]:
docs = []
for doc in documents:
token_length = len(tiktoken.get_encoding("cl100k_base").encode(doc.text))
if token_length <= max_tokens:
docs.append(doc)
else:
header, body = separate_header_and_body(doc.text)
if len(tiktoken.get_encoding("cl100k_base").encode(header)) > max_tokens:
body = doc.text
header = ""
num_body_parts = ceil(token_length / max_tokens)
part_length = ceil(len(body) / num_body_parts)
body_parts = [body[i:i + part_length] for i in range(0, len(body), part_length)]
for i, body_part in enumerate(body_parts):
new_doc = Document(text=header + body_part.strip(),
doc_id=f"{doc.doc_id}-{i}",
embedding=doc.embedding,
extra_info=doc.extra_info)
docs.append(new_doc)
return docs
def group_split(documents: List[Document], max_tokens: int = 2000, min_tokens: int = 150, token_check: bool = True):
if not token_check:
return documents
print("Grouping small documents")
try:
documents = group_documents(documents=documents, min_tokens=min_tokens, max_tokens=max_tokens)
except Exception:
print("Grouping failed, try running without token_check")
print("Separating large documents")
try:
documents = split_documents(documents=documents, max_tokens=max_tokens)
except Exception:
print("Grouping failed, try running without token_check")
return documents

View File

@@ -1,34 +1,95 @@
anthropic==0.12.0
boto3==1.34.6
celery==5.3.6
dataclasses_json==0.6.3
anthropic==0.40.0
boto3==1.35.97
beautifulsoup4==4.12.3
celery==5.4.0
dataclasses-json==0.6.7
docx2txt==0.8
duckduckgo-search==5.3.0
EbookLib==0.18
elasticsearch==8.12.0
duckduckgo-search==6.3.0
ebooklib==0.18
elastic-transport==8.17.0
elasticsearch==8.17.0
escodegen==1.0.11
esprima==4.0.1
faiss-cpu==1.7.4
Flask==3.0.1
gunicorn==22.0.0
html2text==2020.1.16
esutils==1.0.1
Flask==3.1.0
faiss-cpu==1.9.0.post1
flask-restx==1.3.0
google-genai==0.5.0
google-generativeai==0.8.3
gTTS==2.5.4
gunicorn==23.0.0
html2text==2024.2.26
javalang==0.13.0
langchain==0.1.4
langchain-openai==0.0.5
openapi3_parser==1.1.16
pandas==2.2.0
pydantic_settings==2.1.0
pymongo==4.6.3
PyPDF2==3.0.1
jinja2==3.1.5
jiter==0.8.2
jmespath==1.0.1
joblib==1.4.2
jsonpatch==1.33
jsonpointer==3.0.0
jsonschema==4.23.0
jsonschema-spec==0.2.4
jsonschema-specifications==2023.7.1
kombu==5.4.2
langchain==0.3.14
langchain-community==0.3.14
langchain-core==0.3.29
langchain-openai==0.3.0
langchain-text-splitters==0.3.5
langsmith==0.2.10
lazy-object-proxy==1.10.0
lxml==5.3.0
markupsafe==3.0.2
marshmallow==3.24.1
mpmath==1.3.0
multidict==6.1.0
mypy-extensions==1.0.0
networkx==3.4.2
numpy==2.2.1
openai==1.59.5
openapi-schema-validator==0.6.2
openapi-spec-validator==0.6.0
openapi3-parser==1.1.19
orjson==3.10.14
packaging==24.1
pandas==2.2.3
openpyxl==3.1.5
pathable==0.4.4
pillow==11.1.0
portalocker==2.10.1
prance==23.6.21.0
primp==0.10.0
prompt-toolkit==3.0.48
protobuf==5.29.3
psycopg2-binary==2.9.10
py==1.11.0
pydantic==2.10.4
pydantic-core==2.27.2
pydantic-settings==2.7.1
pymongo==4.10.1
pypdf2==3.0.1
python-dateutil==2.9.0.post0
python-dotenv==1.0.1
qdrant-client==1.9.0
redis==5.0.1
Requests==2.32.0
python-pptx==1.0.2
qdrant-client==1.12.2
redis==5.2.1
referencing==0.30.2
regex==2024.11.6
requests==2.32.3
retry==0.9.2
sentence-transformers
tiktoken
torch
tqdm==4.66.3
transformers==4.36.2
unstructured==0.12.2
Werkzeug==3.0.3
sentence-transformers==3.3.1
tiktoken==0.8.0
tokenizers==0.21.0
torch==2.5.1
tqdm==4.67.1
transformers==4.48.0
typing-extensions==4.12.2
typing-inspect==0.9.0
tzdata==2024.2
urllib3==2.3.0
vine==5.1.0
wcwidth==0.2.13
werkzeug==3.1.3
yarl==1.18.3
markdownify==0.14.1
tldextract==5.1.3
websockets==14.1

View File

@@ -12,3 +12,7 @@ class BaseRetriever(ABC):
@abstractmethod
def search(self, *args, **kwargs):
pass
@abstractmethod
def get_params(self):
pass

View File

@@ -2,7 +2,6 @@ import json
from application.retriever.base import BaseRetriever
from application.core.settings import settings
from application.llm.llm_creator import LLMCreator
from application.utils import count_tokens
from langchain_community.tools import BraveSearch
@@ -72,23 +71,13 @@ class BraveRetSearch(BaseRetriever):
for doc in docs:
yield {"source": doc}
if len(self.chat_history) > 1:
tokens_current_history = 0
# count tokens in history
self.chat_history.reverse()
if len(self.chat_history) > 0:
for i in self.chat_history:
if "prompt" in i and "response" in i:
tokens_batch = count_tokens(i["prompt"]) + count_tokens(
i["response"]
messages_combine.append({"role": "user", "content": i["prompt"]})
messages_combine.append(
{"role": "assistant", "content": i["response"]}
)
if tokens_current_history + tokens_batch < self.token_limit:
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": self.question})
llm = LLMCreator.create_llm(
@@ -101,3 +90,15 @@ class BraveRetSearch(BaseRetriever):
def search(self):
return self._get_data()
def get_params(self):
return {
"question": self.question,
"source": self.source,
"chat_history": self.chat_history,
"prompt": self.prompt,
"chunks": self.chunks,
"token_limit": self.token_limit,
"gpt_model": self.gpt_model,
"user_api_key": self.user_api_key
}

View File

@@ -1,10 +1,8 @@
import os
from application.retriever.base import BaseRetriever
from application.core.settings import settings
from application.vectorstore.vector_creator import VectorCreator
from application.llm.llm_creator import LLMCreator
from application.retriever.base import BaseRetriever
from application.tools.agent import Agent
from application.utils import count_tokens
from application.vectorstore.vector_creator import VectorCreator
class ClassicRAG(BaseRetriever):
@@ -21,7 +19,7 @@ class ClassicRAG(BaseRetriever):
user_api_key=None,
):
self.question = question
self.vectorstore = self._get_vectorstore(source=source)
self.vectorstore = source["active_docs"] if "active_docs" in source else None
self.chat_history = chat_history
self.prompt = prompt
self.chunks = chunks
@@ -38,21 +36,6 @@ class ClassicRAG(BaseRetriever):
)
self.user_api_key = user_api_key
def _get_vectorstore(self, source):
if "active_docs" in source:
if source["active_docs"].split("/")[0] == "default":
vectorstore = ""
elif source["active_docs"].split("/")[0] == "local":
vectorstore = "indexes/" + source["active_docs"]
else:
vectorstore = "vectors/" + source["active_docs"]
if source["active_docs"] == "default":
vectorstore = ""
else:
vectorstore = ""
vectorstore = os.path.join("application", vectorstore)
return vectorstore
def _get_data(self):
if self.chunks == 0:
docs = []
@@ -63,11 +46,9 @@ class ClassicRAG(BaseRetriever):
docs_temp = docsearch.search(self.question, k=self.chunks)
docs = [
{
"title": (
i.metadata["title"].split("/")[-1]
if i.metadata
else i.page_content
),
"title": i.metadata.get(
"title", i.metadata.get("post_title", i.page_content)
).split("/")[-1],
"text": i.page_content,
"source": (
i.metadata.get("source")
@@ -77,8 +58,6 @@ class ClassicRAG(BaseRetriever):
}
for i in docs_temp
]
if settings.LLM_NAME == "llama.cpp":
docs = [docs[0]]
return docs
@@ -92,32 +71,39 @@ class ClassicRAG(BaseRetriever):
for doc in docs:
yield {"source": doc}
if len(self.chat_history) > 1:
tokens_current_history = 0
# count tokens in history
self.chat_history.reverse()
if len(self.chat_history) > 0:
for i in self.chat_history:
if "prompt" in i and "response" in i:
tokens_batch = count_tokens(i["prompt"]) + count_tokens(
i["response"]
messages_combine.append({"role": "user", "content": i["prompt"]})
messages_combine.append(
{"role": "assistant", "content": i["response"]}
)
if tokens_current_history + tokens_batch < self.token_limit:
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": self.question})
llm = LLMCreator.create_llm(
settings.LLM_NAME, api_key=settings.API_KEY, user_api_key=self.user_api_key
# llm = LLMCreator.create_llm(
# settings.LLM_NAME, api_key=settings.API_KEY, user_api_key=self.user_api_key
# )
# completion = llm.gen_stream(model=self.gpt_model, messages=messages_combine)
agent = Agent(
llm_name=settings.LLM_NAME,
gpt_model=self.gpt_model,
api_key=settings.API_KEY,
user_api_key=self.user_api_key,
)
completion = llm.gen_stream(model=self.gpt_model, messages=messages_combine)
completion = agent.gen(messages_combine)
for line in completion:
yield {"answer": str(line)}
def search(self):
return self._get_data()
def get_params(self):
return {
"question": self.question,
"source": self.vectorstore,
"chat_history": self.chat_history,
"prompt": self.prompt,
"chunks": self.chunks,
"token_limit": self.token_limit,
"gpt_model": self.gpt_model,
"user_api_key": self.user_api_key,
}

View File

@@ -1,7 +1,6 @@
from application.retriever.base import BaseRetriever
from application.core.settings import settings
from application.llm.llm_creator import LLMCreator
from application.utils import count_tokens
from langchain_community.tools import DuckDuckGoSearchResults
from langchain_community.utilities import DuckDuckGoSearchAPIWrapper
@@ -89,22 +88,12 @@ class DuckDuckSearch(BaseRetriever):
for doc in docs:
yield {"source": doc}
if len(self.chat_history) > 1:
tokens_current_history = 0
# count tokens in history
self.chat_history.reverse()
if len(self.chat_history) > 0:
for i in self.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 < self.token_limit:
tokens_current_history += tokens_batch
if "prompt" in i and "response" in i:
messages_combine.append({"role": "user", "content": i["prompt"]})
messages_combine.append(
{"role": "user", "content": i["prompt"]}
)
messages_combine.append(
{"role": "system", "content": i["response"]}
{"role": "assistant", "content": i["response"]}
)
messages_combine.append({"role": "user", "content": self.question})
@@ -118,3 +107,15 @@ class DuckDuckSearch(BaseRetriever):
def search(self):
return self._get_data()
def get_params(self):
return {
"question": self.question,
"source": self.source,
"chat_history": self.chat_history,
"prompt": self.prompt,
"chunks": self.chunks,
"token_limit": self.token_limit,
"gpt_model": self.gpt_model,
"user_api_key": self.user_api_key
}

View File

@@ -5,15 +5,16 @@ from application.retriever.brave_search import BraveRetSearch
class RetrieverCreator:
retievers = {
retrievers = {
'classic': ClassicRAG,
'duckduck_search': DuckDuckSearch,
'brave_search': BraveRetSearch
'brave_search': BraveRetSearch,
'default': ClassicRAG
}
@classmethod
def create_retriever(cls, type, *args, **kwargs):
retiever_class = cls.retievers.get(type.lower())
retiever_class = cls.retrievers.get(type.lower())
if not retiever_class:
raise ValueError(f"No retievers class found for type {type}")
return retiever_class(*args, **kwargs)

160
application/tools/agent.py Normal file
View File

@@ -0,0 +1,160 @@
from application.core.mongo_db import MongoDB
from application.llm.llm_creator import LLMCreator
from application.tools.llm_handler import get_llm_handler
from application.tools.tool_action_parser import ToolActionParser
from application.tools.tool_manager import ToolManager
class Agent:
def __init__(self, llm_name, gpt_model, api_key, user_api_key=None):
# Initialize the LLM with the provided parameters
self.llm = LLMCreator.create_llm(
llm_name, api_key=api_key, user_api_key=user_api_key
)
self.llm_handler = get_llm_handler(llm_name)
self.gpt_model = gpt_model
# Static tool configuration (to be replaced later)
self.tools = []
self.tool_config = {}
def _get_user_tools(self, user="local"):
mongo = MongoDB.get_client()
db = mongo["docsgpt"]
user_tools_collection = db["user_tools"]
user_tools = user_tools_collection.find({"user": user, "status": True})
user_tools = list(user_tools)
tools_by_id = {str(tool["_id"]): tool for tool in user_tools}
return tools_by_id
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()
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)
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={})
tool = tm.load_tool(
tool_data["name"],
tool_config=(
{
"url": tool_data["config"]["actions"][action_name]["url"],
"method": tool_data["config"]["actions"][action_name]["method"],
"headers": headers,
"query_params": query_params,
}
if tool_data["name"] == "api_tool"
else tool_data["config"]
),
)
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)
call_id = getattr(call, "id", None)
return result, call_id
def _simple_tool_agent(self, messages):
tools_dict = self._get_user_tools()
self._prepare_tools(tools_dict)
resp = self.llm.gen(model=self.gpt_model, messages=messages, tools=self.tools)
if isinstance(resp, str):
yield resp
return
if hasattr(resp, "message") and hasattr(resp.message, "content"):
yield resp.message.content
return
resp = self.llm_handler.handle_response(self, resp, tools_dict, messages)
if isinstance(resp, str):
yield resp
elif hasattr(resp, "message") and hasattr(resp.message, "content"):
yield resp.message.content
else:
completion = self.llm.gen_stream(
model=self.gpt_model, messages=messages, tools=self.tools
)
for line in completion:
yield line
return
def gen(self, messages):
if self.llm.supports_tools():
resp = self._simple_tool_agent(messages)
for line in resp:
yield line
else:
resp = self.llm.gen_stream(model=self.gpt_model, messages=messages)
for line in resp:
yield line

21
application/tools/base.py Normal file
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,54 @@
import json
import requests
from application.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}")
response = requests.request(method, url, headers=headers, data=body)
response.raise_for_status()
try:
data = response.json()
except ValueError:
data = None
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,77 @@
import requests
from application.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()
# data will be like {"USD": <price>} if the call is successful
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,163 @@
import psycopg2
from application.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,86 @@
import requests
from application.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,97 @@
import json
from abc import ABC, abstractmethod
class LLMHandler(ABC):
@abstractmethod
def handle_response(self, agent, resp, tools_dict, messages, **kwargs):
pass
class OpenAILLMHandler(LLMHandler):
def handle_response(self, agent, resp, tools_dict, messages):
while resp.finish_reason == "tool_calls":
message = json.loads(resp.model_dump_json())["message"]
keys_to_remove = {"audio", "function_call", "refusal"}
filtered_data = {
k: v for k, v in message.items() if k not in keys_to_remove
}
messages.append(filtered_data)
tool_calls = resp.message.tool_calls
for call in tool_calls:
try:
tool_response, call_id = agent._execute_tool_action(
tools_dict, call
)
messages.append(
{
"role": "tool",
"content": str(tool_response),
"tool_call_id": call_id,
}
)
except Exception as e:
messages.append(
{
"role": "tool",
"content": f"Error executing tool: {str(e)}",
"tool_call_id": call_id,
}
)
resp = agent.llm.gen(
model=agent.gpt_model, messages=messages, tools=agent.tools
)
return resp
class GoogleLLMHandler(LLMHandler):
def handle_response(self, agent, resp, tools_dict, messages):
from google.genai import types
while True:
response = agent.llm.gen(
model=agent.gpt_model, messages=messages, tools=agent.tools
)
if response.candidates and response.candidates[0].content.parts:
tool_call_found = False
for part in response.candidates[0].content.parts:
if part.function_call:
tool_call_found = True
tool_response, call_id = agent._execute_tool_action(
tools_dict, part.function_call
)
function_response_part = types.Part.from_function_response(
name=part.function_call.name,
response={"result": tool_response},
)
messages.append(
{"role": "model", "content": [part.to_json_dict()]}
)
messages.append(
{
"role": "tool",
"content": [function_response_part.to_json_dict()],
}
)
if (
not tool_call_found
and response.candidates[0].content.parts
and response.candidates[0].content.parts[0].text
):
return response.candidates[0].content.parts[0].text
elif not tool_call_found:
return response.candidates[0].content.parts
else:
return response
def get_llm_handler(llm_type):
handlers = {
"openai": OpenAILLMHandler(),
"google": GoogleLLMHandler(),
}
return handlers.get(llm_type, OpenAILLMHandler())

View File

@@ -0,0 +1,26 @@
import json
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):
call_args = json.loads(call.function.arguments)
tool_id = call.function.name.split("_")[-1]
action_name = call.function.name.rsplit("_", 1)[0]
return tool_id, action_name, call_args
def _parse_google_llm(self, call):
call_args = call.args
tool_id = call.name.split("_")[-1]
action_name = call.name.rsplit("_", 1)[0]
return tool_id, action_name, call_args

View File

@@ -0,0 +1,46 @@
import importlib
import inspect
import os
import pkgutil
from application.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__), "implementations")
for finder, name, ispkg in pkgutil.iter_modules([tools_dir]):
if name == "base" or name.startswith("__"):
continue
module = importlib.import_module(
f"application.tools.implementations.{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):
self.config[tool_name] = tool_config
module = importlib.import_module(
f"application.tools.implementations.{tool_name}"
)
for member_name, obj in inspect.getmembers(module, inspect.isclass):
if issubclass(obj, Tool) and obj is not Tool:
return obj(tool_config)
def execute_action(self, tool_name, action_name, **kwargs):
if tool_name not in self.tools:
raise ValueError(f"Tool '{tool_name}' not loaded")
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

10
application/tts/base.py Normal file
View File

@@ -0,0 +1,10 @@
from abc import ABC, abstractmethod
class BaseTTS(ABC):
def __init__(self):
pass
@abstractmethod
def text_to_speech(self, *args, **kwargs):
pass

View File

@@ -0,0 +1,84 @@
import asyncio
import websockets
import json
import base64
from io import BytesIO
from application.tts.base import BaseTTS
class ElevenlabsTTS(BaseTTS):
def __init__(self):
self.api_key = 'ELEVENLABS_API_KEY'# here you should put your api key
self.model = "eleven_flash_v2_5"
self.voice = "VOICE_ID" # this is the hash code for the voice not the name!
self.write_audio = 1
def text_to_speech(self, text):
asyncio.run(self._text_to_speech_websocket(text))
async def _text_to_speech_websocket(self, text):
uri = f"wss://api.elevenlabs.io/v1/text-to-speech/{self.voice}/stream-input?model_id={self.model}"
websocket = await websockets.connect(uri)
payload = {
"text": " ",
"voice_settings": {
"stability": 0.5,
"similarity_boost": 0.8,
},
"xi_api_key": self.api_key,
}
await websocket.send(json.dumps(payload))
async def listen():
while 1:
try:
msg = await websocket.recv()
data = json.loads(msg)
if data.get("audio"):
print("audio received")
yield base64.b64decode(data["audio"])
elif data.get("isFinal"):
break
except websockets.exceptions.ConnectionClosed:
print("websocket closed")
break
listen_task = asyncio.create_task(self.stream(listen()))
await websocket.send(json.dumps({"text": text}))
# this is to signal the end of the text, either use this or flush
await websocket.send(json.dumps({"text": ""}))
await listen_task
async def stream(self, audio_stream):
if self.write_audio:
audio_bytes = BytesIO()
async for chunk in audio_stream:
if chunk:
audio_bytes.write(chunk)
with open("output_audio.mp3", "wb") as f:
f.write(audio_bytes.getvalue())
else:
async for chunk in audio_stream:
pass # depends on the streamer!
def test_elevenlabs_websocket():
"""
Tests the ElevenlabsTTS text_to_speech method with a sample prompt.
Prints out the base64-encoded result and writes it to 'output_audio.mp3'.
"""
# Instantiate your TTS class
tts = ElevenlabsTTS()
# Call the method with some sample text
tts.text_to_speech("Hello from ElevenLabs WebSocket!")
print("Saved audio to output_audio.mp3.")
if __name__ == "__main__":
test_elevenlabs_websocket()

View File

@@ -0,0 +1,19 @@
import io
import base64
from gtts import gTTS
from application.tts.base import BaseTTS
class GoogleTTS(BaseTTS):
def __init__(self):
pass
def text_to_speech(self, text):
lang = "en"
audio_fp = io.BytesIO()
tts = gTTS(text=text, lang=lang, slow=False)
tts.write_to_fp(audio_fp)
audio_fp.seek(0)
audio_base64 = base64.b64encode(audio_fp.read()).decode("utf-8")
return audio_base64, lang

View File

@@ -1,10 +1,9 @@
import sys
from pymongo import MongoClient
from datetime import datetime
from application.core.settings import settings
from application.utils import count_tokens
from application.core.mongo_db import MongoDB
from application.utils import num_tokens_from_string, num_tokens_from_object_or_list
mongo = MongoClient(settings.MONGO_URI)
mongo = MongoDB.get_client()
db = mongo["docsgpt"]
usage_collection = db["token_usage"]
@@ -22,11 +21,16 @@ def update_token_usage(user_api_key, token_usage):
def gen_token_usage(func):
def wrapper(self, model, messages, stream, **kwargs):
def wrapper(self, model, messages, stream, tools, **kwargs):
for message in messages:
self.token_usage["prompt_tokens"] += count_tokens(message["content"])
result = func(self, model, messages, stream, **kwargs)
self.token_usage["generated_tokens"] += count_tokens(result)
if message["content"]:
self.token_usage["prompt_tokens"] += num_tokens_from_string(message["content"])
result = func(self, model, messages, stream, tools, **kwargs)
# check if result is a string
if isinstance(result, str):
self.token_usage["generated_tokens"] += num_tokens_from_string(result)
else:
self.token_usage["generated_tokens"] += num_tokens_from_object_or_list(result)
update_token_usage(self.user_api_key, self.token_usage)
return result
@@ -34,16 +38,16 @@ def gen_token_usage(func):
def stream_token_usage(func):
def wrapper(self, model, messages, stream, **kwargs):
def wrapper(self, model, messages, stream, tools, **kwargs):
for message in messages:
self.token_usage["prompt_tokens"] += count_tokens(message["content"])
self.token_usage["prompt_tokens"] += num_tokens_from_string(message["content"])
batch = []
result = func(self, model, messages, stream, **kwargs)
result = func(self, model, messages, stream, tools, **kwargs)
for r in result:
batch.append(r)
yield r
for line in batch:
self.token_usage["generated_tokens"] += count_tokens(line)
self.token_usage["generated_tokens"] += num_tokens_from_string(line)
update_token_usage(self.user_api_key, self.token_usage)
return wrapper

View File

@@ -1,6 +1,97 @@
from transformers import GPT2TokenizerFast
import tiktoken
import hashlib
from flask import jsonify, make_response
tokenizer = GPT2TokenizerFast.from_pretrained('gpt2')
tokenizer.model_max_length = 100000
def count_tokens(string):
return len(tokenizer(string)['input_ids'])
_encoding = None
def get_encoding():
global _encoding
if _encoding is None:
_encoding = tiktoken.get_encoding("cl100k_base")
return _encoding
def num_tokens_from_string(string: str) -> int:
encoding = get_encoding()
if isinstance(string, str):
num_tokens = len(encoding.encode(string))
return num_tokens
else:
return 0
def num_tokens_from_object_or_list(thing):
if isinstance(thing, list):
return sum([num_tokens_from_object_or_list(x) for x in thing])
elif isinstance(thing, dict):
return sum([num_tokens_from_object_or_list(x) for x in thing.values()])
elif isinstance(thing, str):
return num_tokens_from_string(thing)
else:
return 0
def count_tokens_docs(docs):
docs_content = ""
for doc in docs:
docs_content += doc.page_content
tokens = num_tokens_from_string(docs_content)
return tokens
def check_required_fields(data, required_fields):
missing_fields = [field for field in required_fields if field not in data]
if missing_fields:
return make_response(
jsonify(
{
"success": False,
"message": f"Missing fields: {', '.join(missing_fields)}",
}
),
400,
)
return None
def get_hash(data):
return hashlib.md5(data.encode()).hexdigest()
def limit_chat_history(history, max_token_limit=None, gpt_model="docsgpt"):
"""
Limits chat history based on token count.
Returns a list of messages that fit within the token limit.
"""
from application.core.settings import settings
max_token_limit = (
max_token_limit
if max_token_limit and
max_token_limit < settings.MODEL_TOKEN_LIMITS.get(
gpt_model, settings.DEFAULT_MAX_HISTORY
)
else settings.MODEL_TOKEN_LIMITS.get(
gpt_model, settings.DEFAULT_MAX_HISTORY
)
)
if not history:
return []
tokens_current_history = 0
trimmed_history = []
for message in reversed(history):
if "prompt" in message and "response" in message:
tokens_batch = num_tokens_from_string(message["prompt"]) + num_tokens_from_string(
message["response"]
)
if tokens_current_history + tokens_batch < max_token_limit:
tokens_current_history += tokens_batch
trimmed_history.insert(0, message)
else:
break
return trimmed_history

View File

@@ -1,13 +1,30 @@
from abc import ABC, abstractmethod
import os
from langchain_community.embeddings import (
HuggingFaceEmbeddings,
CohereEmbeddings,
HuggingFaceInstructEmbeddings,
)
from sentence_transformers import SentenceTransformer
from langchain_openai import OpenAIEmbeddings
from application.core.settings import settings
class EmbeddingsWrapper:
def __init__(self, model_name, *args, **kwargs):
self.model = SentenceTransformer(model_name, config_kwargs={'allow_dangerous_deserialization': True}, *args, **kwargs)
self.dimension = self.model.get_sentence_embedding_dimension()
def embed_query(self, query: str):
return self.model.encode(query).tolist()
def embed_documents(self, documents: list):
return self.model.encode(documents).tolist()
def __call__(self, text):
if isinstance(text, str):
return self.embed_query(text)
elif isinstance(text, list):
return self.embed_documents(text)
else:
raise ValueError("Input must be a string or a list of strings")
class EmbeddingsSingleton:
_instances = {}
@@ -23,16 +40,15 @@ class EmbeddingsSingleton:
def _create_instance(embeddings_name, *args, **kwargs):
embeddings_factory = {
"openai_text-embedding-ada-002": OpenAIEmbeddings,
"huggingface_sentence-transformers/all-mpnet-base-v2": HuggingFaceEmbeddings,
"huggingface_sentence-transformers-all-mpnet-base-v2": HuggingFaceEmbeddings,
"huggingface_hkunlp/instructor-large": HuggingFaceInstructEmbeddings,
"cohere_medium": CohereEmbeddings
"huggingface_sentence-transformers/all-mpnet-base-v2": lambda: EmbeddingsWrapper("sentence-transformers/all-mpnet-base-v2"),
"huggingface_sentence-transformers-all-mpnet-base-v2": lambda: EmbeddingsWrapper("sentence-transformers/all-mpnet-base-v2"),
"huggingface_hkunlp/instructor-large": lambda: EmbeddingsWrapper("hkunlp/instructor-large"),
}
if embeddings_name not in embeddings_factory:
raise ValueError(f"Invalid embeddings_name: {embeddings_name}")
return embeddings_factory[embeddings_name](*args, **kwargs)
if embeddings_name in embeddings_factory:
return embeddings_factory[embeddings_name](*args, **kwargs)
else:
return EmbeddingsWrapper(embeddings_name, *args, **kwargs)
class BaseVectorStore(ABC):
def __init__(self):
@@ -58,22 +74,14 @@ class BaseVectorStore(ABC):
embeddings_name,
openai_api_key=embeddings_key
)
elif embeddings_name == "cohere_medium":
embedding_instance = EmbeddingsSingleton.get_instance(
embeddings_name,
cohere_api_key=embeddings_key
)
elif embeddings_name == "huggingface_sentence-transformers/all-mpnet-base-v2":
if os.path.exists("./model/all-mpnet-base-v2"):
embedding_instance = EmbeddingsSingleton.get_instance(
embeddings_name,
model_name="./model/all-mpnet-base-v2",
model_kwargs={"device": "cpu"}
embeddings_name="./model/all-mpnet-base-v2",
)
else:
embedding_instance = EmbeddingsSingleton.get_instance(
embeddings_name,
model_kwargs={"device": "cpu"}
)
else:
embedding_instance = EmbeddingsSingleton.get_instance(embeddings_name)

View File

@@ -9,9 +9,9 @@ import elasticsearch
class ElasticsearchStore(BaseVectorStore):
_es_connection = None # Class attribute to hold the Elasticsearch connection
def __init__(self, path, embeddings_key, index_name=settings.ELASTIC_INDEX):
def __init__(self, source_id, embeddings_key, index_name=settings.ELASTIC_INDEX):
super().__init__()
self.path = path.replace("application/indexes/", "").rstrip("/")
self.source_id = source_id.replace("application/indexes/", "").rstrip("/")
self.embeddings_key = embeddings_key
self.index_name = index_name
@@ -81,7 +81,7 @@ class ElasticsearchStore(BaseVectorStore):
embeddings = self._get_embeddings(settings.EMBEDDINGS_NAME, self.embeddings_key)
vector = embeddings.embed_query(question)
knn = {
"filter": [{"match": {"metadata.store.keyword": self.path}}],
"filter": [{"match": {"metadata.source_id.keyword": self.source_id}}],
"field": "vector",
"k": k,
"num_candidates": 100,
@@ -100,7 +100,7 @@ class ElasticsearchStore(BaseVectorStore):
}
}
],
"filter": [{"match": {"metadata.store.keyword": self.path}}],
"filter": [{"match": {"metadata.source_id.keyword": self.source_id}}],
}
},
"rank": {"rrf": {}},
@@ -209,5 +209,4 @@ class ElasticsearchStore(BaseVectorStore):
def delete_index(self):
self._es_connection.delete_by_query(index=self.index_name, query={"match": {
"metadata.store.keyword": self.path}},)
"metadata.source_id.keyword": self.source_id}},)

View File

@@ -1,21 +1,29 @@
from langchain_community.vectorstores import FAISS
from application.vectorstore.base import BaseVectorStore
from application.core.settings import settings
import os
def get_vectorstore(path: str) -> str:
if path:
vectorstore = os.path.join("application", "indexes", path)
else:
vectorstore = os.path.join("application")
return vectorstore
class FaissStore(BaseVectorStore):
def __init__(self, path, embeddings_key, docs_init=None):
def __init__(self, source_id: str, embeddings_key: str, docs_init=None):
super().__init__()
self.path = path
self.path = get_vectorstore(source_id)
embeddings = self._get_embeddings(settings.EMBEDDINGS_NAME, embeddings_key)
if docs_init:
self.docsearch = FAISS.from_documents(
docs_init, embeddings
)
else:
self.docsearch = FAISS.load_local(
self.path, embeddings
)
try:
if docs_init:
self.docsearch = FAISS.from_documents(docs_init, embeddings)
else:
self.docsearch = FAISS.load_local(self.path, embeddings, allow_dangerous_deserialization=True)
except Exception:
raise
self.assert_embedding_dimensions(embeddings)
def search(self, *args, **kwargs):
@@ -31,16 +39,12 @@ class FaissStore(BaseVectorStore):
return self.docsearch.delete(*args, **kwargs)
def assert_embedding_dimensions(self, embeddings):
"""
Check that the word embedding dimension of the docsearch index matches
the dimension of the word embeddings used
"""
"""Check that the word embedding dimension of the docsearch index matches the dimension of the word embeddings used."""
if settings.EMBEDDINGS_NAME == "huggingface_sentence-transformers/all-mpnet-base-v2":
try:
word_embedding_dimension = embeddings.client[1].word_embedding_dimension
except AttributeError as e:
raise AttributeError("word_embedding_dimension not found in embeddings.client[1]") from e
word_embedding_dimension = getattr(embeddings, 'dimension', None)
if word_embedding_dimension is None:
raise AttributeError("'dimension' attribute not found in embeddings instance.")
docsearch_index_dimension = self.docsearch.index.d
if word_embedding_dimension != docsearch_index_dimension:
raise ValueError(f"word_embedding_dimension ({word_embedding_dimension}) " +
f"!= docsearch_index_word_embedding_dimension ({docsearch_index_dimension})")
raise ValueError(f"Embedding dimension mismatch: embeddings.dimension ({word_embedding_dimension}) != docsearch index dimension ({docsearch_index_dimension})")

View File

@@ -0,0 +1,119 @@
from typing import List, Optional
import importlib
from application.vectorstore.base import BaseVectorStore
from application.core.settings import settings
class LanceDBVectorStore(BaseVectorStore):
"""Class for LanceDB Vector Store integration."""
def __init__(self, path: str = settings.LANCEDB_PATH,
table_name_prefix: str = settings.LANCEDB_TABLE_NAME,
source_id: str = None,
embeddings_key: str = "embeddings"):
"""Initialize the LanceDB vector store."""
super().__init__()
self.path = path
self.table_name = f"{table_name_prefix}_{source_id}" if source_id else table_name_prefix
self.embeddings_key = embeddings_key
self._lance_db = None
self.docsearch = None
self._pa = None # PyArrow (pa) will be lazy loaded
@property
def pa(self):
"""Lazy load pyarrow module."""
if self._pa is None:
self._pa = importlib.import_module("pyarrow")
return self._pa
@property
def lancedb(self):
"""Lazy load lancedb module."""
if not hasattr(self, "_lancedb_module"):
self._lancedb_module = importlib.import_module("lancedb")
return self._lancedb_module
@property
def lance_db(self):
"""Lazy load the LanceDB connection."""
if self._lance_db is None:
self._lance_db = self.lancedb.connect(self.path)
return self._lance_db
@property
def table(self):
"""Lazy load the LanceDB table."""
if self.docsearch is None:
if self.table_name in self.lance_db.table_names():
self.docsearch = self.lance_db.open_table(self.table_name)
else:
self.docsearch = None
return self.docsearch
def ensure_table_exists(self):
"""Ensure the table exists before performing operations."""
if self.table is None:
embeddings = self._get_embeddings(settings.EMBEDDINGS_NAME, self.embeddings_key)
schema = self.pa.schema([
self.pa.field("vector", self.pa.list_(self.pa.float32(), list_size=embeddings.dimension)),
self.pa.field("text", self.pa.string()),
self.pa.field("metadata", self.pa.struct([
self.pa.field("key", self.pa.string()),
self.pa.field("value", self.pa.string())
]))
])
self.docsearch = self.lance_db.create_table(self.table_name, schema=schema)
def add_texts(self, texts: List[str], metadatas: Optional[List[dict]] = None, source_id: str = None):
"""Add texts with metadata and their embeddings to the LanceDB table."""
embeddings = self._get_embeddings(settings.EMBEDDINGS_NAME, self.embeddings_key).embed_documents(texts)
vectors = []
for embedding, text, metadata in zip(embeddings, texts, metadatas or [{}] * len(texts)):
if source_id:
metadata["source_id"] = source_id
metadata_struct = [{"key": k, "value": str(v)} for k, v in metadata.items()]
vectors.append({
"vector": embedding,
"text": text,
"metadata": metadata_struct
})
self.ensure_table_exists()
self.docsearch.add(vectors)
def search(self, query: str, k: int = 2, *args, **kwargs):
"""Search LanceDB for the top k most similar vectors."""
self.ensure_table_exists()
query_embedding = self._get_embeddings(settings.EMBEDDINGS_NAME, self.embeddings_key).embed_query(query)
results = self.docsearch.search(query_embedding).limit(k).to_list()
return [(result["_distance"], result["text"], result["metadata"]) for result in results]
def delete_index(self):
"""Delete the entire LanceDB index (table)."""
if self.table:
self.lance_db.drop_table(self.table_name)
def assert_embedding_dimensions(self, embeddings):
"""Ensure that embedding dimensions match the table index dimensions."""
word_embedding_dimension = embeddings.dimension
if self.table:
table_index_dimension = len(self.docsearch.schema["vector"].type.value_type)
if word_embedding_dimension != table_index_dimension:
raise ValueError(
f"Embedding dimension mismatch: embeddings.dimension ({word_embedding_dimension}) "
f"!= table index dimension ({table_index_dimension})"
)
def filter_documents(self, filter_condition: dict) -> List[dict]:
"""Filter documents based on certain conditions."""
self.ensure_table_exists()
# Ensure source_id exists in the filter condition
if 'source_id' not in filter_condition:
raise ValueError("filter_condition must contain 'source_id'")
source_id = filter_condition["source_id"]
# Use LanceDB's native filtering if supported, otherwise filter manually
filtered_data = self.docsearch.filter(lambda x: x.metadata and x.metadata.get("source_id") == source_id).to_list()
return filtered_data

View File

@@ -0,0 +1,38 @@
from typing import List, Optional
from uuid import uuid4
from application.core.settings import settings
from application.vectorstore.base import BaseVectorStore
class MilvusStore(BaseVectorStore):
def __init__(self, source_id: str = "", embeddings_key: str = "embeddings"):
super().__init__()
from langchain_milvus import Milvus
connection_args = {
"uri": settings.MILVUS_URI,
"token": settings.MILVUS_TOKEN,
}
self._docsearch = Milvus(
embedding_function=self._get_embeddings(settings.EMBEDDINGS_NAME, embeddings_key),
collection_name=settings.MILVUS_COLLECTION_NAME,
connection_args=connection_args,
)
self._source_id = source_id
def search(self, question, k=2, *args, **kwargs):
expr = f"source_id == '{self._source_id}'"
return self._docsearch.similarity_search(query=question, k=k, expr=expr, *args, **kwargs)
def add_texts(self, texts: List[str], metadatas: Optional[List[dict]], *args, **kwargs):
ids = [str(uuid4()) for _ in range(len(texts))]
return self._docsearch.add_texts(texts=texts, metadatas=metadatas, ids=ids, *args, **kwargs)
def save_local(self, *args, **kwargs):
pass
def delete_index(self, *args, **kwargs):
pass

View File

@@ -1,11 +1,12 @@
from application.vectorstore.base import BaseVectorStore
from application.core.settings import settings
from application.vectorstore.base import BaseVectorStore
from application.vectorstore.document_class import Document
class MongoDBVectorStore(BaseVectorStore):
def __init__(
self,
path: str = "",
source_id: str = "",
embeddings_key: str = "embeddings",
collection: str = "documents",
index_name: str = "vector_search_index",
@@ -18,7 +19,7 @@ class MongoDBVectorStore(BaseVectorStore):
self._embedding_key = embedding_key
self._embeddings_key = embeddings_key
self._mongo_uri = settings.MONGO_URI
self._path = path.replace("application/indexes/", "").rstrip("/")
self._source_id = source_id.replace("application/indexes/", "").rstrip("/")
self._embedding = self._get_embeddings(settings.EMBEDDINGS_NAME, embeddings_key)
try:
@@ -33,27 +34,24 @@ class MongoDBVectorStore(BaseVectorStore):
self._database = self._client[database]
self._collection = self._database[collection]
def search(self, question, k=2, *args, **kwargs):
query_vector = self._embedding.embed_query(question)
pipeline = [
{
"$vectorSearch": {
"queryVector": query_vector,
"queryVector": query_vector,
"path": self._embedding_key,
"limit": k,
"numCandidates": k * 10,
"limit": k,
"numCandidates": k * 10,
"index": self._index_name,
"filter": {
"store": {"$eq": self._path}
}
"filter": {"source_id": {"$eq": self._source_id}},
}
}
]
cursor = self._collection.aggregate(pipeline)
results = []
for doc in cursor:
text = doc[self._text_key]
@@ -63,30 +61,32 @@ class MongoDBVectorStore(BaseVectorStore):
metadata = doc
results.append(Document(text, metadata))
return results
def _insert_texts(self, texts, metadatas):
if not texts:
return []
embeddings = self._embedding.embed_documents(texts)
to_insert = [
{self._text_key: t, self._embedding_key: embedding, **m}
for t, m, embedding in zip(texts, metadatas, embeddings)
]
# insert the documents in MongoDB Atlas
insert_result = self._collection.insert_many(to_insert)
return insert_result.inserted_ids
def add_texts(self,
def add_texts(
self,
texts,
metadatas = None,
ids = None,
refresh_indices = True,
create_index_if_not_exists = True,
bulk_kwargs = None,
**kwargs,):
metadatas=None,
ids=None,
refresh_indices=True,
create_index_if_not_exists=True,
bulk_kwargs=None,
**kwargs,
):
#dims = self._embedding.client[1].word_embedding_dimension
# dims = self._embedding.client[1].word_embedding_dimension
# # check if index exists
# if create_index_if_not_exists:
# # check if index exists
@@ -121,6 +121,6 @@ class MongoDBVectorStore(BaseVectorStore):
if texts_batch:
result_ids.extend(self._insert_texts(texts_batch, metadatas_batch))
return result_ids
def delete_index(self, *args, **kwargs):
self._collection.delete_many({"store": self._path})
self._collection.delete_many({"source_id": self._source_id})

View File

@@ -5,12 +5,12 @@ from qdrant_client import models
class QdrantStore(BaseVectorStore):
def __init__(self, path: str = "", embeddings_key: str = "embeddings"):
def __init__(self, source_id: str = "", embeddings_key: str = "embeddings"):
self._filter = models.Filter(
must=[
models.FieldCondition(
key="metadata.store",
match=models.MatchValue(value=path.replace("application/indexes/", "").rstrip("/")),
key="metadata.source_id",
match=models.MatchValue(value=source_id.replace("application/indexes/", "").rstrip("/")),
)
]
)

View File

@@ -1,5 +1,6 @@
from application.vectorstore.faiss import FaissStore
from application.vectorstore.elasticsearch import ElasticsearchStore
from application.vectorstore.milvus import MilvusStore
from application.vectorstore.mongodb import MongoDBVectorStore
from application.vectorstore.qdrant import QdrantStore
@@ -10,6 +11,7 @@ class VectorCreator:
"elasticsearch": ElasticsearchStore,
"mongodb": MongoDBVectorStore,
"qdrant": QdrantStore,
"milvus": MilvusStore,
}
@classmethod

View File

@@ -1,35 +1,44 @@
import logging
import os
import shutil
import string
import zipfile
import tiktoken
from collections import Counter
from urllib.parse import urljoin
import requests
from bson.objectid import ObjectId
from application.core.mongo_db import MongoDB
from application.core.settings import settings
from application.parser.file.bulk import SimpleDirectoryReader
from application.parser.embedding_pipeline import embed_and_store_documents
from application.parser.remote.remote_creator import RemoteCreator
from application.parser.open_ai_func import call_openai_api
from application.parser.schema.base import Document
from application.parser.token_func import group_split
from application.parser.chunking import Chunker
from application.utils import count_tokens_docs
mongo = MongoDB.get_client()
db = mongo["docsgpt"]
sources_collection = db["sources"]
# Constants
MIN_TOKENS = 150
MAX_TOKENS = 1250
RECURSION_DEPTH = 2
# Define a function to extract metadata from a given filename.
def metadata_from_filename(title):
store = "/".join(title.split("/")[1:3])
return {"title": title, "store": store}
return {"title": title}
# Define a function to generate a random string of a given length.
def generate_random_string(length):
return "".join([string.ascii_letters[i % 52] for i in range(length)])
current_dir = os.path.dirname(
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
)
def extract_zip_recursive(zip_path, extract_to, current_depth=0, max_depth=5):
"""
Recursively extract zip files with a limit on recursion depth.
@@ -41,12 +50,16 @@ def extract_zip_recursive(zip_path, extract_to, current_depth=0, max_depth=5):
max_depth (int): Maximum allowed depth of recursion to prevent infinite loops.
"""
if current_depth > max_depth:
print(f"Reached maximum recursion depth of {max_depth}")
logging.warning(f"Reached maximum recursion depth of {max_depth}")
return
with zipfile.ZipFile(zip_path, "r") as zip_ref:
zip_ref.extractall(extract_to)
os.remove(zip_path) # Remove the zip file after extracting
try:
with zipfile.ZipFile(zip_path, "r") as zip_ref:
zip_ref.extractall(extract_to)
os.remove(zip_path) # Remove the zip file after extracting
except Exception as e:
logging.error(f"Error extracting zip file {zip_path}: {e}")
return
# Check for nested zip files and extract them
for root, dirs, files in os.walk(extract_to):
@@ -56,9 +69,43 @@ def extract_zip_recursive(zip_path, extract_to, current_depth=0, max_depth=5):
file_path = os.path.join(root, file)
extract_zip_recursive(file_path, root, current_depth + 1, max_depth)
def download_file(url, params, dest_path):
try:
response = requests.get(url, params=params)
response.raise_for_status()
with open(dest_path, "wb") as f:
f.write(response.content)
except requests.RequestException as e:
logging.error(f"Error downloading file: {e}")
raise
def upload_index(full_path, file_data):
try:
if settings.VECTOR_STORE == "faiss":
files = {
"file_faiss": open(full_path + "/index.faiss", "rb"),
"file_pkl": open(full_path + "/index.pkl", "rb"),
}
response = requests.post(
urljoin(settings.API_URL, "/api/upload_index"), files=files, data=file_data
)
else:
response = requests.post(
urljoin(settings.API_URL, "/api/upload_index"), data=file_data
)
response.raise_for_status()
except requests.RequestException as e:
logging.error(f"Error uploading index: {e}")
raise
finally:
if settings.VECTOR_STORE == "faiss":
for file in files.values():
file.close()
# Define the main function for ingesting and processing documents.
def ingest_worker(self, directory, formats, name_job, filename, user):
def ingest_worker(
self, directory, formats, name_job, filename, user, retriever="classic"
):
"""
Ingest and process documents.
@@ -69,46 +116,29 @@ def ingest_worker(self, directory, formats, name_job, filename, user):
name_job (str): Name of the job for this ingestion task.
filename (str): Name of the file to be ingested.
user (str): Identifier for the user initiating the ingestion.
retriever (str): Type of retriever to use for processing the documents.
Returns:
dict: Information about the completed ingestion task, including input parameters and a "limited" flag.
"""
# directory = 'inputs' or 'temp'
# formats = [".rst", ".md"]
input_files = None
recursive = True
limit = None
exclude = True
# name_job = 'job1'
# filename = 'install.rst'
# user = 'local'
sample = False
token_check = True
min_tokens = 150
max_tokens = 1250
recursion_depth = 2
full_path = os.path.join(directory, user, name_job)
import sys
print(full_path, file=sys.stderr)
# check if API_URL env variable is set
logging.info(f"Ingest file: {full_path}", extra={"user": user, "job": name_job})
file_data = {"name": name_job, "file": filename, "user": user}
response = requests.get(
urljoin(settings.API_URL, "/api/download"), params=file_data
)
# check if file is in the response
print(response, file=sys.stderr)
file = response.content
if not os.path.exists(full_path):
os.makedirs(full_path)
with open(os.path.join(full_path, filename), "wb") as f:
f.write(file)
download_file(urljoin(settings.API_URL, "/api/download"), file_data, os.path.join(full_path, filename))
# check if file is .zip and extract it
if filename.endswith(".zip"):
extract_zip_recursive(
os.path.join(full_path, filename), full_path, 0, recursion_depth
os.path.join(full_path, filename), full_path, 0, RECURSION_DEPTH
)
self.update_state(state="PROGRESS", meta={"current": 1})
@@ -122,41 +152,33 @@ def ingest_worker(self, directory, formats, name_job, filename, user):
exclude_hidden=exclude,
file_metadata=metadata_from_filename,
).load_data()
raw_docs = group_split(
documents=raw_docs,
min_tokens=min_tokens,
max_tokens=max_tokens,
token_check=token_check,
chunker = Chunker(
chunking_strategy="classic_chunk",
max_tokens=MAX_TOKENS,
min_tokens=MIN_TOKENS,
duplicate_headers=False
)
raw_docs = chunker.chunk(documents=raw_docs)
docs = [Document.to_langchain_format(raw_doc) for raw_doc in raw_docs]
id = ObjectId()
call_openai_api(docs, full_path, self)
embed_and_store_documents(docs, full_path, id, self)
tokens = count_tokens_docs(docs)
self.update_state(state="PROGRESS", meta={"current": 100})
if sample:
for i in range(min(5, len(raw_docs))):
print(raw_docs[i].text)
logging.info(f"Sample document {i}: {raw_docs[i]}")
# get files from outputs/inputs/index.faiss and outputs/inputs/index.pkl
# and send them to the server (provide user and name in form)
file_data = {"name": name_job, "user": user, "tokens":tokens}
if settings.VECTOR_STORE == "faiss":
files = {
"file_faiss": open(full_path + "/index.faiss", "rb"),
"file_pkl": open(full_path + "/index.pkl", "rb"),
}
response = requests.post(
urljoin(settings.API_URL, "/api/upload_index"), files=files, data=file_data
)
response = requests.get(
urljoin(settings.API_URL, "/api/delete_old?path=" + full_path)
)
else:
response = requests.post(
urljoin(settings.API_URL, "/api/upload_index"), data=file_data
)
file_data.update({
"tokens": tokens,
"retriever": retriever,
"id": str(id),
"type": "local",
})
upload_index(full_path, file_data)
# delete local
shutil.rmtree(full_path)
@@ -170,68 +192,123 @@ def ingest_worker(self, directory, formats, name_job, filename, user):
"limited": False,
}
def remote_worker(self, source_data, name_job, user, loader, directory="temp"):
token_check = True
min_tokens = 150
max_tokens = 1250
full_path = directory + "/" + user + "/" + name_job
def remote_worker(
self,
source_data,
name_job,
user,
loader,
directory="temp",
retriever="classic",
sync_frequency="never",
operation_mode="upload",
doc_id=None,
):
full_path = os.path.join(directory, user, name_job)
if not os.path.exists(full_path):
os.makedirs(full_path)
self.update_state(state="PROGRESS", meta={"current": 1})
try:
logging.info("Initializing remote loader with type: %s", loader)
remote_loader = RemoteCreator.create_loader(loader)
raw_docs = remote_loader.load_data(source_data)
remote_loader = RemoteCreator.create_loader(loader)
raw_docs = remote_loader.load_data(source_data)
docs = group_split(
documents=raw_docs,
min_tokens=min_tokens,
max_tokens=max_tokens,
token_check=token_check,
)
# docs = [Document.to_langchain_format(raw_doc) for raw_doc in raw_docs]
call_openai_api(docs, full_path, self)
tokens = count_tokens_docs(docs)
self.update_state(state="PROGRESS", meta={"current": 100})
# Proceed with uploading and cleaning as in the original function
file_data = {"name": name_job, "user": user, "tokens":tokens}
if settings.VECTOR_STORE == "faiss":
files = {
"file_faiss": open(full_path + "/index.faiss", "rb"),
"file_pkl": open(full_path + "/index.pkl", "rb"),
}
requests.post(
urljoin(settings.API_URL, "/api/upload_index"), files=files, data=file_data
chunker = Chunker(
chunking_strategy="classic_chunk",
max_tokens=MAX_TOKENS,
min_tokens=MIN_TOKENS,
duplicate_headers=False
)
requests.get(urljoin(settings.API_URL, "/api/delete_old?path=" + full_path))
else:
requests.post(urljoin(settings.API_URL, "/api/upload_index"), data=file_data)
docs = chunker.chunk(documents=raw_docs)
docs = [Document.to_langchain_format(raw_doc) for raw_doc in raw_docs]
tokens = count_tokens_docs(docs)
logging.info("Total tokens calculated: %d", tokens)
shutil.rmtree(full_path)
if operation_mode == "upload":
id = ObjectId()
embed_and_store_documents(docs, full_path, id, self)
elif operation_mode == "sync":
if not doc_id or not ObjectId.is_valid(doc_id):
logging.error("Invalid doc_id provided for sync operation: %s", doc_id)
raise ValueError("doc_id must be provided for sync operation.")
id = ObjectId(doc_id)
embed_and_store_documents(docs, full_path, id, self)
self.update_state(state="PROGRESS", meta={"current": 100})
file_data = {
"name": name_job,
"user": user,
"tokens": tokens,
"retriever": retriever,
"id": str(id),
"type": loader,
"remote_data": source_data,
"sync_frequency": sync_frequency,
}
upload_index(full_path, file_data)
except Exception as e:
logging.error("Error in remote_worker task: %s", str(e), exc_info=True)
raise
finally:
if os.path.exists(full_path):
shutil.rmtree(full_path)
logging.info("remote_worker task completed successfully")
return {"urls": source_data, "name_job": name_job, "user": user, "limited": False}
def sync(
self,
source_data,
name_job,
user,
loader,
sync_frequency,
retriever,
doc_id=None,
directory="temp",
):
try:
remote_worker(
self,
source_data,
name_job,
user,
loader,
directory,
retriever,
sync_frequency,
"sync",
doc_id,
)
except Exception as e:
logging.error(f"Error during sync: {e}")
return {"status": "error", "error": str(e)}
return {"status": "success"}
def count_tokens_docs(docs):
# Here we convert the docs list to a string and calculate the number of tokens the string represents.
# docs_content = (" ".join(docs))
docs_content = ""
for doc in docs:
docs_content += doc.page_content
def sync_worker(self, frequency):
sync_counts = Counter()
sources = sources_collection.find()
for doc in sources:
if doc.get("sync_frequency") == frequency:
name = doc.get("name")
user = doc.get("user")
source_type = doc.get("type")
source_data = doc.get("remote_data")
retriever = doc.get("retriever")
doc_id = str(doc.get("_id"))
resp = sync(
self, source_data, name, user, source_type, frequency, retriever, doc_id
)
sync_counts["total_sync_count"] += 1
sync_counts[
"sync_success" if resp["status"] == "success" else "sync_failure"
] += 1
tokens, total_price = num_tokens_from_string(
string=docs_content, encoding_name="cl100k_base"
)
# Here we print the number of tokens and the approx user cost with some visually appealing formatting.
return tokens
def num_tokens_from_string(string: str, encoding_name: str) -> int:
# Function to convert string to tokens and estimate user cost.
encoding = tiktoken.get_encoding(encoding_name)
num_tokens = len(encoding.encode(string))
total_price = (num_tokens / 1000) * 0.0004
return num_tokens, total_price
return {
key: sync_counts[key]
for key in ["total_sync_count", "sync_success", "sync_failure"]
}

View File

@@ -1,5 +1,3 @@
version: "3.9"
services:
frontend:
build: ./frontend

View File

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

View File

@@ -1,8 +1,8 @@
version: "3.9"
services:
frontend:
build: ./frontend
volumes:
- ./frontend/src:/app/src
environment:
- VITE_API_HOST=http://localhost:7091
- VITE_API_STREAMING=$VITE_API_STREAMING

View File

@@ -1,5 +1,3 @@
version: "3.9"
services:
frontend:
build: ./frontend

View File

@@ -1,8 +1,8 @@
version: "3.9"
services:
frontend:
build: ./frontend
volumes:
- ./frontend/src:/app/src
environment:
- VITE_API_HOST=http://localhost:7091
- VITE_API_STREAMING=$VITE_API_STREAMING
@@ -20,6 +20,7 @@ services:
- 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
ports:
- "7091:7091"
volumes:
@@ -32,7 +33,7 @@ services:
worker:
build: ./application
command: celery -A application.app.celery worker -l INFO
command: celery -A application.app.celery worker -l INFO -B
environment:
- API_KEY=$API_KEY
- EMBEDDINGS_KEY=$API_KEY
@@ -41,6 +42,7 @@ services:
- CELERY_RESULT_BACKEND=redis://redis:6379/1
- MONGO_URI=mongodb://mongo:27017/docsgpt
- API_URL=http://backend:7091
- CACHE_REDIS_URL=redis://redis:6379/2
depends_on:
- redis
- mongo

View File

@@ -46,6 +46,6 @@ yarn install
yarn dev
```
- Now, you should be able to view the docs on your local environment by visiting `http://localhost:5000`. You can explore the different markdown files and make changes as you see fit.
- Now, you should be able to view the docs on your local environment by visiting `http://localhost:3000`. You can explore the different markdown files and make changes as you see fit.
- **Footnotes:** This guide assumes you have Node.js and npm installed. The guide involves running a local server using yarn, and viewing the documentation offline. If you encounter any issues, it may be worth verifying your Node.js and npm installations and whether you have installed yarn correctly.

2499
docs/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -7,8 +7,8 @@
"license": "MIT",
"dependencies": {
"@vercel/analytics": "^1.1.1",
"docsgpt": "^0.3.7",
"next": "^14.1.1",
"docsgpt-react": "^0.4.9",
"next": "^14.2.22",
"nextra": "^2.13.2",
"nextra-theme-docs": "^2.13.2",
"react": "^18.2.0",

View File

@@ -0,0 +1,78 @@
## Development Environments
### Spin up Mongo and Redis
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](https://github.com/arc53/DocsGPT/blob/main/docker-compose-dev.yaml).
Run
```
docker compose -f docker-compose-dev.yaml build
docker compose -f docker-compose-dev.yaml up -d
```
### Run the Backend
> [!Note]
> Make sure you have Python 3.12 installed.
1. Export required environment variables or prepare a `.env` file in the project folder:
- Copy [.env-template](https://github.com/arc53/DocsGPT/blob/main/application/.env-template) and create `.env`.
(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. Download embedding model and save it in the `model/` folder:
You can use the script below, or download it manually from [here](https://d3dg1063dc54p9.cloudfront.net/models/embeddings/mpnet-base-v2.zip), unzip it and save it in the `model/` folder.
```commandline
wget https://d3dg1063dc54p9.cloudfront.net/models/embeddings/mpnet-base-v2.zip
unzip mpnet-base-v2.zip -d model
rm mpnet-base-v2.zip
```
4. Install dependencies for the backend:
```commandline
pip install -r application/requirements.txt
```
5. Run the app using `flask --app application/app.py run --host=0.0.0.0 --port=7091`.
6. Start worker with `celery -A application.app.celery worker -l INFO`.
> [!Note]
> You can also launch the in a debugger mode in vscode by accessing SHIFT + CMD + D or SHIFT + Windows + D on windows and selecting Flask or Celery.
### 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`.

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