mirror of
https://github.com/THU-MIG/yolov10.git
synced 2025-05-23 05:24:22 +08:00
Add HUB-SDK docs (#7775)
Signed-off-by: Glenn Jocher <glenn.jocher@ultralytics.com> Co-authored-by: Laughing <61612323+Laughing-q@users.noreply.github.com> Co-authored-by: Muhammad Rizwan Munawar <chr043416@gmail.com>
This commit is contained in:
parent
67ae86f006
commit
1152a06cbc
1
.github/workflows/publish.yml
vendored
1
.github/workflows/publish.yml
vendored
@ -66,7 +66,6 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
|
PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
|
||||||
INDEXNOW_KEY: ${{ secrets.INDEXNOW_KEY_DOCS }}
|
INDEXNOW_KEY: ${{ secrets.INDEXNOW_KEY_DOCS }}
|
||||||
WEGLOT_KEY: ${{ secrets.WEGLOT_KEY_DOCS }}
|
|
||||||
run: |
|
run: |
|
||||||
python docs/build_docs.py
|
python docs/build_docs.py
|
||||||
git config --global user.name "Glenn Jocher"
|
git config --global user.name "Glenn Jocher"
|
||||||
|
@ -33,24 +33,36 @@ from tqdm import tqdm
|
|||||||
|
|
||||||
DOCS = Path(__file__).parent.resolve()
|
DOCS = Path(__file__).parent.resolve()
|
||||||
SITE = DOCS.parent / "site"
|
SITE = DOCS.parent / "site"
|
||||||
LANGUAGES = False
|
|
||||||
|
|
||||||
|
|
||||||
def build_docs():
|
def build_docs(use_languages=False, clone_repos=True):
|
||||||
"""Build docs using mkdocs."""
|
"""Build docs using mkdocs."""
|
||||||
if SITE.exists():
|
if SITE.exists():
|
||||||
print(f"Removing existing {SITE}")
|
print(f"Removing existing {SITE}")
|
||||||
shutil.rmtree(SITE)
|
shutil.rmtree(SITE)
|
||||||
|
|
||||||
|
# Get hub-sdk repo
|
||||||
|
if clone_repos:
|
||||||
|
repo = "https://github.com/ultralytics/hub-sdk"
|
||||||
|
local_dir = DOCS.parent / Path(repo).name
|
||||||
|
if not local_dir.exists():
|
||||||
|
os.system(f"git clone {repo} {local_dir}")
|
||||||
|
os.system(f"git -C {local_dir} pull") # update repo
|
||||||
|
shutil.rmtree(DOCS / "en/hub/sdk")
|
||||||
|
shutil.copytree(local_dir / "docs", DOCS / "en/hub/sdk")
|
||||||
|
shutil.rmtree(DOCS / "en/hub/sdk/reference") # temporarily delete reference until we find a solution for this
|
||||||
|
print(f"Cloned/Updated {repo} in {local_dir}")
|
||||||
|
|
||||||
# Build the main documentation
|
# Build the main documentation
|
||||||
print(f"Building docs from {DOCS}")
|
print(f"Building docs from {DOCS}")
|
||||||
subprocess.run(f"mkdocs build -f {DOCS}/mkdocs.yml", check=True, shell=True)
|
subprocess.run(f"mkdocs build -f {DOCS}/mkdocs.yml", check=True, shell=True)
|
||||||
|
|
||||||
# Build other localized documentations
|
# Build other localized documentations
|
||||||
if LANGUAGES:
|
if use_languages:
|
||||||
for file in DOCS.glob("mkdocs_*.yml"):
|
for file in DOCS.glob("mkdocs_*.yml"):
|
||||||
print(f"Building MkDocs site with configuration file: {file}")
|
print(f"Building MkDocs site with configuration file: {file}")
|
||||||
subprocess.run(f"mkdocs build -f {file}", check=True, shell=True)
|
subprocess.run(f"mkdocs build -f {file}", check=True, shell=True)
|
||||||
|
update_html_links() # update .md in href links
|
||||||
print(f"Site built at {SITE}")
|
print(f"Site built at {SITE}")
|
||||||
|
|
||||||
|
|
||||||
@ -104,21 +116,13 @@ def update_page_title(file_path: Path, new_title: str):
|
|||||||
file.write(updated_content)
|
file.write(updated_content)
|
||||||
|
|
||||||
|
|
||||||
def update_html_head(key=""):
|
def update_html_head(script=""):
|
||||||
"""Update the HTML head section of each file."""
|
"""Update the HTML head section of each file."""
|
||||||
html_files = Path(SITE).rglob("*.html")
|
html_files = Path(SITE).rglob("*.html")
|
||||||
for html_file in tqdm(html_files, desc="Processing HTML files"):
|
for html_file in tqdm(html_files, desc="Processing HTML files"):
|
||||||
with html_file.open("r", encoding="utf-8") as file:
|
with html_file.open("r", encoding="utf-8") as file:
|
||||||
html_content = file.read()
|
html_content = file.read()
|
||||||
|
|
||||||
script = f"""
|
|
||||||
<script type="text/javascript" src="https://cdn.weglot.com/weglot.min.js"></script>
|
|
||||||
<script>
|
|
||||||
Weglot.initialize({{
|
|
||||||
api_key: '{key}'
|
|
||||||
}});
|
|
||||||
</script>
|
|
||||||
"""
|
|
||||||
if script in html_content: # script already in HTML file
|
if script in html_content: # script already in HTML file
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -137,13 +141,8 @@ def main():
|
|||||||
# Update titles
|
# Update titles
|
||||||
update_page_title(SITE / "404.html", new_title="Ultralytics Docs - Not Found")
|
update_page_title(SITE / "404.html", new_title="Ultralytics Docs - Not Found")
|
||||||
|
|
||||||
# Update .md in href links
|
|
||||||
if LANGUAGES:
|
|
||||||
update_html_links()
|
|
||||||
|
|
||||||
# Update HTML file head section
|
# Update HTML file head section
|
||||||
if not LANGUAGES and False:
|
# update_html_head("")
|
||||||
update_html_head(key=os.environ.get("WEGLOT_KEY"))
|
|
||||||
|
|
||||||
# Show command to serve built website
|
# Show command to serve built website
|
||||||
print('Serve site at http://localhost:8000 with "python -m http.server --directory site"')
|
print('Serve site at http://localhost:8000 with "python -m http.server --directory site"')
|
||||||
|
34
docs/coming_soon_template.md
Normal file
34
docs/coming_soon_template.md
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
description: Discover what's next for Ultralytics with our under-construction page, previewing new, groundbreaking AI and ML features coming soon.
|
||||||
|
keywords: Ultralytics, coming soon, under construction, new features, AI updates, ML advancements, YOLO, technology preview
|
||||||
|
---
|
||||||
|
|
||||||
|
# Under Construction 🏗️🌟
|
||||||
|
|
||||||
|
Welcome to the Ultralytics "Under Construction" page! Here, we're hard at work developing the next generation of AI and ML innovations. This page serves as a teaser for the exciting updates and new features we're eager to share with you!
|
||||||
|
|
||||||
|
## Exciting New Features on the Way 🎉
|
||||||
|
|
||||||
|
- **Innovative Breakthroughs:** Get ready for advanced features and services that will transform your AI and ML experience.
|
||||||
|
- **New Horizons:** Anticipate novel products that redefine AI and ML capabilities.
|
||||||
|
- **Enhanced Services:** We're upgrading our services for greater efficiency and user-friendliness.
|
||||||
|
|
||||||
|
## Stay Updated 🚧
|
||||||
|
|
||||||
|
This placeholder page is your first stop for upcoming developments. Keep an eye out for:
|
||||||
|
|
||||||
|
- **Newsletter:** Subscribe [here](https://ultralytics.com/#newsletter) for the latest news.
|
||||||
|
- **Social Media:** Follow us [here](https://www.linkedin.com/company/ultralytics) for updates and teasers.
|
||||||
|
- **Blog:** Visit our [blog](https://ultralytics.com/blog) for detailed insights.
|
||||||
|
|
||||||
|
## We Value Your Input 🗣️
|
||||||
|
|
||||||
|
Your feedback shapes our future releases. Share your thoughts and suggestions [here](https://ultralytics.com/contact).
|
||||||
|
|
||||||
|
## Thank You, Community! 🌍
|
||||||
|
|
||||||
|
Your [contributions](https://docs.ultralytics.com/help/contributing) inspire our continuous [innovation](https://github.com/ultralytics/ultralytics). Stay tuned for the big reveal of what's next in AI and ML at Ultralytics!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Excited for what's coming? Bookmark this page and get ready for a transformative AI and ML journey with Ultralytics! 🛠️🤖
|
34
docs/en/hub/api/index.md
Normal file
34
docs/en/hub/api/index.md
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
description: Discover what's next for Ultralytics with our under-construction page, previewing new, groundbreaking AI and ML features coming soon.
|
||||||
|
keywords: Ultralytics, coming soon, under construction, new features, AI updates, ML advancements, YOLO, technology preview
|
||||||
|
---
|
||||||
|
|
||||||
|
# Under Construction 🏗️🌟
|
||||||
|
|
||||||
|
Welcome to the Ultralytics "Under Construction" page! Here, we're hard at work developing the next generation of AI and ML innovations. This page serves as a teaser for the exciting updates and new features we're eager to share with you!
|
||||||
|
|
||||||
|
## Exciting New Features on the Way 🎉
|
||||||
|
|
||||||
|
- **Innovative Breakthroughs:** Get ready for advanced features and services that will transform your AI and ML experience.
|
||||||
|
- **New Horizons:** Anticipate novel products that redefine AI and ML capabilities.
|
||||||
|
- **Enhanced Services:** We're upgrading our services for greater efficiency and user-friendliness.
|
||||||
|
|
||||||
|
## Stay Updated 🚧
|
||||||
|
|
||||||
|
This placeholder page is your first stop for upcoming developments. Keep an eye out for:
|
||||||
|
|
||||||
|
- **Newsletter:** Subscribe [here](https://ultralytics.com/#newsletter) for the latest news.
|
||||||
|
- **Social Media:** Follow us [here](https://www.linkedin.com/company/ultralytics) for updates and teasers.
|
||||||
|
- **Blog:** Visit our [blog](https://ultralytics.com/blog) for detailed insights.
|
||||||
|
|
||||||
|
## We Value Your Input 🗣️
|
||||||
|
|
||||||
|
Your feedback shapes our future releases. Share your thoughts and suggestions [here](https://ultralytics.com/contact).
|
||||||
|
|
||||||
|
## Thank You, Community! 🌍
|
||||||
|
|
||||||
|
Your [contributions](https://docs.ultralytics.com/help/contributing) inspire our continuous [innovation](https://github.com/ultralytics/ultralytics). Stay tuned for the big reveal of what's next in AI and ML at Ultralytics!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Excited for what's coming? Bookmark this page and get ready for a transformative AI and ML journey with Ultralytics! 🛠️🤖
|
@ -58,4 +58,4 @@ We hope that the resources here will help you get the most out of HUB. Please br
|
|||||||
- [**Ultralytics HUB App**](app/index.md). Learn about the Ultralytics App for iOS and Android, which allows you to run models directly on your mobile device.
|
- [**Ultralytics HUB App**](app/index.md). Learn about the Ultralytics App for iOS and Android, which allows you to run models directly on your mobile device.
|
||||||
- [**iOS**](app/ios.md). Learn about YOLO CoreML models accelerated on Apple's Neural Engine on iPhones and iPads.
|
- [**iOS**](app/ios.md). Learn about YOLO CoreML models accelerated on Apple's Neural Engine on iPhones and iPads.
|
||||||
- [**Android**](app/android.md). Explore TFLite acceleration on mobile devices.
|
- [**Android**](app/android.md). Explore TFLite acceleration on mobile devices.
|
||||||
- [**Inference API**](inference_api.md). Understand how to use the Inference API for running your trained models in the cloud to generate predictions.
|
- [**Inference API**](inference-api.md). Understand how to use the Inference API for running your trained models in the cloud to generate predictions.
|
||||||
|
@ -103,7 +103,7 @@ The JSON list contains information about the detected objects, their coordinates
|
|||||||
|
|
||||||
### Detect Model Format
|
### Detect Model Format
|
||||||
|
|
||||||
YOLO detection models, such as `yolov8n.pt`, can return JSON responses from local inference, CLI API inference, and Python API inference. All of these methods produce the same JSON response format.
|
YOLO detection models, such as `yolov8n.pt`, can return JSON responses from local inference, CLI inference, and Python inference. All of these methods produce the same JSON response format.
|
||||||
|
|
||||||
!!! Example "Detect Model JSON Response"
|
!!! Example "Detect Model JSON Response"
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ YOLO detection models, such as `yolov8n.pt`, can return JSON responses from loca
|
|||||||
print(results[0].tojson())
|
print(results[0].tojson())
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "CLI API"
|
=== "CLI"
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -X POST "https://api.ultralytics.com/v1/predict/MODEL_ID" \
|
curl -X POST "https://api.ultralytics.com/v1/predict/MODEL_ID" \
|
||||||
@ -133,7 +133,7 @@ YOLO detection models, such as `yolov8n.pt`, can return JSON responses from loca
|
|||||||
-F "iou=0.45"
|
-F "iou=0.45"
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "Python API"
|
=== "Python"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
import requests
|
import requests
|
||||||
@ -201,7 +201,7 @@ YOLO detection models, such as `yolov8n.pt`, can return JSON responses from loca
|
|||||||
|
|
||||||
### Segment Model Format
|
### Segment Model Format
|
||||||
|
|
||||||
YOLO segmentation models, such as `yolov8n-seg.pt`, can return JSON responses from local inference, CLI API inference, and Python API inference. All of these methods produce the same JSON response format.
|
YOLO segmentation models, such as `yolov8n-seg.pt`, can return JSON responses from local inference, CLI inference, and Python inference. All of these methods produce the same JSON response format.
|
||||||
|
|
||||||
!!! Example "Segment Model JSON Response"
|
!!! Example "Segment Model JSON Response"
|
||||||
|
|
||||||
@ -220,7 +220,7 @@ YOLO segmentation models, such as `yolov8n-seg.pt`, can return JSON responses fr
|
|||||||
print(results[0].tojson())
|
print(results[0].tojson())
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "CLI API"
|
=== "CLI"
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -X POST "https://api.ultralytics.com/v1/predict/MODEL_ID" \
|
curl -X POST "https://api.ultralytics.com/v1/predict/MODEL_ID" \
|
||||||
@ -231,7 +231,7 @@ YOLO segmentation models, such as `yolov8n-seg.pt`, can return JSON responses fr
|
|||||||
-F "iou=0.45"
|
-F "iou=0.45"
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "Python API"
|
=== "Python"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
import requests
|
import requests
|
||||||
@ -342,7 +342,7 @@ YOLO segmentation models, such as `yolov8n-seg.pt`, can return JSON responses fr
|
|||||||
|
|
||||||
### Pose Model Format
|
### Pose Model Format
|
||||||
|
|
||||||
YOLO pose models, such as `yolov8n-pose.pt`, can return JSON responses from local inference, CLI API inference, and Python API inference. All of these methods produce the same JSON response format.
|
YOLO pose models, such as `yolov8n-pose.pt`, can return JSON responses from local inference, CLI inference, and Python inference. All of these methods produce the same JSON response format.
|
||||||
|
|
||||||
!!! Example "Pose Model JSON Response"
|
!!! Example "Pose Model JSON Response"
|
||||||
|
|
||||||
@ -361,7 +361,7 @@ YOLO pose models, such as `yolov8n-pose.pt`, can return JSON responses from loca
|
|||||||
print(results[0].tojson())
|
print(results[0].tojson())
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "CLI API"
|
=== "CLI"
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -X POST "https://api.ultralytics.com/v1/predict/MODEL_ID" \
|
curl -X POST "https://api.ultralytics.com/v1/predict/MODEL_ID" \
|
||||||
@ -372,7 +372,7 @@ YOLO pose models, such as `yolov8n-pose.pt`, can return JSON responses from loca
|
|||||||
-F "iou=0.45"
|
-F "iou=0.45"
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "Python API"
|
=== "Python"
|
||||||
|
|
||||||
```python
|
```python
|
||||||
import requests
|
import requests
|
@ -124,7 +124,7 @@ You can preview your model if you click on the **Preview** tab and upload an ima
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
You can also use our Ultralytics Cloud API to effortlessly [run inference](https://docs.ultralytics.com/hub/inference_api) with your custom model.
|
You can also use our Ultralytics Cloud API to effortlessly [run inference](inference-api.md) with your custom model.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
34
docs/en/hub/on-premise/index.md
Normal file
34
docs/en/hub/on-premise/index.md
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
description: Discover what's next for Ultralytics with our under-construction page, previewing new, groundbreaking AI and ML features coming soon.
|
||||||
|
keywords: Ultralytics, coming soon, under construction, new features, AI updates, ML advancements, YOLO, technology preview
|
||||||
|
---
|
||||||
|
|
||||||
|
# Under Construction 🏗️🌟
|
||||||
|
|
||||||
|
Welcome to the Ultralytics "Under Construction" page! Here, we're hard at work developing the next generation of AI and ML innovations. This page serves as a teaser for the exciting updates and new features we're eager to share with you!
|
||||||
|
|
||||||
|
## Exciting New Features on the Way 🎉
|
||||||
|
|
||||||
|
- **Innovative Breakthroughs:** Get ready for advanced features and services that will transform your AI and ML experience.
|
||||||
|
- **New Horizons:** Anticipate novel products that redefine AI and ML capabilities.
|
||||||
|
- **Enhanced Services:** We're upgrading our services for greater efficiency and user-friendliness.
|
||||||
|
|
||||||
|
## Stay Updated 🚧
|
||||||
|
|
||||||
|
This placeholder page is your first stop for upcoming developments. Keep an eye out for:
|
||||||
|
|
||||||
|
- **Newsletter:** Subscribe [here](https://ultralytics.com/#newsletter) for the latest news.
|
||||||
|
- **Social Media:** Follow us [here](https://www.linkedin.com/company/ultralytics) for updates and teasers.
|
||||||
|
- **Blog:** Visit our [blog](https://ultralytics.com/blog) for detailed insights.
|
||||||
|
|
||||||
|
## We Value Your Input 🗣️
|
||||||
|
|
||||||
|
Your feedback shapes our future releases. Share your thoughts and suggestions [here](https://ultralytics.com/contact).
|
||||||
|
|
||||||
|
## Thank You, Community! 🌍
|
||||||
|
|
||||||
|
Your [contributions](https://docs.ultralytics.com/help/contributing) inspire our continuous [innovation](https://github.com/ultralytics/ultralytics). Stay tuned for the big reveal of what's next in AI and ML at Ultralytics!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Excited for what's coming? Bookmark this page and get ready for a transformative AI and ML journey with Ultralytics! 🛠️🤖
|
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
comments: true
|
comments: true
|
||||||
description: Learn how to use Ultralytics YOLO through Command Line: train models, run predictions and exports models to different formats easily using terminal commands.
|
description: Learn how to use Ultralytics YOLO through Command Line, train models, run predictions and exports models to different formats easily using terminal commands.
|
||||||
keywords: Ultralytics, YOLO, CLI, train, validation, prediction, command line interface, YOLO CLI, YOLO terminal, model training, prediction, exporting
|
keywords: Ultralytics, YOLO, CLI, train, validation, prediction, command line interface, YOLO CLI, YOLO terminal, model training, prediction, exporting
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -343,17 +343,28 @@ nav:
|
|||||||
- TensorBoard: integrations/tensorboard.md
|
- TensorBoard: integrations/tensorboard.md
|
||||||
- Amazon SageMaker: integrations/amazon-sagemaker.md
|
- Amazon SageMaker: integrations/amazon-sagemaker.md
|
||||||
- HUB:
|
- HUB:
|
||||||
- hub/index.md
|
- Cloud:
|
||||||
- Quickstart: hub/quickstart.md
|
- hub/index.md
|
||||||
- Datasets: hub/datasets.md
|
- Quickstart: hub/quickstart.md
|
||||||
- Projects: hub/projects.md
|
- Datasets: hub/datasets.md
|
||||||
- Models: hub/models.md
|
- Projects: hub/projects.md
|
||||||
- Integrations: hub/integrations.md
|
- Models: hub/models.md
|
||||||
- Ultralytics HUB App:
|
- Integrations: hub/integrations.md
|
||||||
|
- Inference API: hub/inference-api.md
|
||||||
|
- On Premise:
|
||||||
|
- hub/on-premise/index.md
|
||||||
|
- App:
|
||||||
- hub/app/index.md
|
- hub/app/index.md
|
||||||
- iOS: hub/app/ios.md
|
- iOS: hub/app/ios.md
|
||||||
- Android: hub/app/android.md
|
- Android: hub/app/android.md
|
||||||
- Inference API: hub/inference_api.md
|
- Python SDK:
|
||||||
|
- hub/sdk/index.md
|
||||||
|
- Quickstart: hub/sdk/quickstart.md
|
||||||
|
- Model: hub/sdk/model.md
|
||||||
|
- Dataset: hub/sdk/dataset.md
|
||||||
|
- Project: hub/sdk/project.md
|
||||||
|
- REST API:
|
||||||
|
- hub/api/index.md
|
||||||
|
|
||||||
- Reference:
|
- Reference:
|
||||||
- cfg:
|
- cfg:
|
||||||
@ -542,6 +553,7 @@ plugins:
|
|||||||
quick-start.md: quickstart.md
|
quick-start.md: quickstart.md
|
||||||
app.md: hub/app/index.md
|
app.md: hub/app/index.md
|
||||||
sdk.md: index.md
|
sdk.md: index.md
|
||||||
|
hub/inference_api.md: hub/inference-api.md
|
||||||
usage/hyperparameter_tuning.md: integrations/ray-tune.md
|
usage/hyperparameter_tuning.md: integrations/ray-tune.md
|
||||||
reference/base_pred.md: reference/engine/predictor.md
|
reference/base_pred.md: reference/engine/predictor.md
|
||||||
reference/base_trainer.md: reference/engine/trainer.md
|
reference/base_trainer.md: reference/engine/trainer.md
|
||||||
|
@ -259,8 +259,8 @@ class Model(nn.Module):
|
|||||||
x in sys.argv for x in ("predict", "track", "mode=predict", "mode=track")
|
x in sys.argv for x in ("predict", "track", "mode=predict", "mode=track")
|
||||||
)
|
)
|
||||||
|
|
||||||
custom = {"conf": 0.25, "save": is_cli} # method defaults
|
custom = {"conf": 0.25, "save": is_cli, "mode": "predict"} # method defaults
|
||||||
args = {**self.overrides, **custom, **kwargs, "mode": "predict"} # highest priority args on the right
|
args = {**self.overrides, **custom, **kwargs} # highest priority args on the right
|
||||||
prompts = args.pop("prompts", None) # for SAM-type models
|
prompts = args.pop("prompts", None) # for SAM-type models
|
||||||
|
|
||||||
if not self.predictor:
|
if not self.predictor:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user