From 91fa932168f241a3e072251a84105483ff20e0bf Mon Sep 17 00:00:00 2001 From: Ankita Sikdar <115947852+AnkitaSikdar005@users.noreply.github.com> Date: Tue, 10 Oct 2023 02:06:52 +0530 Subject: [PATCH 01/93] Update CONTRIBUTING.md --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8be36122..d864e73f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,11 +17,11 @@ Thank you for choosing to contribute to DocsGPT! We are all very grateful! ## 🐞 Issues and Pull requests -We value contributions in the form of discussions or suggestions. We recommend taking a look at existing issues and our [roadmap](https://github.com/orgs/arc53/projects/2). +- We value contributions in the form of discussions or suggestions. We recommend taking a look at existing issues and our [roadmap](https://github.com/orgs/arc53/projects/2). -If you're interested in contributing code, here are some important things to know: +- If you're interested in contributing code, here are some important things to know: -We have a frontend built with React (Vite) and a backend in Python. +- We have a frontend built on React (Vite) and a backend in Python. ### If you are looking to contribute to frontend (βš›οΈReact, Vite): From ddd938fd646242be3489dd866df56909a10b90a0 Mon Sep 17 00:00:00 2001 From: Exterminator11 Date: Wed, 11 Oct 2023 07:36:37 +0530 Subject: [PATCH 02/93] Parser for OpenAPI3(Swagger) --- scripts/parser/file/openapi3_parser.py | 46 ++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 scripts/parser/file/openapi3_parser.py diff --git a/scripts/parser/file/openapi3_parser.py b/scripts/parser/file/openapi3_parser.py new file mode 100644 index 00000000..72feab71 --- /dev/null +++ b/scripts/parser/file/openapi3_parser.py @@ -0,0 +1,46 @@ +from urllib.parse import urlparse + +from openapi_parser import parse + +from base_parser import BaseParser + + +class OpenAPI3Parser(BaseParser): + def init_parser(self) -> None: + return super().init_parser() + + def get_base_urls(self, urls): + base_urls = [] + for i in urls: + parsed_url = urlparse(i) + base_url = parsed_url.scheme + "://" + parsed_url.netloc + if base_url not in base_urls: + base_urls.append(base_url) + return base_urls + + def get_info_from_paths(self, path): + info = "" + for operation in path.operations: + info += ( + f"\n{operation.method.value}=" + f"{operation.responses[0].description}" + ) + return info + + def parse_file(self, file_path): + data = parse(file_path) + results = "" + base_urls = self.get_base_urls(link.url for link in data.servers) + base_urls = ",".join([base_url for base_url in base_urls]) + results += f"Base URL:{base_urls}\n" + i = 1 + for path in data.paths: + info = self.get_info_from_paths(path) + results += ( + f"Path{i}: {path.url}\n" + f"description: {path.description}\n" + f"parameters: {path.parameters}\nmethods: {info}\n" + ) + i += 1 + with open("results.txt", "w") as f: + f.write(results) From bd70e00f084d12b539e25adcded4741d6408c702 Mon Sep 17 00:00:00 2001 From: Exterminator11 Date: Sun, 15 Oct 2023 17:00:54 +0530 Subject: [PATCH 03/93] Added tests and updated openapi3_parser.py --- scripts/parser/file/openapi3_parser.py | 20 +++-- tests/test_openapi3.yaml | 116 +++++++++++++++++++++++++ tests/test_openapi3parser.py | 29 +++++++ 3 files changed, 159 insertions(+), 6 deletions(-) create mode 100644 tests/test_openapi3.yaml create mode 100644 tests/test_openapi3parser.py diff --git a/scripts/parser/file/openapi3_parser.py b/scripts/parser/file/openapi3_parser.py index 72feab71..afea1e48 100644 --- a/scripts/parser/file/openapi3_parser.py +++ b/scripts/parser/file/openapi3_parser.py @@ -2,7 +2,10 @@ from urllib.parse import urlparse from openapi_parser import parse -from base_parser import BaseParser +try: + from scripts.parser.file.base_parser import BaseParser +except: + from base_parser import BaseParser class OpenAPI3Parser(BaseParser): @@ -20,11 +23,12 @@ class OpenAPI3Parser(BaseParser): def get_info_from_paths(self, path): info = "" - for operation in path.operations: - info += ( - f"\n{operation.method.value}=" - f"{operation.responses[0].description}" - ) + if(path.operations): + for operation in path.operations: + info += ( + f"\n{operation.method.value}=" + f"{operation.responses[0].description}" + ) return info def parse_file(self, file_path): @@ -42,5 +46,9 @@ class OpenAPI3Parser(BaseParser): f"parameters: {path.parameters}\nmethods: {info}\n" ) i += 1 + if(i==2): + with open("reff.txt", "w") as f: + f.write(str(path)) with open("results.txt", "w") as f: f.write(results) + return results \ No newline at end of file diff --git a/tests/test_openapi3.yaml b/tests/test_openapi3.yaml new file mode 100644 index 00000000..a015e14b --- /dev/null +++ b/tests/test_openapi3.yaml @@ -0,0 +1,116 @@ +openapi: "3.0.0" +info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT +servers: + - url: http://petstore.swagger.io/v1 + - url: https://api.example.com/v1/resource + - url: https://api.example.com/v1/another/resource + - url: https://api.example.com/v1/some/endpoint +paths: + /pets: + get: + summary: List all pets + operationId: listPets + tags: + - pets + parameters: + - name: limit + in: query + description: How many items to return at one time (max 100) + required: false + schema: + type: integer + maximum: 100 + format: int32 + responses: + '200': + description: A paged array of pets + headers: + x-next: + description: A link to the next page of responses + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Pets" + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + summary: Create a pet + operationId: createPets + tags: + - pets + responses: + '201': + description: Null response + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /pets/{petId}: + get: + summary: Info for a specific pet + operationId: showPetById + tags: + - pets + parameters: + - name: petId + in: path + required: true + description: The id of the pet to retrieve + schema: + type: string + responses: + '200': + description: Expected response to a valid request + content: + application/json: + schema: + $ref: "#/components/schemas/Pet" + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" +components: + schemas: + Pet: + type: object + required: + - id + - name + properties: + id: + type: integer + format: int64 + name: + type: string + tag: + type: string + Pets: + type: array + maxItems: 100 + items: + $ref: "#/components/schemas/Pet" + Error: + type: object + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string \ No newline at end of file diff --git a/tests/test_openapi3parser.py b/tests/test_openapi3parser.py new file mode 100644 index 00000000..2374329d --- /dev/null +++ b/tests/test_openapi3parser.py @@ -0,0 +1,29 @@ +import pytest + +from scripts.parser.file.openapi3_parser import OpenAPI3Parser +from openapi_parser import parse + + +@pytest.mark.parametrize("urls, expected_base_urls", [ + (["http://petstore.swagger.io/v1", "https://api.example.com/v1/resource",'https://api.example.com/v1/another/resource','https://api.example.com/v1/some/endpoint'], ["http://petstore.swagger.io",'https://api.example.com']), +]) +def test_get_base_urls(urls, expected_base_urls): + assert OpenAPI3Parser().get_base_urls(urls) == expected_base_urls + +def test_get_info_from_paths(): + file_path = "tests/test_openapi3.yaml" + data = parse(file_path) + path=data.paths[1] + assert OpenAPI3Parser().get_info_from_paths(path)=="\nget=Expected response to a valid request" + + +def test_parse_file(): + file_path = "tests/test_openapi3.yaml" + results_real = "Base URL:http://petstore.swagger.io,https://api.example.com\nPath1: /pets\ndescription: None\nparameters: []\nmethods: \nget=A paged array of pets\npost=Null response\nPath2: /pets/{petId}\ndescription: None\nparameters: []\nmethods: \nget=Expected response to a valid request\n" + openapi_parser_test = OpenAPI3Parser() + results=openapi_parser_test.parse_file(file_path) + assert results == results_real + + +if __name__ == "__main__": + pytest.main() From 36b243e9d2a29d1d9438bd3b39285fadb50f16a8 Mon Sep 17 00:00:00 2001 From: Exterminator11 Date: Sun, 15 Oct 2023 17:16:12 +0530 Subject: [PATCH 04/93] Formatted all the changed files --- reff.txt | 1 + results.txt | 12 ++++++++ scripts/parser/file/openapi3_parser.py | 8 +++--- tests/test_openapi3parser.py | 39 ++++++++++++++++++++------ 4 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 reff.txt create mode 100644 results.txt diff --git a/reff.txt b/reff.txt new file mode 100644 index 00000000..c9e6362b --- /dev/null +++ b/reff.txt @@ -0,0 +1 @@ +Path(url='/pets', summary=None, description=None, operations=[Operation(method=, responses=[Response(is_default=False, description='A paged array of pets', code=200, content=[Content(type=, schema=Array(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_items=100, min_items=None, unique_items=None, items=Object(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_properties=None, min_properties=None, required=['id', 'name'], properties=[Property(name='id', schema=Integer(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, multiple_of=None, maximum=None, exclusive_maximum=None, minimum=None, exclusive_minimum=None, format=)), Property(name='name', schema=String(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_length=None, min_length=None, pattern=None, format=None)), Property(name='tag', schema=String(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_length=None, min_length=None, pattern=None, format=None))])))], headers=[Header(name='x-next', schema=String(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_length=None, min_length=None, pattern=None, format=None), description='A link to the next page of responses', required=False, deprecated=False)]), Response(is_default=True, description='unexpected error', code=None, content=[Content(type=, schema=Object(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_properties=None, min_properties=None, required=['code', 'message'], properties=[Property(name='code', schema=Integer(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, multiple_of=None, maximum=None, exclusive_maximum=None, minimum=None, exclusive_minimum=None, format=)), Property(name='message', schema=String(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_length=None, min_length=None, pattern=None, format=None))]))], headers=[])], summary='List all pets', description=None, operation_id='listPets', external_docs=None, request_body=None, deprecated=False, parameters=[Parameter(name='limit', location=, schema=Integer(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, multiple_of=None, maximum=100, exclusive_maximum=None, minimum=None, exclusive_minimum=None, format=), required=False, description='How many items to return at one time (max 100)', deprecated=False, style=, explode=True)], tags=['pets'], security=[]), Operation(method=, responses=[Response(is_default=False, description='Null response', code=201, content=None, headers=[]), Response(is_default=True, description='unexpected error', code=None, content=[Content(type=, schema=Object(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_properties=None, min_properties=None, required=['code', 'message'], properties=[Property(name='code', schema=Integer(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, multiple_of=None, maximum=None, exclusive_maximum=None, minimum=None, exclusive_minimum=None, format=)), Property(name='message', schema=String(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_length=None, min_length=None, pattern=None, format=None))]))], headers=[])], summary='Create a pet', description=None, operation_id='createPets', external_docs=None, request_body=None, deprecated=False, parameters=[], tags=['pets'], security=[])], parameters=[]) \ No newline at end of file diff --git a/results.txt b/results.txt new file mode 100644 index 00000000..beff8056 --- /dev/null +++ b/results.txt @@ -0,0 +1,12 @@ +Base URL:http://petstore.swagger.io,https://api.example.com +Path1: /pets +description: None +parameters: [] +methods: +get=A paged array of pets +post=Null response +Path2: /pets/{petId} +description: None +parameters: [] +methods: +get=Expected response to a valid request diff --git a/scripts/parser/file/openapi3_parser.py b/scripts/parser/file/openapi3_parser.py index afea1e48..9b3be5cd 100644 --- a/scripts/parser/file/openapi3_parser.py +++ b/scripts/parser/file/openapi3_parser.py @@ -4,7 +4,7 @@ from openapi_parser import parse try: from scripts.parser.file.base_parser import BaseParser -except: +except ModuleNotFoundError: from base_parser import BaseParser @@ -23,7 +23,7 @@ class OpenAPI3Parser(BaseParser): def get_info_from_paths(self, path): info = "" - if(path.operations): + if path.operations: for operation in path.operations: info += ( f"\n{operation.method.value}=" @@ -46,9 +46,9 @@ class OpenAPI3Parser(BaseParser): f"parameters: {path.parameters}\nmethods: {info}\n" ) i += 1 - if(i==2): + if i == 2: with open("reff.txt", "w") as f: f.write(str(path)) with open("results.txt", "w") as f: f.write(results) - return results \ No newline at end of file + return results diff --git a/tests/test_openapi3parser.py b/tests/test_openapi3parser.py index 2374329d..86517e64 100644 --- a/tests/test_openapi3parser.py +++ b/tests/test_openapi3parser.py @@ -1,27 +1,48 @@ import pytest - -from scripts.parser.file.openapi3_parser import OpenAPI3Parser from openapi_parser import parse +from scripts.parser.file.openapi3_parser import OpenAPI3Parser -@pytest.mark.parametrize("urls, expected_base_urls", [ - (["http://petstore.swagger.io/v1", "https://api.example.com/v1/resource",'https://api.example.com/v1/another/resource','https://api.example.com/v1/some/endpoint'], ["http://petstore.swagger.io",'https://api.example.com']), -]) +@pytest.mark.parametrize( + "urls, expected_base_urls", + [ + ( + [ + "http://petstore.swagger.io/v1", + "https://api.example.com/v1/resource", + "https://api.example.com/v1/another/resource", + "https://api.example.com/v1/some/endpoint", + ], + ["http://petstore.swagger.io", "https://api.example.com"], + ), + ], +) def test_get_base_urls(urls, expected_base_urls): assert OpenAPI3Parser().get_base_urls(urls) == expected_base_urls + def test_get_info_from_paths(): file_path = "tests/test_openapi3.yaml" data = parse(file_path) - path=data.paths[1] - assert OpenAPI3Parser().get_info_from_paths(path)=="\nget=Expected response to a valid request" + path = data.paths[1] + assert ( + OpenAPI3Parser().get_info_from_paths(path) + == "\nget=Expected response to a valid request" + ) def test_parse_file(): file_path = "tests/test_openapi3.yaml" - results_real = "Base URL:http://petstore.swagger.io,https://api.example.com\nPath1: /pets\ndescription: None\nparameters: []\nmethods: \nget=A paged array of pets\npost=Null response\nPath2: /pets/{petId}\ndescription: None\nparameters: []\nmethods: \nget=Expected response to a valid request\n" + results_real = ( + "Base URL:http://petstore.swagger.io,https://api.example.com\nPath1: " + + "/pets\ndescription: None\nparameters: []\nmethods: \n" + + "get=A paged array of pets\npost=Null " + + "response\nPath2: /pets/{petId}\ndescription: None\n" + + "parameters: []\nmethods: " + + "\nget=Expected response to a valid request\n" + ) openapi_parser_test = OpenAPI3Parser() - results=openapi_parser_test.parse_file(file_path) + results = openapi_parser_test.parse_file(file_path) assert results == results_real From 7159e4fbe29b67a55e62c9f2dec503b138a5e7a6 Mon Sep 17 00:00:00 2001 From: Exterminator11 Date: Sun, 15 Oct 2023 17:16:58 +0530 Subject: [PATCH 05/93] Formatted files --- reff.txt | 1 - results.txt | 12 ------------ 2 files changed, 13 deletions(-) delete mode 100644 reff.txt delete mode 100644 results.txt diff --git a/reff.txt b/reff.txt deleted file mode 100644 index c9e6362b..00000000 --- a/reff.txt +++ /dev/null @@ -1 +0,0 @@ -Path(url='/pets', summary=None, description=None, operations=[Operation(method=, responses=[Response(is_default=False, description='A paged array of pets', code=200, content=[Content(type=, schema=Array(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_items=100, min_items=None, unique_items=None, items=Object(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_properties=None, min_properties=None, required=['id', 'name'], properties=[Property(name='id', schema=Integer(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, multiple_of=None, maximum=None, exclusive_maximum=None, minimum=None, exclusive_minimum=None, format=)), Property(name='name', schema=String(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_length=None, min_length=None, pattern=None, format=None)), Property(name='tag', schema=String(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_length=None, min_length=None, pattern=None, format=None))])))], headers=[Header(name='x-next', schema=String(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_length=None, min_length=None, pattern=None, format=None), description='A link to the next page of responses', required=False, deprecated=False)]), Response(is_default=True, description='unexpected error', code=None, content=[Content(type=, schema=Object(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_properties=None, min_properties=None, required=['code', 'message'], properties=[Property(name='code', schema=Integer(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, multiple_of=None, maximum=None, exclusive_maximum=None, minimum=None, exclusive_minimum=None, format=)), Property(name='message', schema=String(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_length=None, min_length=None, pattern=None, format=None))]))], headers=[])], summary='List all pets', description=None, operation_id='listPets', external_docs=None, request_body=None, deprecated=False, parameters=[Parameter(name='limit', location=, schema=Integer(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, multiple_of=None, maximum=100, exclusive_maximum=None, minimum=None, exclusive_minimum=None, format=), required=False, description='How many items to return at one time (max 100)', deprecated=False, style=, explode=True)], tags=['pets'], security=[]), Operation(method=, responses=[Response(is_default=False, description='Null response', code=201, content=None, headers=[]), Response(is_default=True, description='unexpected error', code=None, content=[Content(type=, schema=Object(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_properties=None, min_properties=None, required=['code', 'message'], properties=[Property(name='code', schema=Integer(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, multiple_of=None, maximum=None, exclusive_maximum=None, minimum=None, exclusive_minimum=None, format=)), Property(name='message', schema=String(type=, title=None, enum=[], example=None, description=None, default=None, nullable=False, read_only=False, write_only=False, deprecated=False, extensions={}, max_length=None, min_length=None, pattern=None, format=None))]))], headers=[])], summary='Create a pet', description=None, operation_id='createPets', external_docs=None, request_body=None, deprecated=False, parameters=[], tags=['pets'], security=[])], parameters=[]) \ No newline at end of file diff --git a/results.txt b/results.txt deleted file mode 100644 index beff8056..00000000 --- a/results.txt +++ /dev/null @@ -1,12 +0,0 @@ -Base URL:http://petstore.swagger.io,https://api.example.com -Path1: /pets -description: None -parameters: [] -methods: -get=A paged array of pets -post=Null response -Path2: /pets/{petId} -description: None -parameters: [] -methods: -get=Expected response to a valid request From a7f5303eaf910e3b7375a4abfbe7a2fc2949fcf7 Mon Sep 17 00:00:00 2001 From: Exterminator11 Date: Sun, 15 Oct 2023 17:20:50 +0530 Subject: [PATCH 06/93] Cleaned up the code --- scripts/parser/file/openapi3_parser.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/parser/file/openapi3_parser.py b/scripts/parser/file/openapi3_parser.py index 9b3be5cd..4fd1ffaf 100644 --- a/scripts/parser/file/openapi3_parser.py +++ b/scripts/parser/file/openapi3_parser.py @@ -46,9 +46,6 @@ class OpenAPI3Parser(BaseParser): f"parameters: {path.parameters}\nmethods: {info}\n" ) i += 1 - if i == 2: - with open("reff.txt", "w") as f: - f.write(str(path)) with open("results.txt", "w") as f: f.write(results) return results From f328b39f57338def892b84ae0c9e27d87661aad8 Mon Sep 17 00:00:00 2001 From: Exterminator11 Date: Mon, 16 Oct 2023 21:05:47 +0530 Subject: [PATCH 07/93] Fixed import error --- scripts/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/requirements.txt b/scripts/requirements.txt index 7d48373f..badafff0 100644 --- a/scripts/requirements.txt +++ b/scripts/requirements.txt @@ -61,6 +61,7 @@ nltk==3.8.1 numcodecs==0.11.0 numpy==1.25.2 openai==0.27.8 +openapi3-parser==1.1.14 openpyxl==3.1.2 packaging==23.1 pandas==2.0.3 From 55921b262f1a41364d45f4eedf0c1f5503d1e2d4 Mon Sep 17 00:00:00 2001 From: KRISH SONI <67964054+krishvsoni@users.noreply.github.com> Date: Wed, 18 Oct 2023 21:54:28 +0530 Subject: [PATCH 08/93] docker docs --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index edeb7b66..109728ed 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ If you don't have enough resources to run it, you can use bitsnbytes to quantize ## QuickStart -Note: Make sure you have Docker installed +Note: Make sure you have [Docker](https://www.docker.com/) installed On Mac OS or Linux, write: @@ -124,10 +124,19 @@ Make sure you have Python 3.10 or 3.11 installed. (check out [`application/core/settings.py`](application/core/settings.py) if you want to see more config options.) 2. (optional) Create a Python virtual environment: +You can follow the [Python official documentation](https://docs.python.org/3/tutorial/venv.html) for virtual environments . + +a) On Mac OS and Linux ```commandline python -m venv venv . venv/bin/activate ``` +b) On Windows +```commandline +python -m venv venv + venv/Scripts/activate +``` + 3. Change to the `application/` subdir and install dependencies for the backend: ```commandline pip install -r application/requirements.txt From 960365a0633067af0c4daf0796fff56e6a735903 Mon Sep 17 00:00:00 2001 From: neha3423 Date: Sun, 22 Oct 2023 10:54:02 +0530 Subject: [PATCH 09/93] neha3423 --- CONTRIBUTING.md | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3407fdc9..a14e4bf7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -57,42 +57,55 @@ Here's a step-by-step guide on how to contribute to DocsGPT: 1. **Fork the Repository:** - Click the "Fork" button at the top-right of this repository to create your fork. -2. **Create and Switch to a New Branch:** +2. **Clone the Forked Repository:** + - Clone the repository using: + ''' shell + git clone https://github.com//DocsGPT.git + ''' + +3. **Keep your in Sync:** + - Before you make any changes, make sure that your fork is in sync to avoid merge conflicts. + '''shell + git remote add upstream https://github.com/arc53/DocsGPT.git + git pull upstream master + ''' + +4. **Create and Switch to a New Branch:** - Create a new branch for your contribution using: ```shell git checkout -b your-branch-name ``` -3. **Make Changes:** +5. **Make Changes:** - Make the required changes in your branch. -4. **Add Changes to the Staging Area:** +6. **Add Changes to the Staging Area:** - Add your changes to the staging area using: ```shell git add . ``` -5. **Commit Your Changes:** +7. **Commit Your Changes:** - Commit your changes with a descriptive commit message using: ```shell git commit -m "Your descriptive commit message" ``` -6. **Push Your Changes to the Remote Repository:** +8. **Push Your Changes to the Remote Repository:** - Push your branch with changes to your fork on GitHub using: ```shell git push origin your-branch-name ``` -7. **Submit a Pull Request (PR):** +9. **Submit a Pull Request (PR):** - Create a Pull Request from your branch to the main repository. Make sure to include a detailed description of your changes and reference any related issues. -8. **Collaborate:** +10. **Collaborate:** - Be responsive to comments and feedback on your PR. - Make necessary updates as suggested. - Once your PR is approved, it will be merged into the main repository. -9. **Testing:** +11. **Testing:** - Before submitting a Pull Request, ensure your code passes all unit tests. - To run unit tests from the root of the repository, execute: ```shell @@ -101,7 +114,7 @@ Here's a step-by-step guide on how to contribute to DocsGPT: *Note: You should run the unit test only after making the changes to the backend code.* -10. **Questions and Collaboration:** +12. **Questions and Collaboration:** - Feel free to join our Discord. We're very friendly and welcoming to new contributors, so don't hesitate to reach out. Thank you for considering contributing to DocsGPT! πŸ™ From 6cbe4f2ea72fd1a10d2c0ee6ce4762d3acc3a016 Mon Sep 17 00:00:00 2001 From: neha3423 Date: Sun, 22 Oct 2023 11:38:23 +0530 Subject: [PATCH 10/93] neha3423 --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a14e4bf7..ff5aab35 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -63,13 +63,13 @@ Here's a step-by-step guide on how to contribute to DocsGPT: git clone https://github.com//DocsGPT.git ''' -3. **Keep your in Sync:** - - Before you make any changes, make sure that your fork is in sync to avoid merge conflicts. +3. **Keep your Fork in Sync:** + - Before you make any changes, make sure that your fork is in sync to avoid merge conflicts using: '''shell git remote add upstream https://github.com/arc53/DocsGPT.git git pull upstream master ''' - + 4. **Create and Switch to a New Branch:** - Create a new branch for your contribution using: ```shell From a6677b2e458ede4c32cb576ac5c4b655bd714662 Mon Sep 17 00:00:00 2001 From: iamakhileshmishra Date: Mon, 23 Oct 2023 14:44:37 +0530 Subject: [PATCH 11/93] Railway Deployment Guide Added --- docs/package-lock.json | 1 + docs/pages/Deploying/Railway-Deploying.md | 254 ++++++++++++++++++++++ docs/pages/Deploying/image.png | Bin 0 -> 11181 bytes 3 files changed, 255 insertions(+) create mode 100644 docs/pages/Deploying/Railway-Deploying.md create mode 100644 docs/pages/Deploying/image.png diff --git a/docs/package-lock.json b/docs/package-lock.json index b0255929..20f65d80 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -4,6 +4,7 @@ "requires": true, "packages": { "": { + "license": "MIT", "dependencies": { "@vercel/analytics": "^1.0.2", "docsgpt": "^0.2.4", diff --git a/docs/pages/Deploying/Railway-Deploying.md b/docs/pages/Deploying/Railway-Deploying.md new file mode 100644 index 00000000..15e2f60a --- /dev/null +++ b/docs/pages/Deploying/Railway-Deploying.md @@ -0,0 +1,254 @@ + +# Self-hosting DocsGPT on Railway + + + +Here's a step-by-step guide on how to host DocsGPT on Railway App. + + + +At first Clone and setup the project locally to run , test and Modify. + + + +### 1. Clone and GitHub SetUp + +a. Open Terminal (Windows Shell or Git bash(recommended)). + + + +b. Type `git clone https://github.com/arc53/DocsGPT.git` + + + +#### Download the package information + + + +Once it has finished cloning the repository, it is time to download the package information from all sources. To do so, simply enter the following command: + + + +`sudo apt update` + + + +#### Install Docker and Docker Compose + + + +DocsGPT backend and worker use Python, Frontend is written on React and the whole application is containerized using Docker. To install Docker and Docker Compose, enter the following commands: + + + +`sudo apt install docker.io` + + + +And now install docker-compose: + + + +`sudo apt install docker-compose` + + + +#### Access the DocsGPT Folder + + + +Enter the following command to access the folder in which the DocsGPT docker-compose file is present. + + + +`cd DocsGPT/` + + + +#### Prepare the Environment + + + +Inside the DocsGPT folder create a `.env` file and copy the contents of `.env_sample` into it. + + + +`nano .env` + + + +Make sure your `.env` file looks like this: + + + +``` + +OPENAI_API_KEY=(Your OpenAI API key) + +VITE_API_STREAMING=true + +SELF_HOSTED_MODEL=false + +``` + + + +To save the file, press CTRL+X, then Y, and then ENTER. + + + +Next, set the correct IP for the Backend by opening the docker-compose.yml file: + + + +`nano docker-compose.yml` + + + +And Change line 7 to: `VITE_API_HOST=http://localhost:7091` + +to this `VITE_API_HOST=http://:7091` + + + +This will allow the frontend to connect to the backend. + + + +#### Running the Application + + + +You're almost there! Now that all the necessary bits and pieces have been installed, it is time to run the application. To do so, use the following command: + + + +`sudo docker-compose up -d` + + + +Launching it for the first time will take a few minutes to download all the necessary dependencies and build. + + + +Once this is done you can go ahead and close the terminal window. + + + +### 2. Pushing it to your own Repository + + + +a. Create a Repository on your GitHub. + + + +b. Open Terminal in the same directory of the Cloned project. + + + +c. Type `git init` + + + +d. `git add .` + + + +e. `git commit -m "first-commit"` + + + +f. `git remote add origin ` + + + +g. `git push git push --set-upstream origin master` + +Your local files will now be pushed to your GitHub Account. :) + + +### 3. Create an Railway Account: + + + +If you haven't already, create or log in to your railway account do it by visiting [Railway](https://railway.app/) + + + +Signup via **GitHub** [Recommended]. + + + +### 4. Start New Project: + + + +a. Open Railway app and Click on "Start New Project." + + + +b. Choose any from the list of options available (Recommended "**Deploy from GitHub Repo**") + + + +c. Choose the required Repository from your Github. + + + +d. Configure and allow access to modify your GitHub content from the pop-up window. + + + +e. Agree to all the terms and conditions. + + + +PS: It may take a few minutes for the account setup to complete. + + + +#### You will get A free trail of $5 (use it for trail and then purchase if satisfied and needed) + + + +### 5. Connecting to Your newly Railway app with GitHub + + + +a. Choose DocsGPT repo from the list of your GitHub repository that you want to deploy now. + + + +b. Click on Deploy now . + + + +![Three Tabs will be there](image.png) + + + +c. Select Variables Tab. + + + +d. Upload the env file here that you used for local setup. + + + +e. Go to Settings Tab now. + + + +f. Go to "Networking" and click on Generate Domain Name, to get the URL of your hosted project. + + + +g. You can update the Root directory, build command, installation command as per need. + +*[However recommended not the disturb these options and leave them as default if not that needed.]* + + + + +Your own DocsGPT is now available at the Generated domain URl. :) \ No newline at end of file diff --git a/docs/pages/Deploying/image.png b/docs/pages/Deploying/image.png new file mode 100644 index 0000000000000000000000000000000000000000..2100e5b4d20e24108e52dff4de8e9c486ee4ff17 GIT binary patch literal 11181 zcmeHtcTiJX)UV|#D(zZOLCUp(G*Nm-RC@0anu4^1A|>=9B6y{W^gt-m6GG@E1W*v9 zg-{a-5JWm5L`nh#0x$Qw-<$87dH=ncH}huR+cW2!wdU-7&e^}c_Bwm*_4{CKsKtJX z=hCTDr`UD0pPQaK^#`3PCtNtsJn!r6O*1d2{Y|x=o~j<^U1KVLxTzbcpE^~W!g}=b z98XhhHo#*Q2!4Blvh=6O)`Yb)MC0r>9R;EjwJla)dGKbFII1=3ZtZ1+U;QnKL^Dg;It*m(wWS_jRo7 z4!{7q1%0>g@@eKrGRrE&$*+1C?E0T-fW>2>7mC;SSAA10A{hMZ zofPZ8Y9Tz{H}cHC@@m(GfAIOI-1uwt?7x!Tn?lZirPrt5s{Si|Irsl7{;%*vXXnBF zp*H_QbjsdhsQ<-C&Oc_vEF%^@NA2r1{|)tv`SSBa{}XuF&BXtF-v1WJ4|Pz#29V=p z$gy&*Wch?YXJ2E&oZ_l!ik)$AQG9`HHNJQ6X!vcyH?KYSez5A=>O=A1fX4biTOQ4Z zx_LaIY>s6`@>R%hig_hy37*84ef_-=%|hUIJpHUL?GRJhI!l+hP9fB+&rJ4#fxQ>MKiD>zyWBN0t0V1)NkCG z$F$n0@k6VBL~Y^(tTwORXIkQ$;VXyG!CwNKzCB!Y$v0i7M#3DA-SZ@4lp1RH?@X2Z3*cCr+3;^l04lAX3H5)j+@+$nc>KMZ#*q6083&!S zEBekU>X6`tN7O;>39B&9%4N_>wELC!9s?6k*|ig_W{I4Ol&YWb72_msf^EJYO8D`z z0D-Zkmd7$|)@wbhsA%Oe_t*ixo6Q8{ip;BDuk5Eg%XtRWM&<+Go68q_%#~9u0L?~? zopsQanT+B9l0k26PG%(k67GD8)fSQRz)&3u49JA09ixs}80oKd5+Cm5n@&Y{lA@qm zuQ||bJYj>L1~(O-oZxmYGGdqm{?vu+mD`K!?C zWbe7UJQ&SW2sI8^eyZB6 zm{YBZVr?erH-Uj92o!+S#9QQA=!z@uwMak1H{3PObgQY> zN%4NrotbG6XcJm!uk_cA7|PpybNT+M`k#vX-t9ASW~XSD=gR+ zg3l>=95UQR(-x?{I2>x`b8}S;{aQgz9vMso)ni?T(wCQxkCZB;c}Vb_qR=E<@t-e!-J+z2|jqzvDIo;^pBPuXT?@UGAU?KR(q z3kTX`x}#=c>wml0A>)H|H%O)u1zVWw_V4q*^WETSUl*Iyq?q&wJMB~tEkY!igqKmiErh3OKyo{&onqe!;cD- zi=wjR{xEN%31d3_V|DX1nnw2WOOl>ht`_O^qK1nz34UBEkF8iE1!Qmb`N&q%o7gHn z8%;0WP-M;BmtM&!MMdex{p#N2JX1=d?i*2X+q!PiFPC9^)Wz&qq9b{cFwt-O6pKy13i5u1-(y2#q#w{|9JD^_`RBh98) zwbJi;tS)2i4g&4-NwWLOo5HB9%#)R;j8LyZ#@1r;CCret?9!46fd9sPJ)VDTn`N04 z{gJxN6;b%UI>An^WMip=XG?VDhI5o*#Ny*wIZ%sfH-Y0kV|sUgS83O-?|6f*JkaUV zQB4uIpafgO5pUXL=CTVsfXP-#Tt4eL?6)x<&Q~V(=(l9(kZU2`T}@AxEWLv3t!2vd z&Skzzf=KDLZh;kle+OS;J1MI6A&gq&HU=X?aPO2?GF%9>Rz}TI-W>L$ltEC^))ex@ zGNu>XVq#PDzH3d9FLICF>p`{2p!YQ42S=KmeX(GonRh`Zi|)dWjL@Kk^L&3xTkABC z)$Eb$?LO|*hgp-?frLG+0gF-5XAu%fbrM)@)2|x>Aa|!25fRvAGt$f(=X+UD*eJ~h z<=~+LaM)i@xeg+gAz&9g9P*X712IEVEayBhoi3^Id0E(ezvkXD$Y4JH*g zRFx%YT)`!s(p%nGG-MN=d6R&(`t`!PJFSKVo(Sn6rD^)3X7e~hWBQ!9YYyEs! zAQ2qccjI>!ylNslnJ23Mdyl9;y*t!v{3(|rmILp6WU90XN7mv+siH4j&wSv9&1TJM~8@$W;q=AZ(x3D%T` zW4lULOW@8`!@e6RwYR+>dK`%OOD1%Fh34NKa-REe^l0O>o9z(ROZB6?v46f@$>B5A zz1o3GBn1ltC~#7dlx?O>mtU6CqfTJSAF(q9_bFcE$xaLY*3(kDoQSA-F&X7HNTIH3 zZFgz<>6l{aw4KT*REXSEVYk40T25BgTY=f?-0j3%^M%?kZW)Sp9)^>bqX8N~)vJh{ed4+Na^~{0Ty)r#6FV?*CYi@4#05La(aqa1r_geKhf9Z^q|- zofSK|4zsGLQ#Y6Vz6sy(&!OfiuIyJn9@b6s^#*j_GRxS3j&b-}%~shalDE$%`ZeHW zhDqaw3d1*r9N}2PcCg2>7|2C&DIdT0 z=pB-+j$wNKmetF<;Ll3}Q!-t@!f1_=vN^54d@<5KzepS&2WXRZwO44(MCmg180n1; z1DNC{+pis0QqhI4nOlGRRSz2fZZDVKgn`IZO&+94aC7`XBGEo+bx7eI7fnFl`cy7&~SNlOH`pe49r_t#vI6_JA^hNNR03k0hw2u_88AO8VQS zKH%=0PgT?P#-D@6$oAf*y<0Aw_>bz4#@&x#sYPyOhghN?0wQJH8cSv9hb7_p+<>6rN%Tc-OYuRNOpx`V|ICDv zbOd@!K~vS0g3a%i5prq`v=`z`@AJVOYY!M3mb7(Gh`B)4-f?%loA|QDv!pT+9$5pR zREGivPxetbgj~5*!%>hAtV@hm@>Qg-A)mjuMVK;GcowOGaLcSVAEjG0u9KTsh%GgH zQg%7zb{X!obt{cPM7#GWY=t@m>ak=m+(!$egb66|dzCNZeHXlWA5dLGV}G(l|}J;-`=GEdm8EB>r@*Eghh zqF%^-_XHUym#NDGImuSm?aQvqFF53KZ<`p)ggJnd1rFt{w>EYFK{dlD?`w%54y7|J za<)s1YN-G}#ylBES#A(|>axE`{IKm~U)F=|c$Gn32Pt=}<2YcVtsg zJ!#R$$}dfeN4(Q~&+E*bxizA{=S4%8d#oC~2Mx(HPUyMq6>8Ig#;<b7Y$c!o-hc(b_GXMQwvR4lpaHF{Q4Ve+hZ?b->xt9dODP1Z1YY0 z)p}kG7_&p~L2T!qE|$~k?xvS-$hv>_NB_XrFJql}C6+_8xbbjNs8I9As-kBR>t*K` zZblFRKI1effwl|>Y&jxV-*DRrEopReF#j(B! zv-5cG$Yl^lB{Ah96TFTMk78HZ%$J!<$%lr4=?%LdiDP8F(Y)- z1!SVf{(hIxF5Vn57*#dSzd$4ecphGvJPtBHA1`fgKep?&j~&mOB)9pI{4 z9GTO(-O=bZO$$4ZBJ+oNu=a-5M>b*(dMq1h-r{p!bC6Pw>{krW&W?4LS+m2&z5Yxj ze4rGy7afZVS`SVNdj$MrR0jHRv`ANq&%ku93MVrV&X7bzE3S*`*}jvY9$NCql^{Xg zBv7MT__YDEQi9v$&v-Mxg1&A$+@@{0m(~W4CE2%#;znE)n5nZd#QAG3q#^*#*l_g} z`ZBxfVBx*<^|+kYTwoB~-PuE1O5K*+(MX7x$liM8{(2P?;rGejd3(o?@51!?h$agp zWBxvab|7bdnHE}Y(q_bhVO;V04{JBHA{AQjr-BFhoY3gzH-_*J=_9QbjR{5vQ_Jcvd7W=LPDcL@=zA~+rdW{{FD^XN_JRTPsuuZ| zv7r``*NCsCgQ3mGFIc{}4ZA3z-eBiOw=F1rKA9$HqgH31$(e&7((tsK$95mu(jYrG zB)uT(GB0d}{dHXB^VhgAdu(L9IuL~g6vU( zMtkmZ8)b?IqMzR@jOLvja-VTg{IgVaobahkT_+qh0Js8`5FLksEhF3=(*X|Z8Alin z@6fV$-`E`|Y;M1!FM=jA5X~~iAUUc(vXCZF)19Cl<9CmviDllsN(^`0r{VegL3si9 z$3HCSFB^CYBO}6pgr7#5hOb!N+FYG)0%bLgnUf}!d+#_7nYXQQF=#&4$B9sZu-d$9hu9`e;_0K>AgI0nke01MMtm>PM zks)fc?Ut~qr!}hdNM$v>-CXLDlt9g{e2ovWZn1Id~ zByeZv`#lI3g)kv~1{8jBD`~G&;a7lj)ZtJHHJ~{Xki0SRuwKDc|E*utzTT`tP-a=O zuyG(@Od*A5#wF)_4!7yOIDFHN@ElCg208Yt>1k7NPt^A#Zqd1szC&VO+;J{n)Hkpa zh%uCWx!?u<4=>V9(ESPqMbRMCObayp))7b(mjh0Wu$AU5^ug`TVt@mIz_h9Gi?sgd4#lq0y3y;fPQh32Xe#g!Lb9+=6G>v!Xd$V1t?9v>}B-;5G!m=02= z&0UUm_F{wh>Nj4dr%1XijvGY5CGS$*c*YN%EIZ~nhu1U5c{ESe zu*Ez~UxSvnT&g&T?jIN$_*?S+bksL^xhdB4F$K;3`e~nYq>7ukyY1l55hM$-K9^1# z$_+0&X{+?#A-lGf9(F{hy5vIod8RY@Jp>45Ff+1{>YCVBHn#Qy_V^mN)M`xB%aQqUQUU{eY-$_%=qXvo|6898z31%# zL?t9olO1CMKpFLCg;lAu0in^HiiU0-a~EZ@gNEZq;^h!BGR@Kwr`LK9wQ@c|-`r7s zT(S&k=cqo6k-cUGC$dQ;g8r6p%kDKiuHDLstW-$bPM;xm44}k1X#$cUzfi>S{_tv6 zxtM>}WTtym?%6&$8QVm&qm0Y6HmQTW<$|q?ZaQ8{+J2w-HqHZ!IfQtp+-#|1qPE~4 z%7Msb9m4s?_s@7nm|DY(K<5iAqHpZT5kfOXr(kt9< zkPb)4Uyko2n}rH~A^abxU!1qlln^`->gN#ey!5=1%kz@Rs$E*wWEL8x=J~*~F{D44 zDxx5x_3S&bYHDXQ+3waA=HS_1QgB~dl1hPaAUf8Q)IzP;p@6Cc=&PF1rnk0&GD*Txfer(KZl-NQ~9fa1E| zsp9ik-pjZELIiM+uL1bDr)))dj-K+j)$7lEA4YPaDj2KCmrr(3U3s*Vbn?FH zyyC^JF$h%z=uar&LjZewL}etp+?$gR52qR{0q6YZbbU)(|ycH9JmQ zP`t)|on#}|7N91nh`L0p`NUY!jP)ud$B=5t~VR70jM&rI~%ccq8=hr|3 zS-BR!?AdRDo`!H$9$O&nCCQ?T3wI{xVjDGMo>7g8&GLU&NmMR)Xeo1&PDQ5eJK$Dl zFZb+Ew5`=Q-?v7t*Ud85-=eq+KXIqDT=!1JNaYDJXH_Bm_A2R*O0(-8OK;UJcc#CD ziBi7>hP5tzh!ByY@P#dtn%rgDyu+*|j_}+;R#6v=rcDB%^<`0<_3al)14Q6#!R)WBAe#tI8afos56KpnT4B9*Vv~T- zQks6qSi9RM2hXFZT@MLxItVzCl349$ajkd+%npfEp1nJxxPlpB7{}f) zhG_!}km=1w-z`kN%k21FmKGmGy_tMjEW)u-|19x3nqEE0m{Fr1l;hq$awshgcvauc z5!|`2zXb3ax7FiMcVXcyIH1abbOMe$r|-54x-Mz4gRdO2kB9BVt|cp{2*f@c`rx3kMheVqaaU34m>0Z7tp=)wXO+AbhgO##nU zeYT=UDsJZLb&+N95lGJhLUr%$ebVk1o-kil37@ejTb;Sr7-4B29$W{a1`R6OM18dhj)p)S!X&q4B$Snpj@dA|GP-8^*Q zeo%M_o*-xGhVYt-Jx3ErS8(w3obyEyJtc$IYXzdv8Z1Y*)TCR_6UqS<1KpJ{!qxuHjo^ETunnsQALNJPA9#c+m!-rDwoXRXZnP z{Pmp&&s?X%<5j8Pyj~8Bnfl9jmo3Ahj1+M57Ucw5%JK-9ZwmR$l03@GWqtPHbN)$% zPhXBZ2YAipWWn#sxElDu6JprWyO<76A^2Zntd+IX_V8SZZl3w(g>=vgOW<70lxFKn z+=)bCQ1o$xdprs(*Hko6xg6n;`OnYn0fe{TqQ@IqU7GXI1_TOS*k(1sk7S4-Mye~r3yXQRG>l7g!!T96L$Q@6e_ zH?c^(>*(k|v8)Y�rTbqHcM)Dm^zooSSlESN?^`cco%OTu)s$`b1C8E6qiIFpDT5 zUI>jaa{kU?w)s01ky4+1jh$~b+z1MaN@aSG7I(W(0X-Rx<)x0LMkx(bF$!Y-jmv4V zA`P2sF_+>R*0+Ogk6G1>Q4T35yWZj{@(+3*sI)HFU>e4rEVLf`MR*^p^XC>ito6ss zoj7o2f+lCSPgwc$EST#6s+Pj@J3Mc~}f%*65+YCj)WZ%4|uLs?T3c+ol3t%psi&+Ae0=>_?H z${gp|H?1L-X9JVL8`hv!^N1uz8OIzU^E|ZX)cvp+m8t?-8PPNZZoEb#7g-u9=N*lm~ABk-!)??W)_|wj_qGsvtxIz`LJR~S_ zXY$gu+*k)So+MJ_Lce5tt7kpOG^gz+Rv-M(R~kqz|55%<$}GJbbhshdZIb-Go?ps~ z_d7B2DtLOIEd;Y5uTRd;Ak2X*-{Cn_h9O9oWmRo`0~2&k_^m_laf+kW+7zIRnfm_u z`Pw}8Swq5i=h!fVG+}Fjk=ikP09D}XWYnvMkJtu-z3anxf64)(<`Hov@k%Z;IiP;> zPz8Ty5w!L#vz1Pz`<+uUxVxu#+tjNy{`jugA}GxfYXB`_!KK^AXav)xecp#4U&Uo` zHeBA$iO<|ryjp0{-Yo6c$J}4b92#pm#KDJPv*XI2YPq&$m|4l?`Rljm&P{h1*XRFO zPK1FnBhd6E8JS6$0WggL=xEba51Eh}pDHjs_+vnJZA-_S<3L}Xd{VKt54T!-KN{Ac zb}&k!FW_|BEOqNBLls%fFu8IUp|Do0`W{WErb!wKo0-S=Tfv52s`^B;mzdWsi78D{9{ZUs>24E+P?BWqy z7G!Cb7YC9RX+m#dj4Jam*_#EvZVjP%G~cGmlHP1kM`q69U&o)$pMwR$`hEnx3;!nu zx*Ck*MBH%3|jlVMc48fA79S- zUcpU=5cc>n-%BR;J8vAkxWd;ZC;tS1JQG>R*JhtoRO;)vD58h(G2J z!5FGfGa%5f#YeWww)PL6BVQ7><&{R)@D5Cj!mnPSqY^Ku&uJ9?ZuJ5<)3mJWo_6;t z&s2V8Zu8aj>|s7O*V#>`cC}`U%}P@=sqGC2Zw_X|pPJIMJ*|3sHZcKoZiq*M)s(fj_B*T1hLb>J~ z`ZMP++s~JmGOKY_sjQ9N2Yjba1>EsT7R2(DOV?A9$Jt?O4qlvMem3ZEm9(m_wx8L> z{^4Z>6>AC%kN)K%7;>$OQ^eY;_>&ALN$@F?0@tBHy$@*iENzN#;(%SoE7xdK?)5+z ziu~fEWe?6KFx!5atr%rtvc6)cV!Cfiu?;gl&ToWP60_}_hgG#5hS6^xU*2Z2^}L_wdg&e{l7GBZw(*m*g;?@lP3<{6EPa`#;I$Yq_@;FWPCS*Ew*&^>1IESOo~K z9x}O$ZkO*=9;3T*&MIo^B0Gk8|Ks+T*t`ElJXHO^i;eh~;L5t)e`8hpOWq9lZ^?zIgjT E0GIWpBLDyZ literal 0 HcmV?d00001 From 0668fea3b75ad157e618259375b17c341c4de7c2 Mon Sep 17 00:00:00 2001 From: Ankit Matth Date: Mon, 23 Oct 2023 17:01:41 +0530 Subject: [PATCH 12/93] Revamp Icon Effects --- frontend/src/assets/checkmark.svg | 4 +- .../src/conversation/ConversationBubble.tsx | 129 ++++++++++++++---- frontend/tailwind.config.cjs | 3 + 3 files changed, 103 insertions(+), 33 deletions(-) diff --git a/frontend/src/assets/checkmark.svg b/frontend/src/assets/checkmark.svg index 9ed02cbd..499000e8 100644 --- a/frontend/src/assets/checkmark.svg +++ b/frontend/src/assets/checkmark.svg @@ -1,3 +1 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/conversation/ConversationBubble.tsx b/frontend/src/conversation/ConversationBubble.tsx index 37b93f2e..dc02447c 100644 --- a/frontend/src/conversation/ConversationBubble.tsx +++ b/frontend/src/conversation/ConversationBubble.tsx @@ -37,8 +37,13 @@ const ConversationBubble = forwardRef< // Reset copied to false after a few seconds setTimeout(() => { setCopied(false); - }, 2000); + }, 3000); }; + const [isCopyHovered, setIsCopyHovered] = useState(false); + const [isLikeHovered, setIsLikeHovered] = useState(false); + const [isDislikeHovered, setIsDislikeHovered] = useState(false); + const [isLikeClicked, setIsLikeClicked] = useState(false); + const [isDislikeClicked, setIsDislikeClicked] = useState(false); let bubble; @@ -55,7 +60,10 @@ const ConversationBubble = forwardRef< ); } else { bubble = ( -
+
- {copied ? ( - - ) : ( - { - handleCopyClick(message); +
+
- )} + > + {copied ? ( + setIsCopyHovered(true)} + onMouseLeave={() => setIsCopyHovered(false)} + /> + ) : ( + { + handleCopyClick(message); + }} + onMouseEnter={() => setIsCopyHovered(true)} + onMouseLeave={() => setIsCopyHovered(false)} + > + )} +
+
- handleFeedback?.('LIKE')} - > +
+
+ { + handleFeedback?.('LIKE'); + setIsLikeClicked(true); + setIsDislikeClicked(false); + }} + onMouseEnter={() => setIsLikeHovered(true)} + onMouseLeave={() => setIsLikeHovered(false)} + > +
+
- handleFeedback?.('DISLIKE')} - > +
+
+ { + handleFeedback?.('DISLIKE'); + setIsDislikeClicked(true); + setIsLikeClicked(false); + }} + onMouseEnter={() => setIsDislikeHovered(true)} + onMouseLeave={() => setIsDislikeHovered(false)} + > +
+
diff --git a/frontend/tailwind.config.cjs b/frontend/tailwind.config.cjs index b76b0222..437f4a09 100644 --- a/frontend/tailwind.config.cjs +++ b/frontend/tailwind.config.cjs @@ -28,6 +28,9 @@ module.exports = { 'purple-30': '#7D54D1', 'blue-4000': 'rgba(0, 125, 255, 0.36)', 'blue-5000': 'rgba(0, 125, 255)', + 'green-2000': '#0FFF50', + 'light-gray': '#edeef0', + 'white-3000': '#ffffff', }, }, }, From 9b044815de92951f9c80844b1b27c8e578d2ecc8 Mon Sep 17 00:00:00 2001 From: Ankita Sikdar <115947852+AnkitaSikdar005@users.noreply.github.com> Date: Mon, 23 Oct 2023 17:07:25 +0530 Subject: [PATCH 13/93] Update CODE_OF_CONDUCT.md --- CODE_OF_CONDUCT.md | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 512b6c23..3daec1f5 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -2,8 +2,8 @@ ## Our Pledge -We as members, contributors, and leaders, pledge to make participation in our -community a harassment-free experience for everyone, regardless of age, body +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 @@ -72,20 +72,18 @@ Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction - -**Community Impact**: Use of inappropriate language or other behavior deemed +- **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community space. -**Consequence**: A private, written warning from community leaders, providing +- **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning - -**Community Impact**: A violation through a single incident or series +- **Community Impact**: A violation through a single incident or series of actions. -**Consequence**: A warning with consequences for continued behavior. No +- **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels @@ -93,23 +91,21 @@ like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban - -**Community Impact**: A serious violation of community standards, including +- **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. -**Consequence**: A temporary ban from any sort of interaction or public +- **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban - -**Community Impact**: Demonstrating a pattern of violation of community +- **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression towards or disparagement of classes of individuals. -**Consequence**: A permanent ban from any sort of public interaction within +- **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution From 9e632aa0bdfbf80d78b03c4fe9f12a3add28e9ee Mon Sep 17 00:00:00 2001 From: KRISH SONI <67964054+krishvsoni@users.noreply.github.com> Date: Mon, 23 Oct 2023 22:01:07 +0530 Subject: [PATCH 14/93] Update README.md --- README.md | 110 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 72 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index b570dfc7..3a6448dd 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@

- DocsGPT is a cutting-edge open-source solution that streamlines the process of finding information in project documentation. With its integration of the powerful GPT models, developers can easily ask questions about a project and receive accurate answers. + DocsGPT is a cutting-edge open-source solution that streamlines the process of finding information in the project documentation. With its integration of the powerful GPT models, developers can easily ask questions about a project and receive accurate answers. -Say goodbye to time-consuming manual searches, and let DocsGPT 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. +Say goodbye to time-consuming manual searches, and let DocsGPT 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.

@@ -21,64 +21,62 @@ Say goodbye to time-consuming manual searches, and let DocsGPT
-### Production Support / Help for companies: +### Production Support / Help for companies: We're eager to provide personalized assistance when deploying your DocsGPT to a live environment. -- [Schedule Demo πŸ‘‹](https://cal.com/arc53/docsgpt-demo-b2b?date=2023-10-04&month=2023-10) + +- [Book Demo πŸ‘‹](https://airtable.com/appdeaL0F1qV8Bl2C/shrrJF1Ll7btCJRbP) - [Send Email βœ‰οΈ](mailto:contact@arc53.com?subject=DocsGPT%20support%2Fsolutions) - + ### [πŸŽ‰ Join the Hacktoberfest with DocsGPT and Earn a Free T-shirt! πŸŽ‰](https://github.com/arc53/DocsGPT/blob/main/HACKTOBERFEST.md) ![video-example-of-docs-gpt](https://d3dg1063dc54p9.cloudfront.net/videos/demov3.gif) - ## 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-falcon](https://huggingface.co/Arc53/docsgpt-7b-falcon) | Falcon-7b | 1xA10G gpu | -| [Docsgpt-14b](https://huggingface.co/Arc53/docsgpt-14b) | llama-2-14b | 2xA10 gpu's | -| [Docsgpt-40b-falcon](https://huggingface.co/Arc53/docsgpt-40b-falcon) | falcon-40b | 8xA10G gpu's | - +| Name | Base Model | Requirements (or similar) | +| --------------------------------------------------------------------- | ----------- | ------------------------- | +| [Docsgpt-7b-falcon](https://huggingface.co/Arc53/docsgpt-7b-falcon) | Falcon-7b | 1xA10G gpu | +| [Docsgpt-14b](https://huggingface.co/Arc53/docsgpt-14b) | llama-2-14b | 2xA10 gpu's | +| [Docsgpt-40b-falcon](https://huggingface.co/Arc53/docsgpt-40b-falcon) | falcon-40b | 8xA10G gpu's | If you don't have enough resources to run it, you can use bitsnbytes to quantize. - ## Features ![Group 9](https://user-images.githubusercontent.com/17906039/220427472-2644cff4-7666-46a5-819f-fc4a521f63c7.png) - ## Useful links - [Live preview](https://docsgpt.arc53.com/) - - [Join our Discord](https://discord.gg/n5BX8dh8rU) - - [Guides](https://docs.docsgpt.co.uk/) - [Interested in contributing?](https://github.com/arc53/DocsGPT/blob/main/CONTRIBUTING.md) +- πŸ”πŸ”₯ [Live preview](https://docsgpt.arc53.com/) - [How to use any other documentation](https://docs.docsgpt.co.uk/Guides/How-to-train-on-other-documentation) +- πŸ’¬πŸŽ‰[Join our Discord](https://discord.gg/n5BX8dh8rU) - [How to host it locally (so all data will stay on-premises)](https://docs.docsgpt.co.uk/Guides/How-to-use-different-LLM) +- πŸ“šπŸ˜Ž [Guides](https://docs.docsgpt.co.uk/) +- πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» [Interested in contributing?](https://github.com/arc53/DocsGPT/blob/main/CONTRIBUTING.md) + +- πŸ—‚οΈπŸš€ [How to use any other documentation](https://docs.docsgpt.co.uk/Guides/How-to-train-on-other-documentation) + +- πŸ πŸ” [How to host it locally (so all data will stay on-premises)](https://docs.docsgpt.co.uk/Guides/How-to-use-different-LLM) ## Project structure + - Application - Flask app (main application). - Extensions - Chrome extension. -- Scripts - Script that creates similarity search index and stores for other libraries. +- Scripts - Script that creates similarity search index for other libraries. - Frontend - Frontend uses Vite and React. ## QuickStart -Note: Make sure you have [Docker](https://www.docker.com/) installed +Note: Make sure you have [Docker](https://docs.docker.com/) installed On Mac OS or Linux, write: @@ -89,15 +87,17 @@ It will install all the dependencies and allow you to download the local model o Otherwise, refer to this Guide: 1. Download and open this repository with `git clone https://github.com/arc53/DocsGPT.git` -2. Create a `.env` file in your root directory and set the env variable `OPENAI_API_KEY` with your OpenAI API key and `VITE_API_STREAMING` to true or false, depending on if you want streaming answers or not. +2. Create a `.env` file in your root directory and set the env variable `OPENAI_API_KEY` with your [OpenAI API key](https://platform.openai.com/account/api-keys) and `VITE_API_STREAMING` to true or false, depending on whether you want streaming answers or not. It should look like this inside: - + ``` API_KEY=Yourkey VITE_API_STREAMING=true ``` - See optional environment variables in the `/.env-template` and `/application/.env_sample` files. -3. Run `./run-with-docker-compose.sh`. + + 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. + +3. Run [./run-with-docker-compose.sh](https://github.com/arc53/DocsGPT/blob/main/run-with-docker-compose.sh). 4. Navigate to http://localhost:5173/. To stop, just run `Ctrl + C`. @@ -105,10 +105,12 @@ To stop, just run `Ctrl + C`. ## Development environments ### Spin up mongo and redis -For development, only two containers are used from `docker-compose.yaml` (by deleting all services except for Redis and Mongo). + +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 @@ -119,35 +121,67 @@ docker compose -f docker-compose-dev.yaml up -d Make sure you have Python 3.10 or 3.11 installed. 1. Export required environment variables or prepare a `.env` file in the `/application` folder: - - Copy `.env_sample` and create `.env` with your OpenAI API token for the `API_KEY` and `EMBEDDINGS_KEY` fields. + - Copy [.env_sample](https://github.com/arc53/DocsGPT/blob/main/application/.env_sample) and create `.env` with your OpenAI API token for the `API_KEY` and `EMBEDDINGS_KEY` fields. (check out [`application/core/settings.py`](application/core/settings.py) if you want to see more config options.) 2. (optional) Create a Python virtual environment: + You can follow the [Python official documentation](https://docs.python.org/3/tutorial/venv.html) for virtual environments. + +a) On Mac OS and Linux + ```commandline python -m venv venv . venv/bin/activate ``` -3. Change to the `application/` subdir and install dependencies for the backend: + +b) On Windows + ```commandline -pip install -r application/requirements.txt +python -m venv venv + venv/Scripts/activate ``` + +3. Change to the `application/` subdir by the command `cd application/` and install dependencies for the backend: + +```commandline +pip install -r requirements.txt +``` + 4. Run the app using `flask run --host=0.0.0.0 --port=7091`. 5. Start worker with `celery -A application.app.celery worker -l INFO`. -### Start frontend +### Start frontend Make sure you have Node version 16 or higher. -1. Navigate to the `/frontend` folder. -2. Install dependencies by running `npm install`. -3. Run the app using `npm run dev`. +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`. + +## Contributing + +Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) file for information about how to get involved. We welcome issues, questions, and pull requests. + +## 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 - - + + Contributors +## License + +The source code license is [MIT](https://opensource.org/license/mit/), as described in the [LICENSE](LICENSE) file. Built with [πŸ¦œοΈπŸ”— LangChain](https://github.com/hwchase17/langchain) From 130a6b67bd6113513c964437de841f33037db14d Mon Sep 17 00:00:00 2001 From: KRISH SONI <67964054+krishvsoni@users.noreply.github.com> Date: Mon, 23 Oct 2023 22:16:19 +0530 Subject: [PATCH 15/93] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3a6448dd..9aaad49a 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ If you don't have enough resources to run it, you can use bitsnbytes to quantize ## QuickStart -Note: Make sure you have [Docker](https://docs.docker.com/) installed +Note: Make sure you have [Docker](https://docs.docker.com/engine/install/) installed On Mac OS or Linux, write: From 8934b9ab5c26a5e51c51cfd94925fbac41171942 Mon Sep 17 00:00:00 2001 From: Gourav2609 Date: Mon, 23 Oct 2023 23:15:07 +0530 Subject: [PATCH 16/93] Fixed overflow --- frontend/src/Navigation.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/Navigation.tsx b/frontend/src/Navigation.tsx index c6c35af8..aed0965e 100644 --- a/frontend/src/Navigation.tsx +++ b/frontend/src/Navigation.tsx @@ -172,7 +172,7 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) { <> {!navOpen && (
-

+

This is a chatbot that uses the GPT-3, Faiss and LangChain to answer questions.

From 678fd28f1da7169a5b9bc10e3e5fc7674957a8e3 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 26 Oct 2023 22:53:57 +0100 Subject: [PATCH 44/93] Update Railway-Deploying.md --- docs/pages/Deploying/Railway-Deploying.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/Deploying/Railway-Deploying.md b/docs/pages/Deploying/Railway-Deploying.md index 8f8fe0fd..c326a6bd 100644 --- a/docs/pages/Deploying/Railway-Deploying.md +++ b/docs/pages/Deploying/Railway-Deploying.md @@ -224,7 +224,7 @@ b. Click on Deploy now . -![Three Tabs will be there](Railway-selection.png) +![Three Tabs will be there](/Railway-selection.png) From 08a7e666b224e2a959662355eddb14ffda208bbe Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 27 Oct 2023 00:52:15 +0100 Subject: [PATCH 45/93] Update ConversationTile.tsx --- .../src/conversation/ConversationTile.tsx | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/frontend/src/conversation/ConversationTile.tsx b/frontend/src/conversation/ConversationTile.tsx index 1b5dc42c..3ee67943 100644 --- a/frontend/src/conversation/ConversationTile.tsx +++ b/frontend/src/conversation/ConversationTile.tsx @@ -7,7 +7,6 @@ import CheckMark from '../assets/checkmark.svg'; import Trash from '../assets/trash.svg'; import { selectConversationId } from '../preferences/preferenceSlice'; -import { useOutsideAlerter } from '../hooks'; interface ConversationProps { name: string; @@ -31,15 +30,15 @@ export default function ConversationTile({ const [isEdit, setIsEdit] = useState(false); const [conversationName, setConversationsName] = useState(''); - useOutsideAlerter( - tileRef, - () => - handleSaveConversation({ - id: conversationId || conversation.id, - name: conversationName, - }), - [conversationName], - ); + // useOutsideAlerter( + // tileRef, + // () => + // handleSaveConversation({ + // id: conversationId || conversation.id, + // name: conversationName, + // }), + // [conversationName], + // ); useEffect(() => { setConversationsName(conversation.name); From 1dc16e900a3ba911e7c1231b5587e6af89edbf2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michelle=20=22MishManners=C2=AE=E2=84=A2=22=20Mannering?= <36594527+mishmanners@users.noreply.github.com> Date: Fri, 27 Oct 2023 11:22:47 +1100 Subject: [PATCH 46/93] Make README accessible Add accessibility features to README file based on the top tips from GitHub: https://github.blog/2023-10-26-5-tips-for-making-your-github-profile-page-accessible/ --- README.md | 185 +++++++++++++----------------------------------------- 1 file changed, 42 insertions(+), 143 deletions(-) diff --git a/README.md b/README.md index c9a6124f..f72ca91d 100644 --- a/README.md +++ b/README.md @@ -1,187 +1,86 @@

- DocsGPT πŸ¦– + DocsGPT πŸ¦–

- Open-Source Documentation Assistant -

-

- DocsGPT is a cutting-edge open-source solution that streamlines the process of finding information in the project documentation. With its integration of the powerful GPT models, developers can easily ask questions about a project and receive accurate answers. - -Say goodbye to time-consuming manual searches, and let DocsGPT 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. -

+ @@ -14,27 +14,27 @@ Say goodbye to time-consuming manual searches, and let - - ![example1](https://img.shields.io/github/stars/arc53/docsgpt?style=social) - ![example2](https://img.shields.io/github/forks/arc53/docsgpt?style=social) - ![example3](https://img.shields.io/github/license/arc53/docsgpt) - ![example3](https://img.shields.io/discord/1070046503302877216) - + + ![link to main GitHub showing Stars number](https://img.shields.io/github/stars/arc53/docsgpt?style=social) + ![link to main GitHub showing Forks number](https://img.shields.io/github/forks/arc53/docsgpt?style=social) + ![link to license file](https://img.shields.io/github/license/arc53/docsgpt) + ![link to discord](https://img.shields.io/discord/1070046503302877216) + +
+ ### Production Support / Help for companies: + We're eager to provide personalized assistance when deploying your DocsGPT to a live environment. -- [Book Demo πŸ‘‹](https://airtable.com/appdeaL0F1qV8Bl2C/shrrJF1Ll7btCJRbP) -- [Send Email βœ‰οΈ](mailto:contact@arc53.com?subject=DocsGPT%20support%2Fsolutions) -### [πŸŽ‰ Join the Hacktoberfest with DocsGPT and Earn a Free T-shirt! πŸŽ‰](https://github.com/arc53/DocsGPT/blob/main/HACKTOBERFEST.md) +- [Book Demo :wave:](https://airtable.com/appdeaL0F1qV8Bl2C/shrrJF1Ll7btCJRbP) +- [Send Email :email:](mailto:contact@arc53.com?subject=DocsGPT%20support%2Fsolutions) + + +### [:tada: Join the Hacktoberfest with DocsGPT and Earn a Free T-shirt! :tada:](https://github.com/arc53/DocsGPT/blob/main/HACKTOBERFEST.md) + ![video-example-of-docs-gpt](https://d3dg1063dc54p9.cloudfront.net/videos/demov3.gif) + ## 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! + +You can find our roadmap [on our GitHub project board](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-falcon](https://huggingface.co/Arc53/docsgpt-7b-falcon) | Falcon-7b | 1xA10G gpu | -| [Docsgpt-14b](https://huggingface.co/Arc53/docsgpt-14b) | llama-2-14b | 2xA10 gpu's | -| [Docsgpt-40b-falcon](https://huggingface.co/Arc53/docsgpt-40b-falcon) | falcon-40b | 8xA10G gpu's | -If you don't have enough resources to run it, you can use bitsnbytes to quantize. + + @@ -48,21 +48,21 @@ If you don't have enough resources to run it, you can use bitsnbytes to quantize + ## Features -![Group 9](https://user-images.githubusercontent.com/17906039/220427472-2644cff4-7666-46a5-819f-fc4a521f63c7.png) + +![Main features of DocsGPT showcasing six main features](https://user-images.githubusercontent.com/17906039/220427472-2644cff4-7666-46a5-819f-fc4a521f63c7.png) + ## Useful links -- πŸ”πŸ”₯ [Live preview](https://docsgpt.arc53.com/) -- πŸ’¬πŸŽ‰[Join our Discord](https://discord.gg/n5BX8dh8rU) +- :mag: :fire: [Live preview](https://docsgpt.arc53.com/) + + +- :speech_balloon: :tada: [Join our Discord](https://discord.gg/n5BX8dh8rU) + + +- :books: :sunglasses: [Guides](https://docs.docsgpt.co.uk/) -- πŸ“šπŸ˜Ž [Guides](https://docs.docsgpt.co.uk/) - πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» [Interested in contributing?](https://github.com/arc53/DocsGPT/blob/main/CONTRIBUTING.md) -- πŸ—‚οΈπŸš€ [How to use any other documentation](https://docs.docsgpt.co.uk/Guides/How-to-train-on-other-documentation) -- πŸ πŸ” [How to host it locally (so all data will stay on-premises)](https://docs.docsgpt.co.uk/Guides/How-to-use-different-LLM) +- :file_folder: :rocket: [How to use any other documentation](https://docs.docsgpt.co.uk/Guides/How-to-train-on-other-documentation) + + +- :house: :closed_lock_with_key: [How to host it locally (so all data will stay on-premises)](https://docs.docsgpt.co.uk/Guides/How-to-use-different-LLM) + ## Project structure -- Application - Flask app (main application). -- Extensions - Chrome extension. -- Scripts - Script that creates similarity search index for other libraries. + @@ -184,4 +184,4 @@ We as members, contributors, and leaders, pledge to make participation in our co -- Frontend - Frontend uses Vite and React. - -## QuickStart - -Note: Make sure you have [Docker](https://docs.docker.com/engine/install/) installed - -On Mac OS or Linux, write: - -`./setup.sh` - -It will install all the dependencies and allow you to download the local model or use OpenAI. - -Otherwise, refer to this Guide: - -1. Download and open this repository with `git clone https://github.com/arc53/DocsGPT.git` -2. Create a `.env` file in your root directory and set the env variable `API_KEY` with your [OpenAI API key](https://platform.openai.com/account/api-keys) and `VITE_API_STREAMING` to true or false, depending on whether you want streaming answers or not. - It should look like this inside: - - ``` - API_KEY=Yourkey - VITE_API_STREAMING=true - ``` - - 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. - -3. Run [./run-with-docker-compose.sh](https://github.com/arc53/DocsGPT/blob/main/run-with-docker-compose.sh). -4. Navigate to http://localhost:5173/. - -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 - -Make sure you have Python 3.10 or 3.11 installed. - -1. Export required environment variables or prepare a `.env` file in the `/application` folder: - - Copy [.env_sample](https://github.com/arc53/DocsGPT/blob/main/application/.env_sample) and create `.env` with your OpenAI API token for the `API_KEY` and `EMBEDDINGS_KEY` fields. - -(check out [`application/core/settings.py`](application/core/settings.py) if you want to see more config options.) - -2. (optional) Create a Python virtual environment: - You can follow the [Python official documentation](https://docs.python.org/3/tutorial/venv.html) for virtual environments. - -a) On Mac OS and Linux - -```commandline -python -m venv venv -. venv/bin/activate -``` - -b) On Windows - -```commandline -python -m venv venv - venv/Scripts/activate -``` - -3. Change to the `application/` subdir by the command `cd application/` and install dependencies for the backend: - -```commandline -pip install -r requirements.txt -``` - -4. Run the app using `flask run --host=0.0.0.0 --port=7091`. -5. Start worker with `celery -A application.app.celery worker -l INFO`. - -### Start frontend - -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`. - -## Contributing - -Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) file for information about how to get involved. We welcome issues, questions, and pull requests. - -## 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 - - - Contributors - - -## License The source code license is [MIT](https://opensource.org/license/mit/), as described in the [LICENSE](LICENSE) file. -Built with [πŸ¦œοΈπŸ”— LangChain](https://github.com/hwchase17/langchain) + +Built with [:bird: :link: LangChain](https://github.com/hwchase17/langchain) From 54a3b9900ef287cff69283da6b1f2c6ec82375e0 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 27 Oct 2023 01:52:09 +0100 Subject: [PATCH 47/93] fix error msg --- frontend/src/conversation/ConversationBubble.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/conversation/ConversationBubble.tsx b/frontend/src/conversation/ConversationBubble.tsx index 2a9a57ba..b429e2ee 100644 --- a/frontend/src/conversation/ConversationBubble.tsx +++ b/frontend/src/conversation/ConversationBubble.tsx @@ -69,7 +69,7 @@ const ConversationBubble = forwardRef<
@@ -208,7 +208,7 @@ const ConversationBubble = forwardRef< > Date: Fri, 27 Oct 2023 02:22:04 +0100 Subject: [PATCH 48/93] Update Navigation.tsx --- frontend/src/Navigation.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/Navigation.tsx b/frontend/src/Navigation.tsx index 388ea19b..f3d810d7 100644 --- a/frontend/src/Navigation.tsx +++ b/frontend/src/Navigation.tsx @@ -243,7 +243,7 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) {
setIsDocsListOpen(!isDocsListOpen)} > {selectedDocs && ( From 5f03f905827ba8cda7ce7b95eaff8e75367d54ec Mon Sep 17 00:00:00 2001 From: Akash Bag <110753356+akash0708@users.noreply.github.com> Date: Fri, 27 Oct 2023 16:35:59 +0530 Subject: [PATCH 49/93] fix: fixed styling for firefox --- frontend/src/Hero.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/Hero.tsx b/frontend/src/Hero.tsx index 24fec7c2..e411ab8d 100644 --- a/frontend/src/Hero.tsx +++ b/frontend/src/Hero.tsx @@ -18,7 +18,7 @@ export default function Hero({ className = '' }: { className?: string }) { rest!

-
+
Date: Sat, 28 Oct 2023 11:01:50 +0530 Subject: [PATCH 50/93] fix: fixed bug due to change in number of lines of text --- frontend/src/Hero.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/Hero.tsx b/frontend/src/Hero.tsx index e411ab8d..4df9d109 100644 --- a/frontend/src/Hero.tsx +++ b/frontend/src/Hero.tsx @@ -18,7 +18,7 @@ export default function Hero({ className = '' }: { className?: string }) { rest!

-
+
-
+
lock

Secure Data Storage

@@ -47,7 +47,7 @@ export default function Hero({ className = '' }: { className?: string }) {

-
+
Date: Sat, 28 Oct 2023 14:45:57 +0000 Subject: [PATCH 51/93] Bump urllib3 from 1.26.17 to 1.26.18 in /application Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.17 to 1.26.18. - [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/1.26.17...1.26.18) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- application/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/requirements.txt b/application/requirements.txt index 693e6283..5e0184fb 100644 --- a/application/requirements.txt +++ b/application/requirements.txt @@ -101,7 +101,7 @@ transformers==4.30.0 typer==0.7.0 typing-inspect==0.8.0 typing_extensions==4.5.0 -urllib3==1.26.17 +urllib3==1.26.18 vine==5.0.0 wcwidth==0.2.6 yarl==1.8.2 From fbfb8a3b41abba8e91e7ba01cd1f810a8dc315e1 Mon Sep 17 00:00:00 2001 From: PRINCE PAL <113759522+theprince29@users.noreply.github.com> Date: Sat, 28 Oct 2023 21:17:25 +0530 Subject: [PATCH 52/93] Update CONTRIBUTING.md Under the workflow heading I found that in point 2 & 3 shell was missing, that I rectified and corrected it --- CONTRIBUTING.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2e24b43f..3b713155 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -65,16 +65,16 @@ Here's a step-by-step guide on how to contribute to DocsGPT: 2. **Clone the Forked Repository:** - Clone the repository using: - ''' shell + ``` shell git clone https://github.com//DocsGPT.git - ''' + ``` 3. **Keep your Fork in Sync:** - Before you make any changes, make sure that your fork is in sync to avoid merge conflicts using: - '''shell - git remote add upstream https://github.com/arc53/DocsGPT.git - git pull upstream master - ''' + ```shell + git remote add upstream https://github.com/arc53/DocsGPT.git + git pull upstream master + ``` 4. **Create and Switch to a New Branch:** - Create a new branch for your contribution using: From 04b40012774a484313f0d8ced997caa4140cf804 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 28 Oct 2023 19:51:12 +0100 Subject: [PATCH 53/93] anthropic working --- application/api/answer/routes.py | 2 ++ application/llm/anthropic.py | 40 ++++++++++++++++++++++ application/llm/llm_creator.py | 4 ++- application/requirements.txt | 1 + docker-compose.yaml | 2 ++ tests/llm/test_anthropic.py | 57 ++++++++++++++++++++++++++++++++ 6 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 application/llm/anthropic.py create mode 100644 tests/llm/test_anthropic.py diff --git a/application/api/answer/routes.py b/application/api/answer/routes.py index b694c4aa..a9327255 100644 --- a/application/api/answer/routes.py +++ b/application/api/answer/routes.py @@ -29,6 +29,8 @@ answer = Blueprint('answer', __name__) if settings.LLM_NAME == "gpt4": gpt_model = 'gpt-4' +elif settings.LLM_NAME == "anthropic": + gpt_model = 'claude-2' else: gpt_model = 'gpt-3.5-turbo' diff --git a/application/llm/anthropic.py b/application/llm/anthropic.py new file mode 100644 index 00000000..a64d71e9 --- /dev/null +++ b/application/llm/anthropic.py @@ -0,0 +1,40 @@ +from application.llm.base import BaseLLM +from application.core.settings import settings + +class AnthropicLLM(BaseLLM): + + def __init__(self, api_key=None): + from anthropic import Anthropic, HUMAN_PROMPT, AI_PROMPT + self.api_key = api_key or settings.ANTHROPIC_API_KEY # If not provided, use a default from settings + self.anthropic = Anthropic(api_key=self.api_key) + self.HUMAN_PROMPT = HUMAN_PROMPT + self.AI_PROMPT = AI_PROMPT + + def gen(self, model, messages, engine=None, max_tokens=300, stream=False, **kwargs): + context = messages[0]['content'] + user_question = messages[-1]['content'] + prompt = f"### Context \n {context} \n ### Question \n {user_question}" + if stream: + return self.gen_stream(model, prompt, max_tokens, **kwargs) + + completion = self.anthropic.completions.create( + model=model, + max_tokens_to_sample=max_tokens, + stream=stream, + prompt=f"{self.HUMAN_PROMPT} {prompt}{self.AI_PROMPT}", + ) + return completion.completion + + def gen_stream(self, model, messages, engine=None, max_tokens=300, **kwargs): + context = messages[0]['content'] + user_question = messages[-1]['content'] + prompt = f"### Context \n {context} \n ### Question \n {user_question}" + stream_response = self.anthropic.completions.create( + model=model, + prompt=f"{self.HUMAN_PROMPT} {prompt}{self.AI_PROMPT}", + max_tokens_to_sample=max_tokens, + stream=True, + ) + + for completion in stream_response: + yield completion.completion \ No newline at end of file diff --git a/application/llm/llm_creator.py b/application/llm/llm_creator.py index 6a60f1b6..bbc2c792 100644 --- a/application/llm/llm_creator.py +++ b/application/llm/llm_creator.py @@ -2,6 +2,7 @@ from application.llm.openai import OpenAILLM, AzureOpenAILLM from application.llm.sagemaker import SagemakerAPILLM from application.llm.huggingface import HuggingFaceLLM from application.llm.llama_cpp import LlamaCpp +from application.llm.anthropic import AnthropicLLM @@ -11,7 +12,8 @@ class LLMCreator: 'azure_openai': AzureOpenAILLM, 'sagemaker': SagemakerAPILLM, 'huggingface': HuggingFaceLLM, - 'llama.cpp': LlamaCpp + 'llama.cpp': LlamaCpp, + 'anthropic': AnthropicLLM } @classmethod diff --git a/application/requirements.txt b/application/requirements.txt index 693e6283..e2a2b2de 100644 --- a/application/requirements.txt +++ b/application/requirements.txt @@ -4,6 +4,7 @@ aiohttp-retry==2.8.3 aiosignal==1.3.1 aleph-alpha-client==2.16.1 amqp==5.1.1 +anthropic==0.5.0 async-timeout==4.0.2 attrs==22.2.0 billiard==3.6.4.0 diff --git a/docker-compose.yaml b/docker-compose.yaml index 84cc5681..7008b53d 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -16,6 +16,7 @@ services: environment: - API_KEY=$API_KEY - EMBEDDINGS_KEY=$API_KEY + - LLM_NAME=$LLM_NAME - CELERY_BROKER_URL=redis://redis:6379/0 - CELERY_RESULT_BACKEND=redis://redis:6379/1 - MONGO_URI=mongodb://mongo:27017/docsgpt @@ -35,6 +36,7 @@ services: environment: - API_KEY=$API_KEY - EMBEDDINGS_KEY=$API_KEY + - LLM_NAME=$LLM_NAME - CELERY_BROKER_URL=redis://redis:6379/0 - CELERY_RESULT_BACKEND=redis://redis:6379/1 - MONGO_URI=mongodb://mongo:27017/docsgpt diff --git a/tests/llm/test_anthropic.py b/tests/llm/test_anthropic.py new file mode 100644 index 00000000..ee4ba15f --- /dev/null +++ b/tests/llm/test_anthropic.py @@ -0,0 +1,57 @@ +import unittest +from unittest.mock import patch, Mock +from application.llm.anthropic import AnthropicLLM + +class TestAnthropicLLM(unittest.TestCase): + + def setUp(self): + self.api_key = "TEST_API_KEY" + self.llm = AnthropicLLM(api_key=self.api_key) + + @patch("application.llm.anthropic.settings") + def test_init_default_api_key(self, mock_settings): + mock_settings.ANTHROPIC_API_KEY = "DEFAULT_API_KEY" + llm = AnthropicLLM() + self.assertEqual(llm.api_key, "DEFAULT_API_KEY") + + def test_gen(self): + messages = [ + {"content": "context"}, + {"content": "question"} + ] + mock_response = Mock() + mock_response.completion = "test completion" + + with patch.object(self.llm.anthropic.completions, "create", return_value=mock_response) as mock_create: + response = self.llm.gen("test_model", messages) + self.assertEqual(response, "test completion") + + prompt_expected = "### Context \n context \n ### Question \n question" + mock_create.assert_called_with( + model="test_model", + max_tokens_to_sample=300, + stream=False, + prompt=f"{self.llm.HUMAN_PROMPT} {prompt_expected}{self.llm.AI_PROMPT}" + ) + + def test_gen_stream(self): + messages = [ + {"content": "context"}, + {"content": "question"} + ] + mock_responses = [Mock(completion="response_1"), Mock(completion="response_2")] + + with patch.object(self.llm.anthropic.completions, "create", return_value=iter(mock_responses)) as mock_create: + responses = list(self.llm.gen_stream("test_model", messages)) + self.assertListEqual(responses, ["response_1", "response_2"]) + + prompt_expected = "### Context \n context \n ### Question \n question" + mock_create.assert_called_with( + model="test_model", + prompt=f"{self.llm.HUMAN_PROMPT} {prompt_expected}{self.llm.AI_PROMPT}", + max_tokens_to_sample=300, + stream=True + ) + +if __name__ == "__main__": + unittest.main() From c14f79ebf7ba31a4de84d338767ed552a8513726 Mon Sep 17 00:00:00 2001 From: Lakshmi Narayanan Date: Sun, 29 Oct 2023 01:40:50 +0400 Subject: [PATCH 54/93] Add the new logo --- frontend/src/assets/cute_docsgpt3.svg | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 frontend/src/assets/cute_docsgpt3.svg diff --git a/frontend/src/assets/cute_docsgpt3.svg b/frontend/src/assets/cute_docsgpt3.svg new file mode 100644 index 00000000..53f7cac1 --- /dev/null +++ b/frontend/src/assets/cute_docsgpt3.svg @@ -0,0 +1,9 @@ + + + + + + + + + From 057ecc3ed9476992170ea1ebb3f72e2c9e586346 Mon Sep 17 00:00:00 2001 From: Lakshmi Narayanan Date: Sun, 29 Oct 2023 01:41:55 +0400 Subject: [PATCH 55/93] Update logo in Homepage and About page --- frontend/src/About.tsx | 3 ++- frontend/src/Hero.tsx | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/frontend/src/About.tsx b/frontend/src/About.tsx index 53a87bc8..4f388e37 100644 --- a/frontend/src/About.tsx +++ b/frontend/src/About.tsx @@ -1,5 +1,6 @@ //TODO - Add hyperlinks to text //TODO - Styling +import DocsGPT3 from './assets/cute_docsgpt3.svg'; export default function About() { return ( @@ -7,7 +8,7 @@ export default function About() {

About DocsGPT

-

πŸ¦–

+ DocsGPT

Find the information in your documentation through AI-powered diff --git a/frontend/src/Hero.tsx b/frontend/src/Hero.tsx index 34347c09..dd2f60a2 100644 --- a/frontend/src/Hero.tsx +++ b/frontend/src/Hero.tsx @@ -1,9 +1,11 @@ +import DocsGPT3 from './assets/cute_docsgpt3.svg'; + export default function Hero({ className = '' }: { className?: string }) { return (

DocsGPT

-

πŸ¦–

+ DocsGPT

Welcome to DocsGPT, your technical documentation assistant! From 754339214c0c923973fb6e55d56d35aaf6a1784a Mon Sep 17 00:00:00 2001 From: Lakshmi Narayanan Date: Sun, 29 Oct 2023 01:42:26 +0400 Subject: [PATCH 56/93] Update logo in conversation --- frontend/src/Avatar.tsx | 4 +++- frontend/src/conversation/ConversationBubble.tsx | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/frontend/src/Avatar.tsx b/frontend/src/Avatar.tsx index 04819e7e..ef733ff2 100644 --- a/frontend/src/Avatar.tsx +++ b/frontend/src/Avatar.tsx @@ -1,9 +1,11 @@ +import { ReactNode } from 'react'; + export default function Avatar({ avatar, size, className, }: { - avatar: string; + avatar: string | ReactNode; size?: 'SMALL' | 'MEDIUM' | 'LARGE'; className: string; }) { diff --git a/frontend/src/conversation/ConversationBubble.tsx b/frontend/src/conversation/ConversationBubble.tsx index b429e2ee..85b80286 100644 --- a/frontend/src/conversation/ConversationBubble.tsx +++ b/frontend/src/conversation/ConversationBubble.tsx @@ -11,6 +11,7 @@ import ReactMarkdown from 'react-markdown'; import copy from 'copy-to-clipboard'; import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; +import DocsGPT3 from '../assets/cute_docsgpt3.svg'; const DisableSourceFE = import.meta.env.VITE_DISABLE_SOURCE_FE || false; @@ -65,7 +66,10 @@ const ConversationBubble = forwardRef< className={`flex self-start ${className} group flex-col pr-20`} >

- + } + >
Date: Sun, 29 Oct 2023 01:43:09 +0400 Subject: [PATCH 57/93] Add expand icon --- frontend/src/assets/expand.svg | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 frontend/src/assets/expand.svg diff --git a/frontend/src/assets/expand.svg b/frontend/src/assets/expand.svg new file mode 100644 index 00000000..a3260d98 --- /dev/null +++ b/frontend/src/assets/expand.svg @@ -0,0 +1,4 @@ + + + + From c3044850797ac62b88e070cdef700caf0f655c3d Mon Sep 17 00:00:00 2001 From: Lakshmi Narayanan Date: Sun, 29 Oct 2023 01:44:00 +0400 Subject: [PATCH 58/93] Fix the color of documentation icon --- frontend/src/assets/documentation.svg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/assets/documentation.svg b/frontend/src/assets/documentation.svg index a1620ff3..344fb6cc 100644 --- a/frontend/src/assets/documentation.svg +++ b/frontend/src/assets/documentation.svg @@ -1,3 +1,3 @@ - - \ No newline at end of file + + From 56b81b78c30d07fcd9e132c846b3fdac5f194f44 Mon Sep 17 00:00:00 2001 From: Lakshmi Narayanan Date: Sun, 29 Oct 2023 01:48:04 +0400 Subject: [PATCH 59/93] Update sidebar with new logo and icon --- frontend/src/Navigation.tsx | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/frontend/src/Navigation.tsx b/frontend/src/Navigation.tsx index f3d810d7..5eb7e018 100644 --- a/frontend/src/Navigation.tsx +++ b/frontend/src/Navigation.tsx @@ -1,19 +1,20 @@ import { useEffect, useRef, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; import { NavLink, useNavigate } from 'react-router-dom'; -import Arrow1 from './assets/arrow.svg'; -import Arrow2 from './assets/dropdown-arrow.svg'; -import Exit from './assets/exit.svg'; -import Message from './assets/message.svg'; -import Hamburger from './assets/hamburger.svg'; -import Key from './assets/key.svg'; -import Info from './assets/info.svg'; +import DocsGPT3 from './assets/cute_docsgpt3.svg'; import Documentation from './assets/documentation.svg'; import Discord from './assets/discord.svg'; +import Arrow2 from './assets/dropdown-arrow.svg'; +import Expand from './assets/expand.svg'; +import Exit from './assets/exit.svg'; import Github from './assets/github.svg'; +import Hamburger from './assets/hamburger.svg'; +import Info from './assets/info.svg'; +import Key from './assets/key.svg'; +import Message from './assets/message.svg'; import UploadIcon from './assets/upload.svg'; import { ActiveState } from './models/misc'; import APIKeyModal from './preferences/APIKeyModal'; -import { useDispatch, useSelector } from 'react-redux'; import { selectApiKeyStatus, selectSelectedDocs, @@ -178,11 +179,11 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) { }} > menu toggle )} @@ -192,19 +193,25 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) { !navOpen && '-ml-96 md:-ml-[18rem]' } duration-20 fixed top-0 z-20 flex h-full w-72 flex-col border-r-2 bg-gray-50 transition-all`} > -
+
+
+ +

DocsGPT

+
@@ -224,7 +231,7 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) { } my-auto mx-4 mt-4 flex h-9 cursor-pointer gap-4 rounded-3xl hover:bg-gray-100` } > - +

New Chat

From e627ebc12716028667f7e84622cb61ea2ca8656f Mon Sep 17 00:00:00 2001 From: Lakshmi Narayanan Date: Sun, 29 Oct 2023 02:01:18 +0400 Subject: [PATCH 60/93] Small fix with fixed height and width --- frontend/src/About.tsx | 2 +- frontend/src/Hero.tsx | 2 +- frontend/src/Navigation.tsx | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/frontend/src/About.tsx b/frontend/src/About.tsx index 4f388e37..85f654cc 100644 --- a/frontend/src/About.tsx +++ b/frontend/src/About.tsx @@ -8,7 +8,7 @@ export default function About() {

About DocsGPT

- DocsGPT + DocsGPT

Find the information in your documentation through AI-powered diff --git a/frontend/src/Hero.tsx b/frontend/src/Hero.tsx index dd2f60a2..d1030402 100644 --- a/frontend/src/Hero.tsx +++ b/frontend/src/Hero.tsx @@ -5,7 +5,7 @@ export default function Hero({ className = '' }: { className?: string }) {

DocsGPT

- DocsGPT + DocsGPT

Welcome to DocsGPT, your technical documentation assistant! diff --git a/frontend/src/Navigation.tsx b/frontend/src/Navigation.tsx index 5eb7e018..31a27178 100644 --- a/frontend/src/Navigation.tsx +++ b/frontend/src/Navigation.tsx @@ -210,8 +210,6 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) { className={`${ !navOpen ? 'rotate-180' : 'rotate-0' } m-auto transition-all duration-200`} - width="25px" - height="25px" />

From 70a6a275f42a1fb3d45a4306feaff6517a21e8d7 Mon Sep 17 00:00:00 2001 From: Farookh Zaheer Siddiqui <129654632+FarukhS52@users.noreply.github.com> Date: Sun, 29 Oct 2023 14:03:05 +0530 Subject: [PATCH 61/93] Update CODE_OF_CONDUCT.md --- CODE_OF_CONDUCT.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 4f24f158..ba590c87 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -63,7 +63,7 @@ reported to the community leaders responsible for enforcement at contact@arc53.com. All complaints will be reviewed and investigated promptly and fairly. -All community leaders are obligated to respectful towards the privacy and security of the +All community leaders are obligated to be respectful towards the privacy and security of the reporter of any incident. ## Enforcement Guidelines From 7a44c9e650969cc053c4966ff5bfaf04759ccb7c Mon Sep 17 00:00:00 2001 From: Farookh Zaheer Siddiqui <129654632+FarukhS52@users.noreply.github.com> Date: Sun, 29 Oct 2023 14:09:56 +0530 Subject: [PATCH 62/93] Update Railway-Deploying.md --- docs/pages/Deploying/Railway-Deploying.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/pages/Deploying/Railway-Deploying.md b/docs/pages/Deploying/Railway-Deploying.md index c326a6bd..34937b3d 100644 --- a/docs/pages/Deploying/Railway-Deploying.md +++ b/docs/pages/Deploying/Railway-Deploying.md @@ -168,7 +168,7 @@ g. `git push git push --set-upstream origin master` Your local files will now be pushed to your GitHub Account. :) -### 3. Create an Railway Account: +### 3. Create a Railway Account: @@ -192,7 +192,7 @@ b. Choose any from the list of options available (Recommended "**Deploy from Git -c. Choose the required Repository from your Github. +c. Choose the required Repository from your GitHub. @@ -208,7 +208,7 @@ PS: It may take a few minutes for the account setup to complete. -#### You will get A free trail of $5 (use it for trail and then purchase if satisfied and needed) +#### You will get A free trial of $5 (use it for trial and then purchase if satisfied and needed) @@ -220,7 +220,7 @@ a. Choose DocsGPT repo from the list of your GitHub repository that you want to -b. Click on Deploy now . +b. Click on Deploy now. @@ -251,4 +251,4 @@ g. You can update the Root directory, build command, installation command as per -Your own DocsGPT is now available at the Generated domain URl. :) \ No newline at end of file +Your own DocsGPT is now available at the Generated domain URl. :) From 01693cb155294ab300433466f078b724a282a8da Mon Sep 17 00:00:00 2001 From: "beKool.sh" <76424367+beKoool@users.noreply.github.com> Date: Sun, 29 Oct 2023 17:13:23 +0545 Subject: [PATCH 63/93] Fix random spaces --- docs/pages/Developing/API-docs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/Developing/API-docs.md b/docs/pages/Developing/API-docs.md index 09e4f875..e8ee521f 100644 --- a/docs/pages/Developing/API-docs.md +++ b/docs/pages/Developing/API-docs.md @@ -39,9 +39,9 @@ fetch("http://127.0.0.1:5000/api/answer", { In response, you will get a JSON document containing the answer,query and the result: ```json { - "answer": " Hi there! How can I help you?\n", + "answer": "Hi there! How can I help you?\n", "query": "Hi", - "result": " Hi there! How can I help you?\nSOURCES:" + "result": "Hi there! How can I help you?\nSOURCES:" } ``` From a74c70e8a1d5b6a15b9281311c4f57d94b4704eb Mon Sep 17 00:00:00 2001 From: Roman Bug Date: Mon, 30 Oct 2023 00:59:17 +0300 Subject: [PATCH 64/93] Update README.md --- docs/README.md | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/docs/README.md b/docs/README.md index 4e41a0de..4b90b598 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,16 +4,15 @@ ### 1. Clone the DocsGPT repository: -``` +```bash git clone https://github.com/arc53/DocsGPT.git - ``` ### 2. Navigate to the docs folder: -``` +```bash cd DocsGPT/docs - ``` + The docs folder contains the markdown files that make up the documentation. The majority of the files are in the pages directory. Some notable files in this folder include: `index.mdx`: The main documentation file. @@ -22,30 +21,29 @@ The docs folder contains the markdown files that make up the documentation. The ### 3. Verify that you have Node.js and npm installed in your system. You can check by running: -``` +```bash node --version npm --version - ``` + ### 4. If not installed, download Node.js and npm from the respective official websites. ### 5. Once you have Node.js and npm running, proceed to install yarn - another package manager that helps to manage project dependencies: -``` +```bash npm install --global yarn - ``` + ### 6. Install the project dependencies using yarn: -``` +```bash yarn install - ``` + ### 7. After the successful installation of the project dependencies, start the local server: -``` +```bash 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. From cf3aab9d386c941cd8909be42d0b7a974b38538c Mon Sep 17 00:00:00 2001 From: Roman Bug Date: Mon, 30 Oct 2023 01:06:24 +0300 Subject: [PATCH 65/93] Update Quickstart.md --- docs/pages/Deploying/Quickstart.md | 58 ++++++++++++++++++------------ 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/docs/pages/Deploying/Quickstart.md b/docs/pages/Deploying/Quickstart.md index 411e3234..0b601943 100644 --- a/docs/pages/Deploying/Quickstart.md +++ b/docs/pages/Deploying/Quickstart.md @@ -2,22 +2,28 @@ **Note**: Make sure you have Docker installed **On macOS or Linux:** -Just run the following command:: +Just run the following command: -`./setup.sh` +``` +./setup.sh +``` This command will install all the necessary dependencies and provide you with an option to download the local model or use OpenAI. If you prefer to follow manual steps, refer to this guide: 1. Open and download this repository with -`git clone https://github.com/arc53/DocsGPT.git`. + ``` + git clone https://github.com/arc53/DocsGPT.git`. + ``` 2. Create a `.env` file in your root directory and set your `API_KEY` with your [OpenAI API key](https://platform.openai.com/account/api-keys). 3. Run the following commands: -`docker-compose build && docker-compose up`. + ``` + docker-compose build && docker-compose up`. + ``` 4. Navigate to `http://localhost:5173/`. -To stop, simply press Ctrl + C. +To stop, simply press **Ctrl + C**. **For WINDOWS:** @@ -35,9 +41,11 @@ To run the setup on Windows, you have two options: using the Windows Subsystem f echo "VITE_API_STREAMING=true" >> .env ``` 4. Run the following command to start the setup with Docker Compose: - `./run-with-docker-compose.sh` -5. Open your web browser and navigate to (http://localhost:5173/). -6. To stop the setup, just press `Ctrl + C` in the WSL terminal + ``` + ./run-with-docker-compose.sh + ``` +6. Open your web browser and navigate to (http://localhost:5173/). +7. To stop the setup, just press **Ctrl + C** in the WSL terminal **Option 2: Using Git Bash or Command Prompt (CMD):** @@ -50,10 +58,12 @@ To run the setup on Windows, you have two options: using the Windows Subsystem f echo "API_KEY=Yourkey" > .env echo "VITE_API_STREAMING=true" >> .env ``` -4.Run the following command to start the setup with Docker Compose: - `./run-with-docker-compose.sh` -5.Open your web browser and navigate to (http://localhost:5173/). -6.To stop the setup, just press Ctrl + C in the Git Bash or Command Prompt terminal. +4. Run the following command to start the setup with Docker Compose: + ``` + ./run-with-docker-compose.sh + ``` +5. Open your web browser and navigate to (http://localhost:5173/). +6. To stop the setup, just press **Ctrl + C** in the Git Bash or Command Prompt terminal. These steps should help you set up and run the project on Windows using either WSL or Git Bash/Command Prompt. **Important:** Ensure that Docker is installed and properly configured on your Windows system for these steps to work. @@ -77,7 +87,7 @@ Option 1: Using Windows Subsystem for Linux (WSL): 4. Run the following command to start the setup with Docker Compose: `./run-with-docker-compose.sh` 5. Open your web browser and navigate to (http://localhost:5173/). -6. To stop the setup, just press `Ctrl + C` in the WSL terminal +6. To stop the setup, just press **Ctrl + C** in the WSL terminal. Option 2: Using Git Bash or Command Prompt (CMD): @@ -90,10 +100,12 @@ Option 2: Using Git Bash or Command Prompt (CMD): echo "API_KEY=Yourkey" > .env echo "VITE_API_STREAMING=true" >> .env ``` -4.Run the following command to start the setup with Docker Compose: - `./run-with-docker-compose.sh` -5.Open your web browser and navigate to (http://localhost:5173/). -6.To stop the setup, just press Ctrl + C in the Git Bash or Command Prompt terminal. +4. Run the following command to start the setup with Docker Compose: + ``` + ./run-with-docker-compose.sh + ``` +5. Open your web browser and navigate to (http://localhost:5173/). +6. To stop the setup, just press **Ctrl + C** in the Git Bash or Command Prompt terminal. These steps should help you set up and run the project on Windows using either WSL or Git Bash/Command Prompt. Make sure you have Docker installed and properly configured on your Windows system for this to work. @@ -103,12 +115,12 @@ These steps should help you set up and run the project on Windows using either W #### Installing the Chrome extension: To enhance your DocsGPT experience, you can install the DocsGPT Chrome extension. Here's how: -1. In the DocsGPT GitHub repository, click on the "Code" button and select "Download ZIP". +1. In the DocsGPT GitHub repository, click on the **Code** button and select **Download ZIP**. 2. Unzip the downloaded file to a location you can easily access. 3. Open the Google Chrome browser and click on the three dots menu (upper right corner). -4. Select "More Tools" and then "Extensions". -5. Turn on the "Developer mode" switch in the top right corner of the Extensions page. -6. Click on the "Load unpacked" button. -7. Select the "Chrome" folder where the DocsGPT files have been unzipped (docsgpt-main > extensions > chrome). +4. Select **More Tools** and then **Extensions**. +5. Turn on the **Developer mode** switch in the top right corner of the **Extensions page**. +6. Click on the **Load unpacked** button. +7. Select the **Chrome** folder where the DocsGPT files have been unzipped (docsgpt-main > extensions > chrome). 8. The extension should now be added to Google Chrome and can be managed on the Extensions page. -9. To disable or remove the extension, simply turn off the toggle switch on the extension card or click the "Remove" button. +9. To disable or remove the extension, simply turn off the toggle switch on the extension card or click the **Remove** button. From ceff618e5d19a41be2f47e0e535c9acdde98be44 Mon Sep 17 00:00:00 2001 From: Roman Bug Date: Mon, 30 Oct 2023 01:18:52 +0300 Subject: [PATCH 66/93] Update API-docs.md --- docs/pages/Developing/API-docs.md | 106 ++++++++++++++++-------------- 1 file changed, 58 insertions(+), 48 deletions(-) diff --git a/docs/pages/Developing/API-docs.md b/docs/pages/Developing/API-docs.md index e8ee521f..b57f6b1b 100644 --- a/docs/pages/Developing/API-docs.md +++ b/docs/pages/Developing/API-docs.md @@ -10,14 +10,16 @@ This endpoint is used to request answers to user-provided questions. **Request:** -Method: POST -Headers: Content-Type should be set to "application/json; charset=utf-8" -Request Body: JSON object with the following fields: -* **question:** The user's question -* **history:** (Optional) Previous conversation history -* **api_key:** Your API key -* **embeddings_key:** Your embeddings key -* **active_docs:** The location of active documentation +**Method**: `POST` + +**Headers**: Content-Type should be set to `application/json; charset=utf-8` + +**Request Body**: JSON object with the following fields: +* `question` β€” The user's question. +* `history` β€” (Optional) Previous conversation history. +* `api_key`β€” Your API key. +* `embeddings_key` β€” Your embeddings key. +* `active_docs` β€” The location of active documentation. Here is a JavaScript Fetch Request example: ```js @@ -36,7 +38,7 @@ fetch("http://127.0.0.1:5000/api/answer", { **Response** -In response, you will get a JSON document containing the answer,query and the result: +In response, you will get a JSON document containing the `answer`, `query` and `result`: ```json { "answer": "Hi there! How can I help you?\n", @@ -53,9 +55,10 @@ This endpoint will make sure documentation is loaded on the server (just run it **Request:** -Headers: Content-Type should be set to "application/json; charset=utf-8" -Request Body: JSON object with the field: -* **docs:** The location of the documentation +**Headers**: Content-Type should be set to `application/json; charset=utf-8` + +**Request Body**: JSON object with the field: +* `docs` β€” The location of the documentation: ```js // answer (POST http://127.0.0.1:5000/api/docs_check) fetch("http://127.0.0.1:5000/api/docs_check", { @@ -71,7 +74,7 @@ fetch("http://127.0.0.1:5000/api/docs_check", { **Response:** -In response, you will get a JSON document like this one indicating whether the documentation exists or not.: +In response, you will get a JSON document like this one indicating whether the documentation exists or not: ```json { "status": "exists" @@ -86,19 +89,25 @@ This endpoint provides information about available vectors and their locations w **Request:** -Method: GET +**Method**: `GET` **Response:** Response will include: -`date`, `description`, `docLink`, `fullName`, `language`, `location` (local or docshub), `model`, `name`, `version`. - +* `date` +* `description` +* `docLink` +* `fullName` +* `language` +* `location` (local or docshub) +* `model` +* `name` +* `version` Example of JSON in Docshub and local: image - ### 4. /api/upload **Description:** @@ -106,8 +115,8 @@ This endpoint is used to upload a file that needs to be trained, response is JSO **Request:** -Method: POST -Request Body: A multipart/form-data form with file upload and additional fields, including "user" and "name." +**Method**: `POST` +**Request Body**: A multipart/form-data form with file upload and additional fields, including `user` and `name`. HTML example: @@ -134,8 +143,8 @@ JSON response with a status and a task ID that can be used to check the task's p This endpoint is used to get the status of a task (`task_id`) from `/api/upload` **Request:** -Method: GET -Query Parameter: task_id (task ID to check) +**Method**: `GE`T +**Query Parameter**: `task_id` (task ID to check) **Sample JavaScript Fetch Request:** ```js @@ -155,33 +164,32 @@ fetch("http://localhost:5001/api/task_status?task_id=YOUR_TASK_ID", { There are two types of responses: 1. While the task is still running, the 'current' value will show progress from 0 to 100. - -```json -{ - "result": { - "current": 1 - }, - "status": "PROGRESS" -} -``` + ```json + { + "result": { + "current": 1 + }, + "status": "PROGRESS" + } + ``` 2. When task is completed: -```json -{ - "result": { - "directory": "temp", - "filename": "install.rst", - "formats": [ - ".rst", - ".md", - ".pdf" - ], - "name_job": "somename", - "user": "local" - }, - "status": "SUCCESS" -} -``` + ```json + { + "result": { + "directory": "temp", + "filename": "install.rst", + "formats": [ + ".rst", + ".md", + ".pdf" + ], + "name_job": "somename", + "user": "local" + }, + "status": "SUCCESS" + } + ``` ### 6. /api/delete_old **Description:** @@ -190,7 +198,8 @@ This endpoint is used to delete old Vector Stores. **Request:** -Method: GET +**Method**: `GET` + ```js // Task status (GET http://127.0.0.1:5000/api/docs_check) fetch("http://localhost:5001/api/task_status?task_id=b2d2a0f4-387c-44fd-a443-e4fe2e7454d1", { @@ -205,7 +214,8 @@ fetch("http://localhost:5001/api/task_status?task_id=b2d2a0f4-387c-44fd-a443-e4f ``` **Response:** -JSON response indicating the status of the operation. +JSON response indicating the status of the operation: + ```json { "status": "ok" } ``` From 8990e4666a3f6914d008853a56e233f46bbeb39d Mon Sep 17 00:00:00 2001 From: Roman Bug Date: Mon, 30 Oct 2023 01:46:06 +0300 Subject: [PATCH 67/93] Update Quickstart.md --- docs/pages/Deploying/Quickstart.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/Deploying/Quickstart.md b/docs/pages/Deploying/Quickstart.md index 0b601943..89aea851 100644 --- a/docs/pages/Deploying/Quickstart.md +++ b/docs/pages/Deploying/Quickstart.md @@ -14,12 +14,12 @@ If you prefer to follow manual steps, refer to this guide: 1. Open and download this repository with ``` - git clone https://github.com/arc53/DocsGPT.git`. + git clone https://github.com/arc53/DocsGPT.git. ``` 2. Create a `.env` file in your root directory and set your `API_KEY` with your [OpenAI API key](https://platform.openai.com/account/api-keys). 3. Run the following commands: ``` - docker-compose build && docker-compose up`. + docker-compose build && docker-compose up. ``` 4. Navigate to `http://localhost:5173/`. From 0bdee8219a3b07c7d2f1b17579fda872656275d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michelle=20=22MishManners=C2=AE=E2=84=A2=22=20Mannering?= <36594527+mishmanners@users.noreply.github.com> Date: Mon, 30 Oct 2023 11:59:47 +1100 Subject: [PATCH 68/93] Fix README for some reason - things were missing; fixed now --- README.md | 159 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 130 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index f72ca91d..97a965f5 100644 --- a/README.md +++ b/README.md @@ -1,86 +1,187 @@

- DocsGPT πŸ¦– + DocsGPT πŸ¦–

+ Open-Source Documentation Assistant +

- @@ -14,27 +14,27 @@ Say goodbye to time-consuming manual searches, and let + DocsGPT is a cutting-edge open-source solution that streamlines the process of finding information in the project documentation. With its integration of the powerful GPT models, developers can easily ask questions about a project and receive accurate answers. + +Say goodbye to time-consuming manual searches, and let DocsGPT 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. +

- ### Production Support / Help for companies: - We're eager to provide personalized assistance when deploying your DocsGPT to a live environment. - - [Book Demo :wave:](https://airtable.com/appdeaL0F1qV8Bl2C/shrrJF1Ll7btCJRbP) - [Send Email :email:](mailto:contact@arc53.com?subject=DocsGPT%20support%2Fsolutions) - ### [:tada: Join the Hacktoberfest with DocsGPT and Earn a Free T-shirt! :tada:](https://github.com/arc53/DocsGPT/blob/main/HACKTOBERFEST.md) - ![video-example-of-docs-gpt](https://d3dg1063dc54p9.cloudfront.net/videos/demov3.gif) - ## Roadmap - -You can find our roadmap [on our GitHub project board](https://github.com/orgs/arc53/projects/2). Please don't hesitate to contribute or create issues, it helps us improve DocsGPT! - +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-falcon](https://huggingface.co/Arc53/docsgpt-7b-falcon) | Falcon-7b | 1xA10G gpu | +| [Docsgpt-14b](https://huggingface.co/Arc53/docsgpt-14b) | llama-2-14b | 2xA10 gpu's | +| [Docsgpt-40b-falcon](https://huggingface.co/Arc53/docsgpt-40b-falcon) | falcon-40b | 8xA10G gpu's | - - @@ -48,21 +48,21 @@ If you don't have enough resources to run it, you can use bitsnbytes to quantize - +If you don't have enough resources to run it, you can use bitsnbytes to quantize. ## Features - ![Main features of DocsGPT showcasing six main features](https://user-images.githubusercontent.com/17906039/220427472-2644cff4-7666-46a5-819f-fc4a521f63c7.png) - ## Useful links - - :mag: :fire: [Live preview](https://docsgpt.arc53.com/) - - :speech_balloon: :tada: [Join our Discord](https://discord.gg/n5BX8dh8rU) - - :books: :sunglasses: [Guides](https://docs.docsgpt.co.uk/) - -- πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» [Interested in contributing?](https://github.com/arc53/DocsGPT/blob/main/CONTRIBUTING.md) - +- :couple: [Interested in contributing?](https://github.com/arc53/DocsGPT/blob/main/CONTRIBUTING.md) - :file_folder: :rocket: [How to use any other documentation](https://docs.docsgpt.co.uk/Guides/How-to-train-on-other-documentation) - - :house: :closed_lock_with_key: [How to host it locally (so all data will stay on-premises)](https://docs.docsgpt.co.uk/Guides/How-to-use-different-LLM) - ## Project structure +- Application - Flask app (main application). +- Extensions - Chrome extension. - @@ -184,4 +184,4 @@ We as members, contributors, and leaders, pledge to make participation in our co +- Scripts - Script that creates similarity search index for other libraries. +- Frontend - Frontend uses Vite and React. + +## QuickStart + +Note: Make sure you have [Docker](https://docs.docker.com/engine/install/) installed + +On Mac OS or Linux, write: + +`./setup.sh` + +It will install all the dependencies and allow you to download the local model or use OpenAI. + +Otherwise, refer to this Guide: + +1. Download and open this repository with `git clone https://github.com/arc53/DocsGPT.git` +2. Create a `.env` file in your root directory and set the env variable `API_KEY` with your [OpenAI API key](https://platform.openai.com/account/api-keys) and `VITE_API_STREAMING` to true or false, depending on whether you want streaming answers or not. + It should look like this inside: + + ``` + API_KEY=Yourkey + VITE_API_STREAMING=true + ``` + + 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. + +3. Run [./run-with-docker-compose.sh](https://github.com/arc53/DocsGPT/blob/main/run-with-docker-compose.sh). +4. Navigate to http://localhost:5173/. + +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 + +Make sure you have Python 3.10 or 3.11 installed. + +1. Export required environment variables or prepare a `.env` file in the `/application` folder: + - Copy [.env_sample](https://github.com/arc53/DocsGPT/blob/main/application/.env_sample) and create `.env` with your OpenAI API token for the `API_KEY` and `EMBEDDINGS_KEY` fields. + +(check out [`application/core/settings.py`](application/core/settings.py) if you want to see more config options.) + +2. (optional) Create a Python virtual environment: + You can follow the [Python official documentation](https://docs.python.org/3/tutorial/venv.html) for virtual environments. + +a) On Mac OS and Linux + +```commandline +python -m venv venv +. venv/bin/activate +``` + +b) On Windows + +```commandline +python -m venv venv + venv/Scripts/activate +``` + +3. Change to the `application/` subdir by the command `cd application/` and install dependencies for the backend: + +```commandline +pip install -r requirements.txt +``` + +4. Run the app using `flask run --host=0.0.0.0 --port=7091`. +5. Start worker with `celery -A application.app.celery worker -l INFO`. + +### Start frontend + +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`. + +## Contributing + +Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) file for information about how to get involved. We welcome issues, questions, and pull requests. + +## 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 + + + Contributors + + +## License 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) From 5a33953b788fd7211c923cd3d7487f1a6e2aa35c Mon Sep 17 00:00:00 2001 From: Lakshmi Narayanan Date: Mon, 30 Oct 2023 10:14:40 +0400 Subject: [PATCH 69/93] Add Chats heading if there are any conversations --- frontend/src/Navigation.tsx | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/frontend/src/Navigation.tsx b/frontend/src/Navigation.tsx index 31a27178..59ef4af7 100644 --- a/frontend/src/Navigation.tsx +++ b/frontend/src/Navigation.tsx @@ -232,19 +232,21 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) {

New Chat

-
- {conversations?.map((conversation) => ( - handleConversationClick(id)} - onDeleteConversation={(id) => handleDeleteConversation(id)} - onSave={(conversation) => updateConversationName(conversation)} - /> - ))} -
+ {conversations && ( +
+

Chats

+ {conversations?.map((conversation) => ( + handleConversationClick(id)} + onDeleteConversation={(id) => handleDeleteConversation(id)} + onSave={(conversation) => updateConversationName(conversation)} + /> + ))} +
+ )} -
Date: Mon, 30 Oct 2023 13:00:47 +0530 Subject: [PATCH 70/93] Update README.md added a lighting emoji to give it more great look --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 97a965f5..f50d4ad9 100644 --- a/README.md +++ b/README.md @@ -174,7 +174,7 @@ Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) file for information abou 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 +## Many Thanks To Our Contributors⚑ Contributors From 54ac2d33e247ee8a3f5b416cf7be236e2e711527 Mon Sep 17 00:00:00 2001 From: Roman Zhukov Date: Mon, 30 Oct 2023 13:06:37 +0300 Subject: [PATCH 71/93] Update Quickstart docs with bash language hl. --- docs/pages/Deploying/Quickstart.md | 36 ++++++++++++++++-------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/docs/pages/Deploying/Quickstart.md b/docs/pages/Deploying/Quickstart.md index 89aea851..fb6cb7e0 100644 --- a/docs/pages/Deploying/Quickstart.md +++ b/docs/pages/Deploying/Quickstart.md @@ -4,7 +4,7 @@ **On macOS or Linux:** Just run the following command: -``` +```bash ./setup.sh ``` @@ -13,13 +13,13 @@ This command will install all the necessary dependencies and provide you with an If you prefer to follow manual steps, refer to this guide: 1. Open and download this repository with - ``` - git clone https://github.com/arc53/DocsGPT.git. + ```bash + git clone https://github.com/arc53/DocsGPT.git ``` 2. Create a `.env` file in your root directory and set your `API_KEY` with your [OpenAI API key](https://platform.openai.com/account/api-keys). 3. Run the following commands: - ``` - docker-compose build && docker-compose up. + ```bash + docker-compose build && docker-compose up ``` 4. Navigate to `http://localhost:5173/`. @@ -34,17 +34,17 @@ To run the setup on Windows, you have two options: using the Windows Subsystem f 1. Install WSL if you haven't already. You can follow the official Microsoft documentation for installation: (https://learn.microsoft.com/en-us/windows/wsl/install). 2. After setting up WSL, open the WSL terminal. 3. Clone the repository and create the `.env` file: - ``` + ```bash git clone https://github.com/arc53/DocsGPT.git cd DocsGPT echo "API_KEY=Yourkey" > .env echo "VITE_API_STREAMING=true" >> .env ``` 4. Run the following command to start the setup with Docker Compose: - ``` + ```bash ./run-with-docker-compose.sh ``` -6. Open your web browser and navigate to (http://localhost:5173/). +6. Open your web browser and navigate to http://localhost:5173/. 7. To stop the setup, just press **Ctrl + C** in the WSL terminal **Option 2: Using Git Bash or Command Prompt (CMD):** @@ -52,17 +52,17 @@ To run the setup on Windows, you have two options: using the Windows Subsystem f 1. Install Git for Windows if you haven't already. Download it from the official website: (https://gitforwindows.org/). 2. Open Git Bash or Command Prompt. 3. Clone the repository and create the `.env` file: - ``` + ```bash git clone https://github.com/arc53/DocsGPT.git cd DocsGPT echo "API_KEY=Yourkey" > .env echo "VITE_API_STREAMING=true" >> .env ``` 4. Run the following command to start the setup with Docker Compose: - ``` + ```bash ./run-with-docker-compose.sh ``` -5. Open your web browser and navigate to (http://localhost:5173/). +5. Open your web browser and navigate to http://localhost:5173/. 6. To stop the setup, just press **Ctrl + C** in the Git Bash or Command Prompt terminal. These steps should help you set up and run the project on Windows using either WSL or Git Bash/Command Prompt. @@ -78,15 +78,17 @@ Option 1: Using Windows Subsystem for Linux (WSL): 1. Install WSL if you haven't already. You can follow the official Microsoft documentation for installation: (https://learn.microsoft.com/en-us/windows/wsl/install). 2. After setting up WSL, open the WSL terminal. 3. Clone the repository and create the `.env` file: - ``` + ```bash git clone https://github.com/arc53/DocsGPT.git cd DocsGPT echo "API_KEY=Yourkey" > .env echo "VITE_API_STREAMING=true" >> .env ``` 4. Run the following command to start the setup with Docker Compose: - `./run-with-docker-compose.sh` -5. Open your web browser and navigate to (http://localhost:5173/). + ```bash + ./run-with-docker-compose.sh + ``` +5. Open your web browser and navigate to http://localhost:5173/. 6. To stop the setup, just press **Ctrl + C** in the WSL terminal. Option 2: Using Git Bash or Command Prompt (CMD): @@ -94,17 +96,17 @@ Option 2: Using Git Bash or Command Prompt (CMD): 1. Install Git for Windows if you haven't already. You can download it from the official website: (https://gitforwindows.org/). 2. Open Git Bash or Command Prompt. 3. Clone the repository and create the `.env` file: - ``` + ```bash git clone https://github.com/arc53/DocsGPT.git cd DocsGPT echo "API_KEY=Yourkey" > .env echo "VITE_API_STREAMING=true" >> .env ``` 4. Run the following command to start the setup with Docker Compose: - ``` + ```bash ./run-with-docker-compose.sh ``` -5. Open your web browser and navigate to (http://localhost:5173/). +5. Open your web browser and navigate to http://localhost:5173/. 6. To stop the setup, just press **Ctrl + C** in the Git Bash or Command Prompt terminal. These steps should help you set up and run the project on Windows using either WSL or Git Bash/Command Prompt. Make sure you have Docker installed and properly configured on your Windows system for this to work. From 560c063db43b026c4dc1264cc7462fba13702314 Mon Sep 17 00:00:00 2001 From: Roman Zhukov Date: Mon, 30 Oct 2023 13:20:19 +0300 Subject: [PATCH 72/93] Update Quickstart docs with bash language hl. --- docs/pages/Deploying/Quickstart.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/Deploying/Quickstart.md b/docs/pages/Deploying/Quickstart.md index fb6cb7e0..cb5fcf38 100644 --- a/docs/pages/Deploying/Quickstart.md +++ b/docs/pages/Deploying/Quickstart.md @@ -21,7 +21,7 @@ If you prefer to follow manual steps, refer to this guide: ```bash docker-compose build && docker-compose up ``` -4. Navigate to `http://localhost:5173/`. +4. Navigate to http://localhost:5173/. To stop, simply press **Ctrl + C**. From d05f7e208451d0d7c6848540c1dc5598a666a9a5 Mon Sep 17 00:00:00 2001 From: 0xrahul6 <113128186+0xrahul6@users.noreply.github.com> Date: Mon, 30 Oct 2023 14:23:21 +0000 Subject: [PATCH 73/93] Enhanced Guides/Customizi --- docs/pages/Guides/Customising-prompts.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/pages/Guides/Customising-prompts.md b/docs/pages/Guides/Customising-prompts.md index 5e7430d7..fda1b577 100644 --- a/docs/pages/Guides/Customising-prompts.md +++ b/docs/pages/Guides/Customising-prompts.md @@ -1,10 +1,10 @@ # Customizing the Main Prompt -To customize the main prompt for DocsGPT, follow these steps: +Customizing the main prompt for DocsGPT gives you the ability to tailor the AI's responses to your specific requirements. By modifying the prompt text, you can achieve more accurate and relevant answers. Here's how you can do it: -1. Navigate to `/application/prompts/combine_prompt.txt`. +**Step 1:** Navigate to `/application/prompts/combine_prompt.txt`. -2. Edit the `combine_prompt.txt` file to modify the prompt text. You can experiment with different phrasings and structures to see how the model responds. +**Step 2:** Open the combine_prompt.txt file and modify the prompt text to suit your needs. You can experiment with different phrasings and structures to observe how the model responds. The main prompt serves as guidance to the AI model on how to generate responses. ## Example Prompt Modification @@ -19,7 +19,7 @@ When using code examples, use the following format: {summaries} ``` - +Feel free to customize the prompt to align it with your specific use case or the kind of responses you want from the AI. For example, you can focus on specific document types, industries, or topics to get more targeted results. ## Conclusion From fac8c9ee4e569ba667893db5e4a39df4cfe118b6 Mon Sep 17 00:00:00 2001 From: 0xrahul6 <113128186+0xrahul6@users.noreply.github.com> Date: Mon, 30 Oct 2023 14:53:08 +0000 Subject: [PATCH 74/93] Enhancement: Updated Train other docs --- .../How-to-train-on-other-documentation.md | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/docs/pages/Guides/How-to-train-on-other-documentation.md b/docs/pages/Guides/How-to-train-on-other-documentation.md index aa1ff41d..8ddfa564 100644 --- a/docs/pages/Guides/How-to-train-on-other-documentation.md +++ b/docs/pages/Guides/How-to-train-on-other-documentation.md @@ -1,43 +1,47 @@ ## How to train on other documentation -This AI can use any documentation, but first it needs to be prepared for similarity search. +This AI can utilize any documentation, but it requires preparation for similarity search. Follow these steps to get your documentation ready: + +**Step 1: Prepare Your Documentation** ![video-example-of-how-to-do-it](https://d3dg1063dc54p9.cloudfront.net/videos/how-to-vectorise.gif) Start by going to `/scripts/` folder. If you open this file, you will see that it uses RST files from the folder to create a `index.faiss` and `index.pkl`. -It currently uses OPEN_AI to create the vector store, so make sure your documentation is not too big. Pandas cost me around $3-$4. +It currently uses OPENAI to create the vector store, so make sure your documentation is not too large. Using Pandas cost me around $3-$4. -You can usually find documentation on Github in `docs/` folder for most open-source projects. +You can typically find documentation on GitHub in the `docs/` folder for most open-source projects. -### 1. Find documentation in .rst/.md and create a folder with it in your scripts directory +### 1. Find documentation in .rst/.md format and create a folder with it in your scripts directory. - Name it `inputs/`. - Put all your .rst/.md files in there. - The search is recursive, so you don't need to flatten them. -If there are no .rst/.md files just convert whatever you find to .txt file and feed it. (don't forget to change the extension in script) +If there are no .rst/.md files, convert whatever you find to a .txt file and feed it. (Don't forget to change the extension in the script). -### 2. Create .env file in `scripts/` folder -And write your OpenAI API key inside -`OPENAI_API_KEY=`. +### Step 2: Configure Your OpenAI API Key +1. Create a .env file in the scripts/ folder. + - Add your OpenAI API key inside: OPENAI_API_KEY=. -### 3. Run scripts/ingest.py +### Step 3: Run the Ingestion Script `python ingest.py ingest` -It will tell you how much it will cost. +It will provide you with the estimated cost. -### 4. Move `index.faiss` and `index.pkl` generated in `scripts/output` to `application/` folder. +### Step 4: Move `index.faiss` and `index.pkl` generated in `scripts/output` to `application/` folder. -### 5. Run web app -Once you run it will use new context that is relevant to your documentation. -Make sure you select default in the dropdown in the UI. +### Step 5: Run the Web App +Once you run it, it will use new context relevant to your documentation.Make sure you select default in the dropdown in the UI. ## Customization You can learn more about options while running ingest.py by running: + - Make sure you select 'default' from the dropdown in the UI. +## Customization +You can learn more about options while running ingest.py by executing: `python ingest.py --help` | Options | | |:--------------------------------:|:------------------------------------------------------------------------------------------------------------------------------:| From 4daf08e20f9ef936fcb220564c5cb8ec90dff67d Mon Sep 17 00:00:00 2001 From: Christine Belzie <105683440+CBID2@users.noreply.github.com> Date: Mon, 30 Oct 2023 13:21:53 -0400 Subject: [PATCH 75/93] fix: use a new color --- frontend/src/conversation/Conversation.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/conversation/Conversation.tsx b/frontend/src/conversation/Conversation.tsx index cd93f1c1..34b146a7 100644 --- a/frontend/src/conversation/Conversation.tsx +++ b/frontend/src/conversation/Conversation.tsx @@ -192,7 +192,7 @@ export default function Conversation() {
)}
-

+

This is a chatbot that uses the GPT-3, Faiss and LangChain to answer questions.

From 93279558915937244705114b118a287f374cd65b Mon Sep 17 00:00:00 2001 From: Lakshmi Narayanan Date: Tue, 31 Oct 2023 00:38:12 +0400 Subject: [PATCH 76/93] Update sidebar effects and styles based on figma --- frontend/src/Navigation.tsx | 38 +++++++++++++++++++++++------------- frontend/src/assets/add.svg | 10 ++++++++++ frontend/tailwind.config.cjs | 3 +++ 3 files changed, 37 insertions(+), 14 deletions(-) create mode 100644 frontend/src/assets/add.svg diff --git a/frontend/src/Navigation.tsx b/frontend/src/Navigation.tsx index 59ef4af7..7b54399c 100644 --- a/frontend/src/Navigation.tsx +++ b/frontend/src/Navigation.tsx @@ -11,7 +11,7 @@ import Github from './assets/github.svg'; import Hamburger from './assets/hamburger.svg'; import Info from './assets/info.svg'; import Key from './assets/key.svg'; -import Message from './assets/message.svg'; +import Add from './assets/add.svg'; import UploadIcon from './assets/upload.svg'; import { ActiveState } from './models/misc'; import APIKeyModal from './preferences/APIKeyModal'; @@ -191,10 +191,10 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) { ref={navRef} className={`${ !navOpen && '-ml-96 md:-ml-[18rem]' - } duration-20 fixed top-0 z-20 flex h-full w-72 flex-col border-r-2 bg-gray-50 transition-all`} + } duration-20 bg-light-gray-3000 fixed top-0 z-20 flex h-full w-72 flex-col border-r-2 transition-all`} >
-
+

DocsGPT

@@ -225,16 +225,22 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) { }} className={({ isActive }) => `${ - isActive && conversationId === null ? 'bg-gray-3000' : '' - } my-auto mx-4 mt-4 flex h-9 cursor-pointer gap-4 rounded-3xl hover:bg-gray-100` + isActive ? 'bg-gray-3000' : '' + } group my-auto mx-4 mt-4 flex cursor-pointer gap-2.5 rounded-3xl border border-silver p-3 hover:border-rainy-gray hover:bg-gray-3000` } > - -

New Chat

+ new +

+ New Chat +

{conversations && (
-

Chats

+

Chats

{conversations?.map((conversation) => ( )}
-

Source Docs

+

+ Source Docs +

key -

Reset Key

+

Reset Key

@@ -336,7 +344,7 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) { } > info -

About

+

About

documentation -

Documentation

+

Documentation

link -

Visit our Discord

+

+ Visit our Discord +

link -

Visit our Github

+

Visit our Github

diff --git a/frontend/src/assets/add.svg b/frontend/src/assets/add.svg new file mode 100644 index 00000000..d38c815e --- /dev/null +++ b/frontend/src/assets/add.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/tailwind.config.cjs b/frontend/tailwind.config.cjs index ff3f42ba..a5d61d67 100644 --- a/frontend/tailwind.config.cjs +++ b/frontend/tailwind.config.cjs @@ -31,6 +31,9 @@ module.exports = { 'green-2000': '#0FFF50', 'light-gray': '#edeef0', 'white-3000': '#ffffff', + 'dove-gray': '#6c6c6c', + silver: '#c4c4c4', + 'rainy-gray': '#a4a4a4', }, }, }, From 0254510d5310e45aaabc6493e7a48ef3cf88db57 Mon Sep 17 00:00:00 2001 From: Lakshmi Narayanan Date: Tue, 31 Oct 2023 00:40:35 +0400 Subject: [PATCH 77/93] Fix the rotation of the avatar --- frontend/src/conversation/ConversationBubble.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/frontend/src/conversation/ConversationBubble.tsx b/frontend/src/conversation/ConversationBubble.tsx index 85b80286..6460d662 100644 --- a/frontend/src/conversation/ConversationBubble.tsx +++ b/frontend/src/conversation/ConversationBubble.tsx @@ -66,10 +66,7 @@ const ConversationBubble = forwardRef< className={`flex self-start ${className} group flex-col pr-20`} >
- } - > + DocsGPT
Date: Mon, 30 Oct 2023 22:01:04 +0000 Subject: [PATCH 78/93] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 97a965f5..abd56e25 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ python -m venv venv pip install -r requirements.txt ``` -4. Run the app using `flask run --host=0.0.0.0 --port=7091`. +4. Run the app using `flask --app application/app.py run --host=0.0.0.0 --port=7091`. 5. Start worker with `celery -A application.app.celery worker -l INFO`. ### Start frontend From 5d1ec6a9c8359842cc1c3fd40fd4d4315f8b2420 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 22:07:34 +0000 Subject: [PATCH 79/93] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index abd56e25..91217c43 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ Say goodbye to time-consuming manual searches, and let ![link to main GitHub showing Forks number](https://img.shields.io/github/forks/arc53/docsgpt?style=social) ![link to license file](https://img.shields.io/github/license/arc53/docsgpt) ![link to discord](https://img.shields.io/discord/1070046503302877216) + ![X (formerly Twitter) URL](https://img.shields.io/twitter/url?url=https%3A%2F%2Ftwitter.com%2FATushynski) +
From 6476e688e55a3d15ea364c05ec06d5d0b101277b Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 30 Oct 2023 22:41:35 +0000 Subject: [PATCH 80/93] Fixes sidebar --- frontend/src/About.tsx | 2 +- frontend/src/Hero.tsx | 2 +- frontend/src/Navigation.tsx | 14 +++++++------- frontend/src/{ => components}/Avatar.tsx | 9 +-------- frontend/src/conversation/ConversationBubble.tsx | 14 ++++++++++++-- 5 files changed, 22 insertions(+), 19 deletions(-) rename frontend/src/{ => components}/Avatar.tsx (58%) diff --git a/frontend/src/About.tsx b/frontend/src/About.tsx index 85f654cc..eaffafdc 100644 --- a/frontend/src/About.tsx +++ b/frontend/src/About.tsx @@ -8,7 +8,7 @@ export default function About() {

About DocsGPT

- DocsGPT + DocsGPT

Find the information in your documentation through AI-powered diff --git a/frontend/src/Hero.tsx b/frontend/src/Hero.tsx index b814de1c..b62823aa 100644 --- a/frontend/src/Hero.tsx +++ b/frontend/src/Hero.tsx @@ -5,7 +5,7 @@ export default function Hero({ className = '' }: { className?: string }) {

DocsGPT

- DocsGPT + DocsGPT

Welcome to DocsGPT, your technical documentation assistant! diff --git a/frontend/src/Navigation.tsx b/frontend/src/Navigation.tsx index 7b54399c..328b9ebf 100644 --- a/frontend/src/Navigation.tsx +++ b/frontend/src/Navigation.tsx @@ -191,11 +191,13 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) { ref={navRef} className={`${ !navOpen && '-ml-96 md:-ml-[18rem]' - } duration-20 bg-light-gray-3000 fixed top-0 z-20 flex h-full w-72 flex-col border-r-2 transition-all`} + } duration-20 fixed top-0 z-20 flex h-full w-72 flex-col border-r-2 bg-white transition-all`} > -

+
- +

DocsGPT

- {avatar} -
- ); + return
{avatar}
; } diff --git a/frontend/src/conversation/ConversationBubble.tsx b/frontend/src/conversation/ConversationBubble.tsx index 6460d662..8c0ab8ef 100644 --- a/frontend/src/conversation/ConversationBubble.tsx +++ b/frontend/src/conversation/ConversationBubble.tsx @@ -1,5 +1,5 @@ import { forwardRef, useState } from 'react'; -import Avatar from '../Avatar'; +import Avatar from '../components/Avatar'; import { FEEDBACK, MESSAGE_TYPE } from './conversationModels'; import classes from './ConversationBubble.module.css'; import Alert from './../assets/alert.svg'; @@ -66,7 +66,17 @@ const ConversationBubble = forwardRef< className={`flex self-start ${className} group flex-col pr-20`} >
- DocsGPT + + } + /> +
Date: Tue, 31 Oct 2023 11:03:04 +0530 Subject: [PATCH 81/93] Fixed branch name from master to main in contributing guide. --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3b713155..5cfd1206 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -73,7 +73,7 @@ Here's a step-by-step guide on how to contribute to DocsGPT: - Before you make any changes, make sure that your fork is in sync to avoid merge conflicts using: ```shell git remote add upstream https://github.com/arc53/DocsGPT.git - git pull upstream master + git pull upstream main ``` 4. **Create and Switch to a New Branch:** From 79ec3594fed7099b9e1d15c6c5deac2296fd94c3 Mon Sep 17 00:00:00 2001 From: Sai-Suraj-27 Date: Tue, 31 Oct 2023 12:03:13 +0530 Subject: [PATCH 82/93] Fixed wrong closing parenthesis in codecov.yml --- codecov.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codecov.yml b/codecov.yml index 9fa3a4e6..3b859168 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,2 +1,2 @@ ignore: - - "*/tests/*” \ No newline at end of file + - "*/tests/*" \ No newline at end of file From d81838dfc496fd79fb6d9fe2ab59cfac190af2c2 Mon Sep 17 00:00:00 2001 From: Guspan Tanadi <36249910+guspan-tanadi@users.noreply.github.com> Date: Tue, 31 Oct 2023 16:40:41 +0700 Subject: [PATCH 83/93] docs: close parentheses EMBEDDINGS_KEY comment settings --- application/core/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/core/settings.py b/application/core/settings.py index 116735a6..25a3295d 100644 --- a/application/core/settings.py +++ b/application/core/settings.py @@ -19,7 +19,7 @@ class Settings(BaseSettings): API_URL: str = "http://localhost:7091" # backend url for celery worker API_KEY: str = None # LLM api key - EMBEDDINGS_KEY: str = None # api key for embeddings (if using openai, just copy API_KEY + EMBEDDINGS_KEY: str = None # api key for embeddings (if using openai, just copy API_KEY) OPENAI_API_BASE: str = None # azure openai api base url OPENAI_API_VERSION: str = None # azure openai api version AZURE_DEPLOYMENT_NAME: str = None # azure deployment name for answering From ce8ed5bfebbbdb69b99e6023ea90ae5b510a02c4 Mon Sep 17 00:00:00 2001 From: Guspan Tanadi <36249910+guspan-tanadi@users.noreply.github.com> Date: Tue, 31 Oct 2023 16:45:23 +0700 Subject: [PATCH 84/93] style: formatting /api/task_status API-docs --- docs/pages/Developing/API-docs.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/pages/Developing/API-docs.md b/docs/pages/Developing/API-docs.md index b57f6b1b..fa66250c 100644 --- a/docs/pages/Developing/API-docs.md +++ b/docs/pages/Developing/API-docs.md @@ -116,6 +116,7 @@ This endpoint is used to upload a file that needs to be trained, response is JSO **Request:** **Method**: `POST` + **Request Body**: A multipart/form-data form with file upload and additional fields, including `user` and `name`. HTML example: @@ -143,7 +144,9 @@ JSON response with a status and a task ID that can be used to check the task's p This endpoint is used to get the status of a task (`task_id`) from `/api/upload` **Request:** -**Method**: `GE`T + +**Method**: `GET` + **Query Parameter**: `task_id` (task ID to check) **Sample JavaScript Fetch Request:** From 147b94d9364b0dd46bd0d861db93c70996f7bf20 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 31 Oct 2023 12:49:25 +0000 Subject: [PATCH 85/93] checkmark bug --- frontend/src/assets/checkMark2.svg | 3 +++ frontend/src/conversation/ConversationBubble.tsx | 4 ++-- frontend/src/conversation/ConversationTile.tsx | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 frontend/src/assets/checkMark2.svg diff --git a/frontend/src/assets/checkMark2.svg b/frontend/src/assets/checkMark2.svg new file mode 100644 index 00000000..9ed02cbd --- /dev/null +++ b/frontend/src/assets/checkMark2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/frontend/src/conversation/ConversationBubble.tsx b/frontend/src/conversation/ConversationBubble.tsx index 8c0ab8ef..8dca54af 100644 --- a/frontend/src/conversation/ConversationBubble.tsx +++ b/frontend/src/conversation/ConversationBubble.tsx @@ -6,7 +6,7 @@ import Alert from './../assets/alert.svg'; import { ReactComponent as Like } from './../assets/like.svg'; import { ReactComponent as Dislike } from './../assets/dislike.svg'; import { ReactComponent as Copy } from './../assets/copy.svg'; -import { ReactComponent as Checkmark } from './../assets/checkmark.svg'; +import { ReactComponent as CheckMark } from './../assets/checkmark.svg'; import ReactMarkdown from 'react-markdown'; import copy from 'copy-to-clipboard'; import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; @@ -177,7 +177,7 @@ const ConversationBubble = forwardRef< }} > {copied ? ( - setIsCopyHovered(true)} onMouseLeave={() => setIsCopyHovered(false)} diff --git a/frontend/src/conversation/ConversationTile.tsx b/frontend/src/conversation/ConversationTile.tsx index 3ee67943..8fd6b261 100644 --- a/frontend/src/conversation/ConversationTile.tsx +++ b/frontend/src/conversation/ConversationTile.tsx @@ -3,7 +3,7 @@ import { useSelector } from 'react-redux'; import Edit from '../assets/edit.svg'; import Exit from '../assets/exit.svg'; import Message from '../assets/message.svg'; -import CheckMark from '../assets/checkmark.svg'; +import CheckMark2 from '../assets/checkMark2.svg'; import Trash from '../assets/trash.svg'; import { selectConversationId } from '../preferences/preferenceSlice'; @@ -94,7 +94,7 @@ export default function ConversationTile({ {conversationId === conversation.id && (
Edit Date: Tue, 31 Oct 2023 12:50:38 +0000 Subject: [PATCH 86/93] delete conflicting checkmark --- frontend/src/assets/checkmark.svg | 1 - 1 file changed, 1 deletion(-) delete mode 100644 frontend/src/assets/checkmark.svg diff --git a/frontend/src/assets/checkmark.svg b/frontend/src/assets/checkmark.svg deleted file mode 100644 index 499000e8..00000000 --- a/frontend/src/assets/checkmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From 0c05e1036dc1fe551f5a15f6d627d83bbc23727b Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 31 Oct 2023 12:52:27 +0000 Subject: [PATCH 87/93] del --- frontend/src/assets/checkMark.svg | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 frontend/src/assets/checkMark.svg diff --git a/frontend/src/assets/checkMark.svg b/frontend/src/assets/checkMark.svg deleted file mode 100644 index 9ed02cbd..00000000 --- a/frontend/src/assets/checkMark.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file From 5d0b8588f93c0be034fbbf63275d7925f2fb2348 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 31 Oct 2023 12:52:34 +0000 Subject: [PATCH 88/93] Revert "delete conflicting checkmark" This reverts commit 266087c5f16e47fff60334f0725c6115e8ca0e2c. --- frontend/src/assets/checkmark.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 frontend/src/assets/checkmark.svg diff --git a/frontend/src/assets/checkmark.svg b/frontend/src/assets/checkmark.svg new file mode 100644 index 00000000..499000e8 --- /dev/null +++ b/frontend/src/assets/checkmark.svg @@ -0,0 +1 @@ + \ No newline at end of file From 9c5e3d094b6a01bd90d876200c6ebc800da812ca Mon Sep 17 00:00:00 2001 From: Guspan Tanadi <36249910+guspan-tanadi@users.noreply.github.com> Date: Tue, 31 Oct 2023 19:59:09 +0700 Subject: [PATCH 89/93] docs: insert Method description /api/docs_check section API-docs --- docs/pages/Developing/API-docs.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/Developing/API-docs.md b/docs/pages/Developing/API-docs.md index fa66250c..5601ebc8 100644 --- a/docs/pages/Developing/API-docs.md +++ b/docs/pages/Developing/API-docs.md @@ -55,6 +55,8 @@ This endpoint will make sure documentation is loaded on the server (just run it **Request:** +**Method**: `POST` + **Headers**: Content-Type should be set to `application/json; charset=utf-8` **Request Body**: JSON object with the field: From ba132fc4111014a51e8b44979ef414ba4ddaa85c Mon Sep 17 00:00:00 2001 From: 0xrahul6 <113128186+0xrahul6@users.noreply.github.com> Date: Tue, 31 Oct 2023 19:12:38 +0530 Subject: [PATCH 90/93] Update Customising-prompts.md --- docs/pages/Guides/Customising-prompts.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/Guides/Customising-prompts.md b/docs/pages/Guides/Customising-prompts.md index fda1b577..691abcf2 100644 --- a/docs/pages/Guides/Customising-prompts.md +++ b/docs/pages/Guides/Customising-prompts.md @@ -2,9 +2,9 @@ Customizing the main prompt for DocsGPT gives you the ability to tailor the AI's responses to your specific requirements. By modifying the prompt text, you can achieve more accurate and relevant answers. Here's how you can do it: -**Step 1:** Navigate to `/application/prompts/combine_prompt.txt`. +1. Navigate to `/application/prompts/combine_prompt.txt`. -**Step 2:** Open the combine_prompt.txt file and modify the prompt text to suit your needs. You can experiment with different phrasings and structures to observe how the model responds. The main prompt serves as guidance to the AI model on how to generate responses. +2. Open the combine_prompt.txt file and modify the prompt text to suit your needs. You can experiment with different phrasings and structures to observe how the model responds. The main prompt serves as guidance to the AI model on how to generate responses. ## Example Prompt Modification From 6918a36beefdb7e2c496ae808877a5492de35bbb Mon Sep 17 00:00:00 2001 From: 0xrahul6 <113128186+0xrahul6@users.noreply.github.com> Date: Tue, 31 Oct 2023 19:14:14 +0530 Subject: [PATCH 91/93] Update Customising-prompts.md --- docs/pages/Guides/Customising-prompts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/Guides/Customising-prompts.md b/docs/pages/Guides/Customising-prompts.md index 691abcf2..9d95aa8f 100644 --- a/docs/pages/Guides/Customising-prompts.md +++ b/docs/pages/Guides/Customising-prompts.md @@ -4,7 +4,7 @@ Customizing the main prompt for DocsGPT gives you the ability to tailor the AI's 1. Navigate to `/application/prompts/combine_prompt.txt`. -2. Open the combine_prompt.txt file and modify the prompt text to suit your needs. You can experiment with different phrasings and structures to observe how the model responds. The main prompt serves as guidance to the AI model on how to generate responses. +2. Open the `combine_prompt.txt` file and modify the prompt text to suit your needs. You can experiment with different phrasings and structures to observe how the model responds. The main prompt serves as guidance to the AI model on how to generate responses. ## Example Prompt Modification From 4c6b8b4173eb15548792ab55542b798e982cc7fc Mon Sep 17 00:00:00 2001 From: Arnav Kohli <95236897+THEGAMECHANGER416@users.noreply.github.com> Date: Tue, 31 Oct 2023 20:00:07 +0530 Subject: [PATCH 92/93] Update worker.py Added comments in difficult to understand areas --- application/worker.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/application/worker.py b/application/worker.py index 71fcd615..ae8f240c 100644 --- a/application/worker.py +++ b/application/worker.py @@ -20,17 +20,34 @@ except FileExistsError: pass +# 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} +# 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__)))) +# Define the main function for ingesting and processing documents. def ingest_worker(self, directory, formats, name_job, filename, user): + """ + Ingest and process documents. + + Args: + self: Reference to the instance of the task. + directory (str): Specifies the directory for ingesting ('inputs' or 'temp'). + formats (list of str): List of file extensions to consider for ingestion (e.g., [".rst", ".md"]). + 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. + + 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 From 8ee0fbe6a3af6ac1044d71ec5408139e8858fb11 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 31 Oct 2023 17:23:01 +0000 Subject: [PATCH 93/93] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9a249286..4bc9d199 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Say goodbye to time-consuming manual searches, and let ![link to main GitHub showing Forks number](https://img.shields.io/github/forks/arc53/docsgpt?style=social) ![link to license file](https://img.shields.io/github/license/arc53/docsgpt) ![link to discord](https://img.shields.io/discord/1070046503302877216) - ![X (formerly Twitter) URL](https://img.shields.io/twitter/url?url=https%3A%2F%2Ftwitter.com%2FATushynski) + ![X (formerly Twitter) URL](https://img.shields.io/twitter/follow/ATushynski)