-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'arc53:main' into feature/mobile-responsive
- Loading branch information
Showing
13 changed files
with
409 additions
and
59 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
from urllib.parse import urlparse | ||
|
||
from openapi_parser import parse | ||
|
||
try: | ||
from application.parser.file.base_parser import BaseParser | ||
except ModuleNotFoundError: | ||
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 = "" | ||
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): | ||
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) | ||
return results |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,36 +1,42 @@ | ||
Fortunately, there are many providers for LLMs, and some of them can even be run locally. | ||
# Setting Up Local Language Models for Your App | ||
|
||
There are two models used in the app: | ||
1. Embeddings. | ||
2. Text generation. | ||
Your app relies on two essential models: Embeddings and Text Generation. While OpenAI's default models work seamlessly, you have the flexibility to switch providers or even run the models locally. | ||
|
||
By default, we use OpenAI's models, but if you want to change it or even run it locally, it's very simple! | ||
## Step 1: Configure Environment Variables | ||
|
||
### Go to .env file or set environment variables: | ||
Navigate to the `.env` file or set the following environment variables: | ||
|
||
`LLM_NAME=<your Text generation>` | ||
```env | ||
LLM_NAME=<your Text Generation model> | ||
API_KEY=<API key for Text Generation> | ||
EMBEDDINGS_NAME=<LLM for Embeddings> | ||
EMBEDDINGS_KEY=<API key for Embeddings> | ||
VITE_API_STREAMING=<true or false> | ||
``` | ||
|
||
`API_KEY=<api_key for Text generation>` | ||
You can omit the keys if users provide their own. Ensure you set `LLM_NAME` and `EMBEDDINGS_NAME`. | ||
|
||
`EMBEDDINGS_NAME=<llm for embeddings>` | ||
## Step 2: Choose Your Models | ||
|
||
`EMBEDDINGS_KEY=<api_key for embeddings>` | ||
**Options for `LLM_NAME`:** | ||
- openai | ||
- manifest | ||
- cohere | ||
- Arc53/docsgpt-14b | ||
- Arc53/docsgpt-7b-falcon | ||
- llama.cpp | ||
|
||
`VITE_API_STREAMING=<true or false (true if using openai, false for all others)>` | ||
**Options for `EMBEDDINGS_NAME`:** | ||
- openai_text-embedding-ada-002 | ||
- huggingface_sentence-transformers/all-mpnet-base-v2 | ||
- huggingface_hkunlp/instructor-large | ||
- cohere_medium | ||
|
||
You don't need to provide keys if you are happy with users providing theirs, so make sure you set `LLM_NAME` and `EMBEDDINGS_NAME`. | ||
If using Llama, set `EMBEDDINGS_NAME` to `huggingface_sentence-transformers/all-mpnet-base-v2`. Download the required model and place it in the `models/` folder. | ||
|
||
Options: | ||
LLM_NAME (openai, manifest, cohere, Arc53/docsgpt-14b, Arc53/docsgpt-7b-falcon, llama.cpp) | ||
EMBEDDINGS_NAME (openai_text-embedding-ada-002, huggingface_sentence-transformers/all-mpnet-base-v2, huggingface_hkunlp/instructor-large, cohere_medium) | ||
Alternatively, for local Llama setup, run `setup.sh` and choose option 1. The script handles the DocsGPT model addition. | ||
|
||
If using Llama, set the `EMBEDDINGS_NAME` to `huggingface_sentence-transformers/all-mpnet-base-v2` and be sure to download [this model](https://d3dg1063dc54p9.cloudfront.net/models/docsgpt-7b-f16.gguf) into the `models/` folder: `https://d3dg1063dc54p9.cloudfront.net/models/docsgpt-7b-f16.gguf`. | ||
## Step 3: Local Hosting for Privacy | ||
|
||
Alternatively, if you wish to run Llama locally, you can run `setup.sh` and choose option 1 when prompted. You do not need to manually add the DocsGPT model mentioned above to your `models/` folder if you use `setup.sh`, as the script will manage that step for you. | ||
|
||
That's it! | ||
|
||
### Hosting everything locally and privately (for using our optimised open-source models) | ||
If you are working with critical data and don't want anything to leave your premises. | ||
|
||
Make sure you set `SELF_HOSTED_MODEL` as true in your `.env` variable, and for your `LLM_NAME`, you can use anything that is on Hugging Face. | ||
If working with sensitive data, host everything locally by setting `SELF_HOSTED_MODEL` to true in your `.env`. For `LLM_NAME`, use any model available on Hugging Face. | ||
That's it! Your app is now configured for local and private hosting, ensuring optimal security for critical data. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
from urllib.parse import urlparse | ||
|
||
from openapi_parser import parse | ||
|
||
try: | ||
from scripts.parser.file.base_parser import BaseParser | ||
except ModuleNotFoundError: | ||
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 = "" | ||
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): | ||
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) | ||
return results |
Oops, something went wrong.