mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-06-21 03:41:55 +03:00
Compare commits
2 Commits
6330a3b494
...
16878bcfd9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
16878bcfd9 | ||
|
|
a2b92caab0 |
38
README.md
38
README.md
@ -12,6 +12,44 @@
|
||||
|
||||
\[English\] | [简体中文](https://github.com/blakeblackshear/frigate/blob/dev/README_CN.md)
|
||||
|
||||
---
|
||||
|
||||
<p align="center">
|
||||
<a href="https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=frigate">
|
||||
<img src="docs/static/img/branding/atlas-cloud-logo.png" alt="Atlas Cloud" width="200">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<b><a href="https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=frigate">Atlas Cloud</a></b> is an OpenAI-compatible inference platform that can power Frigate's
|
||||
<a href="https://docs.frigate.video/configuration/genai/">Generative AI</a> features as a drop-in multimodal LLM backend.
|
||||
Point the <code>atlas</code> provider at Atlas Cloud and use a vision-capable model
|
||||
(such as <code>qwen/qwen3-vl-235b-a22b-thinking</code> or <code>Qwen/Qwen3-VL-235B-A22B-Instruct</code>)
|
||||
to generate natural-language object and review descriptions from detection frames —
|
||||
no local GPU required. See the <a href="https://docs.frigate.video/configuration/genai/">GenAI configuration docs</a>
|
||||
to get started, or grab a <a href="https://www.atlascloud.ai/console/coding-plan">coding plan</a>.
|
||||
</p>
|
||||
|
||||
<details>
|
||||
<summary>Vision-capable Atlas Cloud models for GenAI descriptions</summary>
|
||||
|
||||
Frigate's GenAI features require a **vision-capable** model. Good multimodal choices on Atlas Cloud include:
|
||||
|
||||
- `qwen/qwen3-vl-235b-a22b-thinking`
|
||||
- `Qwen/Qwen3-VL-235B-A22B-Instruct`
|
||||
- `qwen/qwen3-vl-30b-a3b-instruct`
|
||||
- `qwen/qwen3-vl-30b-a3b-thinking`
|
||||
- `qwen/qwen3-vl-8b-instruct`
|
||||
- `google/gemini-3.5-flash`
|
||||
- `google/gemini-3.1-pro-preview`
|
||||
|
||||
The full, always-current model catalog is available at the
|
||||
[Atlas Cloud console](https://www.atlascloud.ai/console).
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
A complete and local NVR designed for [Home Assistant](https://www.home-assistant.io) with AI object detection. Uses OpenCV and Tensorflow to perform realtime object detection locally for IP cameras.
|
||||
|
||||
Use of a GPU or AI accelerator is highly recommended. AI accelerators will outperform even the best CPUs with very little overhead. See Frigate's supported [object detectors](https://docs.frigate.video/configuration/object_detectors/).
|
||||
|
||||
37
README_CN.md
37
README_CN.md
@ -12,6 +12,43 @@
|
||||
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
|
||||
---
|
||||
|
||||
<p align="center">
|
||||
<a href="https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=frigate">
|
||||
<img src="docs/static/img/branding/atlas-cloud-logo.png" alt="Atlas Cloud" width="200">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<b><a href="https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=frigate">Atlas Cloud</a></b> 是一个兼容 OpenAI 接口的推理平台,可作为即插即用的多模态 LLM 后端,
|
||||
为 Frigate 的<a href="https://docs.frigate.video/configuration/genai/">生成式 AI(Generative AI)</a>功能提供算力支持。
|
||||
只需将 <code>atlas</code> provider 指向 Atlas Cloud,并选用一个支持视觉的模型
|
||||
(例如 <code>qwen/qwen3-vl-235b-a22b-thinking</code> 或 <code>Qwen/Qwen3-VL-235B-A22B-Instruct</code>),
|
||||
即可基于检测帧画面生成自然语言的物体描述与审查摘要,无需本地 GPU。
|
||||
请参阅 <a href="https://docs.frigate.video/configuration/genai/">GenAI 配置文档</a>开始使用,
|
||||
或了解 <a href="https://www.atlascloud.ai/console/coding-plan">coding plan</a>。
|
||||
</p>
|
||||
|
||||
<details>
|
||||
<summary>适合做 GenAI 描述的 Atlas Cloud 多模态模型</summary>
|
||||
|
||||
Frigate 的 GenAI 功能要求使用**支持视觉**的模型。Atlas Cloud 上推荐的多模态模型包括:
|
||||
|
||||
- `qwen/qwen3-vl-235b-a22b-thinking`
|
||||
- `Qwen/Qwen3-VL-235B-A22B-Instruct`
|
||||
- `qwen/qwen3-vl-30b-a3b-instruct`
|
||||
- `qwen/qwen3-vl-30b-a3b-thinking`
|
||||
- `qwen/qwen3-vl-8b-instruct`
|
||||
- `google/gemini-3.5-flash`
|
||||
- `google/gemini-3.1-pro-preview`
|
||||
|
||||
完整且实时更新的模型列表请见 [Atlas Cloud 控制台](https://www.atlascloud.ai/console)。
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
一个完整的本地网络视频录像机(NVR),专为[Home Assistant](https://www.home-assistant.io)设计,具备 AI 目标/物体检测功能。使用 OpenCV 和 TensorFlow 在本地为 IP 摄像头执行实时物体检测。
|
||||
|
||||
强烈推荐使用 GPU 或者 AI 加速器(例如[Google Coral 加速器](https://coral.ai/products/) 或者 [Hailo](https://hailo.ai/)等)。它们的运行效率远远高于现在的顶级 CPU,并且功耗也极低。
|
||||
|
||||
@ -386,3 +386,44 @@ genai:
|
||||
|
||||
</TabItem>
|
||||
</ConfigTabs>
|
||||
|
||||
### Atlas Cloud
|
||||
|
||||
[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=frigate) is an OpenAI-compatible inference platform that serves a range of vision-capable models, so it can act as a drop-in multimodal backend for Frigate's Generative AI features. The `atlas` provider defaults its base URL to the Atlas Cloud endpoint, so a minimal config only needs your API key and a model.
|
||||
|
||||
#### Supported Models
|
||||
|
||||
You must use a vision capable model with Frigate. Recommended multimodal models on Atlas Cloud include `qwen/qwen3-vl-235b-a22b-thinking`, `Qwen/Qwen3-VL-235B-A22B-Instruct`, `qwen/qwen3-vl-30b-a3b-instruct`, and `google/gemini-3.5-flash`. The full, always-current catalog is available in the [Atlas Cloud console](https://www.atlascloud.ai/console).
|
||||
|
||||
#### Get API Key
|
||||
|
||||
To start using Atlas Cloud, create an API key from the [Atlas Cloud console](https://www.atlascloud.ai/console/api-keys).
|
||||
|
||||
#### Configuration
|
||||
|
||||
<ConfigTabs>
|
||||
<TabItem value="ui">
|
||||
|
||||
1. Navigate to <NavPath path="Settings > Enrichments > Generative AI" />.
|
||||
- Set **Provider** to `atlas`
|
||||
- Set **API key** to your Atlas Cloud API key (or use an environment variable such as `{FRIGATE_ATLAS_API_KEY}`)
|
||||
- Set **Model** to a vision-capable model (e.g., `qwen/qwen3-vl-235b-a22b-thinking`)
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="yaml">
|
||||
|
||||
```yaml
|
||||
genai:
|
||||
provider: atlas
|
||||
api_key: "{FRIGATE_ATLAS_API_KEY}"
|
||||
model: qwen/qwen3-vl-235b-a22b-thinking
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</ConfigTabs>
|
||||
|
||||
:::note
|
||||
|
||||
The `atlas` provider points to `https://api.atlascloud.ai/v1` by default. To target a different OpenAI-compatible endpoint, set `base_url` explicitly.
|
||||
|
||||
:::
|
||||
|
||||
BIN
docs/static/img/branding/atlas-cloud-logo.png
vendored
Normal file
BIN
docs/static/img/branding/atlas-cloud-logo.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 131 KiB |
@ -12,6 +12,7 @@ __all__ = ["GenAIConfig", "GenAIProviderEnum", "GenAIRoleEnum"]
|
||||
class GenAIProviderEnum(str, Enum):
|
||||
openai = "openai"
|
||||
azure_openai = "azure_openai"
|
||||
atlas = "atlas"
|
||||
gemini = "gemini"
|
||||
ollama = "ollama"
|
||||
llamacpp = "llamacpp"
|
||||
|
||||
71
frigate/genai/plugins/atlas.py
Normal file
71
frigate/genai/plugins/atlas.py
Normal file
@ -0,0 +1,71 @@
|
||||
"""Atlas Cloud Provider for Frigate AI.
|
||||
|
||||
Atlas Cloud (https://www.atlascloud.ai) is an OpenAI-compatible inference
|
||||
platform that serves a range of vision-capable models. Because its chat
|
||||
completions API follows the OpenAI standard, this provider inherits all
|
||||
transport, vision, streaming, reasoning, and tool-calling logic from
|
||||
:class:`OpenAIClient` and only overrides what is Atlas-specific:
|
||||
|
||||
- Client construction: defaults ``base_url`` to the Atlas Cloud endpoint
|
||||
when the user has not set one explicitly, so a minimal config (provider +
|
||||
api_key + model) works out of the box. A user-supplied ``base_url`` still
|
||||
takes precedence.
|
||||
- Context size: the Atlas ``/models`` endpoint does not reliably surface a
|
||||
per-model context window, so we fall back to a conservative default rather
|
||||
than the model-name heuristic used by OpenAI. It can be overridden via
|
||||
``provider_options.context_size``.
|
||||
"""
|
||||
|
||||
import logging
|
||||
from typing import Optional
|
||||
|
||||
from openai import OpenAI
|
||||
|
||||
from frigate.config import GenAIProviderEnum
|
||||
from frigate.genai import register_genai_provider
|
||||
from frigate.genai.plugins.openai import OpenAIClient
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
DEFAULT_BASE_URL = "https://api.atlascloud.ai/v1"
|
||||
|
||||
# Atlas serves large-context models, but its model listing does not expose a
|
||||
# per-model context window; default conservatively and let users override via
|
||||
# provider_options.context_size when they know their model's window.
|
||||
DEFAULT_CONTEXT_SIZE = 32000
|
||||
|
||||
|
||||
@register_genai_provider(GenAIProviderEnum.atlas)
|
||||
class AtlasClient(OpenAIClient):
|
||||
"""Generative AI client for Frigate using Atlas Cloud."""
|
||||
|
||||
def _init_provider(self) -> OpenAI:
|
||||
"""Initialize the OpenAI client pointed at Atlas Cloud.
|
||||
|
||||
Defaults ``base_url`` to the Atlas endpoint when the user has not set
|
||||
one, then defers to the OpenAI implementation for everything else.
|
||||
"""
|
||||
if not self.genai_config.base_url:
|
||||
self.genai_config.base_url = DEFAULT_BASE_URL
|
||||
|
||||
return super()._init_provider()
|
||||
|
||||
def get_context_size(self) -> int:
|
||||
"""Return the context window for Atlas models.
|
||||
|
||||
A manually specified ``context_size`` in ``provider_options`` always
|
||||
wins; otherwise fall back to a conservative default since Atlas does
|
||||
not reliably surface per-model context windows.
|
||||
"""
|
||||
if self.context_size is not None:
|
||||
return self.context_size
|
||||
|
||||
provider_context_size: Optional[int] = self.genai_config.provider_options.get(
|
||||
"context_size"
|
||||
)
|
||||
if provider_context_size is not None:
|
||||
self.context_size = provider_context_size
|
||||
return self.context_size
|
||||
|
||||
self.context_size = DEFAULT_CONTEXT_SIZE
|
||||
return self.context_size
|
||||
Loading…
Reference in New Issue
Block a user