Compare commits

..

1 Commits

Author SHA1 Message Date
ea5e8ee7cc calculate tokens 2024-07-15 18:39:25 +08:00
63 changed files with 700 additions and 1033 deletions

View File

@ -349,7 +349,7 @@ class DocumentIndexingEstimateApi(DocumentResource):
document = self.get_document(dataset_id, document_id)
if document.indexing_status in ['completed', 'error']:
raise DocumentAlreadyFinishedError()
indexing_runner.calculate_tokens(document)
data_process_rule = document.dataset_process_rule
data_process_rule_dict = data_process_rule.to_dict()

View File

@ -3,9 +3,8 @@ from functools import wraps
from hashlib import sha1
from hmac import new as hmac_new
from flask import abort, request
from flask import abort, current_app, request
from configs import dify_config
from extensions.ext_database import db
from models.model import EndUser
@ -13,12 +12,12 @@ from models.model import EndUser
def inner_api_only(view):
@wraps(view)
def decorated(*args, **kwargs):
if not dify_config.INNER_API:
if not current_app.config['INNER_API']:
abort(404)
# get header 'X-Inner-Api-Key'
inner_api_key = request.headers.get('X-Inner-Api-Key')
if not inner_api_key or inner_api_key != dify_config.INNER_API_KEY:
if not inner_api_key or inner_api_key != current_app.config['INNER_API_KEY']:
abort(404)
return view(*args, **kwargs)
@ -29,7 +28,7 @@ def inner_api_only(view):
def inner_api_user_auth(view):
@wraps(view)
def decorated(*args, **kwargs):
if not dify_config.INNER_API:
if not current_app.config['INNER_API']:
return view(*args, **kwargs)
# get header 'X-Inner-Api-Key'

View File

@ -1,7 +1,7 @@
from flask import current_app
from flask_restful import Resource, fields, marshal_with
from configs import dify_config
from controllers.service_api import api
from controllers.service_api.app.error import AppUnavailableError
from controllers.service_api.wraps import validate_app_token
@ -78,7 +78,7 @@ class AppParameterApi(Resource):
"transfer_methods": ["remote_url", "local_file"]
}}),
'system_parameters': {
'image_file_size_limit': dify_config.UPLOAD_IMAGE_FILE_SIZE_LIMIT
'image_file_size_limit': current_app.config.get('UPLOAD_IMAGE_FILE_SIZE_LIMIT')
}
}

View File

@ -1,6 +1,6 @@
from flask import current_app
from flask_restful import Resource
from configs import dify_config
from controllers.service_api import api
@ -9,7 +9,7 @@ class IndexApi(Resource):
return {
"welcome": "Dify OpenAPI",
"api_version": "v1",
"server_version": dify_config.CURRENT_VERSION,
"server_version": current_app.config['CURRENT_VERSION']
}

View File

@ -1,6 +1,6 @@
from flask import current_app
from flask_restful import fields, marshal_with
from configs import dify_config
from controllers.web import api
from controllers.web.error import AppUnavailableError
from controllers.web.wraps import WebApiResource
@ -75,7 +75,7 @@ class AppParameterApi(WebApiResource):
"transfer_methods": ["remote_url", "local_file"]
}}),
'system_parameters': {
'image_file_size_limit': dify_config.UPLOAD_IMAGE_FILE_SIZE_LIMIT
'image_file_size_limit': current_app.config.get('UPLOAD_IMAGE_FILE_SIZE_LIMIT')
}
}

View File

@ -1,8 +1,8 @@
from flask import current_app
from flask_restful import fields, marshal_with
from werkzeug.exceptions import Forbidden
from configs import dify_config
from controllers.web import api
from controllers.web.wraps import WebApiResource
from extensions.ext_database import db
@ -84,7 +84,7 @@ class AppSiteInfo:
self.can_replace_logo = can_replace_logo
if can_replace_logo:
base_url = dify_config.FILES_URL
base_url = current_app.config.get('FILES_URL')
remove_webapp_brand = tenant.custom_config_dict.get('remove_webapp_brand', False)
replace_webapp_logo = f'{base_url}/files/workspaces/{tenant.id}/webapp-logo' if tenant.custom_config_dict.get('replace_webapp_logo') else None
self.custom_config = {

View File

@ -255,12 +255,6 @@ class AdvancedChatAppRunner(AppRunner):
)
index += 1
time.sleep(0.01)
else:
queue_manager.publish(
QueueTextChunkEvent(
text=text
), PublishFrom.APPLICATION_MANAGER
)
queue_manager.publish(
QueueStopEvent(stopped_by=stopped_by),

View File

@ -214,6 +214,61 @@ class IndexingRunner:
dataset_document.stopped_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
db.session.commit()
def calculate_tokens(self, tenant_id: str, tokens: int, dataset_id: str = None,
indexing_technique: str = 'economy') -> dict:
"""
Estimate the indexing for the document.
"""
embedding_model_instance = None
if dataset_id:
dataset = Dataset.query.filter_by(
id=dataset_id
).first()
if not dataset:
raise ValueError('Dataset not found.')
if dataset.indexing_technique == 'high_quality' or indexing_technique == 'high_quality':
if dataset.embedding_model_provider:
embedding_model_instance = self.model_manager.get_model_instance(
tenant_id=tenant_id,
provider=dataset.embedding_model_provider,
model_type=ModelType.TEXT_EMBEDDING,
model=dataset.embedding_model
)
else:
embedding_model_instance = self.model_manager.get_default_model_instance(
tenant_id=tenant_id,
model_type=ModelType.TEXT_EMBEDDING,
)
else:
if indexing_technique == 'high_quality':
embedding_model_instance = self.model_manager.get_default_model_instance(
tenant_id=tenant_id,
model_type=ModelType.TEXT_EMBEDDING,
)
preview_texts = []
total_segments = 0
total_price = 0
currency = 'USD'
if embedding_model_instance:
embedding_model_type_instance = cast(TextEmbeddingModel, embedding_model_instance.model_type_instance)
embedding_price_info = embedding_model_type_instance.get_price(
model=embedding_model_instance.model,
credentials=embedding_model_instance.credentials,
price_type=PriceType.INPUT,
tokens=tokens
)
total_price = '{:f}'.format(embedding_price_info.total_amount)
currency = embedding_price_info.currency
return {
"total_segments": total_segments,
"tokens": tokens,
"total_price": total_price,
"currency": currency,
"preview": preview_texts
}
def indexing_estimate(self, tenant_id: str, extract_settings: list[ExtractSetting], tmp_processing_rule: dict,
doc_form: str = None, doc_language: str = 'English', dataset_id: str = None,
indexing_technique: str = 'economy') -> dict:

View File

@ -7,7 +7,7 @@ features:
- agent-thought
model_properties:
mode: chat
context_size: 128000
context_size: 32000
parameter_rules:
- name: temperature
use_template: temperature

View File

@ -7,7 +7,7 @@ features:
- agent-thought
model_properties:
mode: chat
context_size: 128000
context_size: 32000
parameter_rules:
- name: temperature
use_template: temperature

View File

@ -616,34 +616,30 @@ class OAIAPICompatLargeLanguageModel(_CommonOAI_API_Compat, LargeLanguageModel):
message = cast(AssistantPromptMessage, message)
message_dict = {"role": "assistant", "content": message.content}
if message.tool_calls:
function_calling_type = credentials.get('function_calling_type', 'no_call')
if function_calling_type == 'tool_call':
message_dict["tool_calls"] = [tool_call.dict() for tool_call in
message.tool_calls]
elif function_calling_type == 'function_call':
function_call = message.tool_calls[0]
message_dict["function_call"] = {
"name": function_call.function.name,
"arguments": function_call.function.arguments,
}
# message_dict["tool_calls"] = [helper.dump_model(PromptMessageFunction(function=tool_call)) for tool_call
# in
# message.tool_calls]
function_call = message.tool_calls[0]
message_dict["function_call"] = {
"name": function_call.function.name,
"arguments": function_call.function.arguments,
}
elif isinstance(message, SystemPromptMessage):
message = cast(SystemPromptMessage, message)
message_dict = {"role": "system", "content": message.content}
elif isinstance(message, ToolPromptMessage):
message = cast(ToolPromptMessage, message)
function_calling_type = credentials.get('function_calling_type', 'no_call')
if function_calling_type == 'tool_call':
message_dict = {
"role": "tool",
"content": message.content,
"tool_call_id": message.tool_call_id
}
elif function_calling_type == 'function_call':
message_dict = {
"role": "function",
"content": message.content,
"name": message.tool_call_id
}
# message_dict = {
# "role": "tool",
# "content": message.content,
# "tool_call_id": message.tool_call_id
# }
message_dict = {
"role": "tool" if credentials and credentials.get('function_calling_type', 'no_call') == 'tool_call' else "function",
"content": message.content,
"name": message.tool_call_id
}
else:
raise ValueError(f"Got unknown type {message}")

View File

@ -1,40 +0,0 @@
model: ernie-4.0-turbo-8k-preview
label:
en_US: Ernie-4.0-turbo-8k-preview
model_type: llm
features:
- agent-thought
model_properties:
mode: chat
context_size: 8192
parameter_rules:
- name: temperature
use_template: temperature
min: 0.1
max: 1.0
default: 0.8
- name: top_p
use_template: top_p
- name: max_tokens
use_template: max_tokens
default: 1024
min: 2
max: 2048
- name: presence_penalty
use_template: presence_penalty
default: 1.0
min: 1.0
max: 2.0
- name: frequency_penalty
use_template: frequency_penalty
- name: response_format
use_template: response_format
- name: disable_search
label:
zh_Hans: 禁用搜索
en_US: Disable Search
type: boolean
help:
zh_Hans: 禁用模型自行进行外部搜索。
en_US: Disable the model to perform external search.
required: false

View File

@ -138,7 +138,6 @@ class ErnieBotModel:
'ernie-lite-8k-0922': 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant',
'ernie-lite-8k-0308': 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-lite-8k',
'ernie-character-8k-0321': 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-char-8k',
'ernie-4.0-tutbo-8k-preview': 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-4.0-turbo-8k-preview',
}
function_calling_supports = [
@ -150,7 +149,6 @@ class ErnieBotModel:
'ernie-3.5-4k-0205',
'ernie-3.5-128k',
'ernie-4.0-8k'
'ernie-4.0-turbo-8k-preview'
]
api_key: str = ''

View File

@ -5,7 +5,7 @@ from typing import TYPE_CHECKING, Optional
import httpx
from ..core._base_api import BaseAPI
from ..core._base_type import NOT_GIVEN, Body, Headers, NotGiven
from ..core._base_type import NOT_GIVEN, Headers, NotGiven
from ..core._http_client import make_user_request_input
from ..types.image import ImagesResponded
@ -28,9 +28,7 @@ class Images(BaseAPI):
size: Optional[str] | NotGiven = NOT_GIVEN,
style: Optional[str] | NotGiven = NOT_GIVEN,
user: str | NotGiven = NOT_GIVEN,
request_id: Optional[str] | NotGiven = NOT_GIVEN,
extra_headers: Headers | None = None,
extra_body: Body | None = None,
disable_strict_validation: Optional[bool] | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> ImagesResponded:
@ -48,12 +46,9 @@ class Images(BaseAPI):
"size": size,
"style": style,
"user": user,
"request_id": request_id,
},
options=make_user_request_input(
extra_headers=extra_headers,
extra_body=extra_body,
timeout=timeout
extra_headers=extra_headers, timeout=timeout
),
cast_type=_cast_type,
enable_stream=False,

View File

@ -11,7 +11,7 @@ from tenacity import retry
from tenacity.stop import stop_after_attempt
from . import _errors
from ._base_type import NOT_GIVEN, AnyMapping, Body, Data, Headers, NotGiven, Query, RequestFiles, ResponseT
from ._base_type import NOT_GIVEN, Body, Data, Headers, NotGiven, Query, RequestFiles, ResponseT
from ._errors import APIResponseValidationError, APIStatusError, APITimeoutError
from ._files import make_httpx_files
from ._request_opt import ClientRequestParam, UserRequestInput
@ -358,7 +358,6 @@ def make_user_request_input(
max_retries: int | None = None,
timeout: float | Timeout | None | NotGiven = NOT_GIVEN,
extra_headers: Headers = None,
extra_body: Body | None = None,
query: Query | None = None,
) -> UserRequestInput:
options: UserRequestInput = {}
@ -371,7 +370,5 @@ def make_user_request_input(
options['timeout'] = timeout
if query is not None:
options["params"] = query
if extra_body is not None:
options["extra_json"] = cast(AnyMapping, extra_body)
return options

View File

@ -1,6 +1,7 @@
from typing import Any
from configs import dify_config
from flask import current_app
from core.rag.datasource.keyword.jieba.jieba import Jieba
from core.rag.datasource.keyword.keyword_base import BaseKeyword
from core.rag.models.document import Document
@ -13,8 +14,8 @@ class Keyword:
self._keyword_processor = self._init_keyword()
def _init_keyword(self) -> BaseKeyword:
config = dify_config
keyword_type = config.KEYWORD_STORE
config = current_app.config
keyword_type = config.get('KEYWORD_STORE')
if not keyword_type:
raise ValueError("Keyword store must be specified.")

View File

@ -46,6 +46,7 @@ class FirecrawlApp:
raise Exception(f'Failed to scrape URL. Status code: {response.status_code}')
def crawl_url(self, url, params=None) -> str:
start_time = time.time()
headers = self._prepare_headers()
json_data = {'url': url}
if params:

View File

@ -18,8 +18,8 @@ class MarkdownExtractor(BaseExtractor):
def __init__(
self,
file_path: str,
remove_hyperlinks: bool = False,
remove_images: bool = False,
remove_hyperlinks: bool = True,
remove_images: bool = True,
encoding: Optional[str] = None,
autodetect_encoding: bool = True,
):

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@ -1,27 +0,0 @@
""" Provide the input parameters type for the cogview provider class """
from typing import Any
from core.tools.errors import ToolProviderCredentialValidationError
from core.tools.provider.builtin.cogview.tools.cogview3 import CogView3Tool
from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
class COGVIEWProvider(BuiltinToolProviderController):
""" cogview provider """
def _validate_credentials(self, credentials: dict[str, Any]) -> None:
try:
CogView3Tool().fork_tool_runtime(
runtime={
"credentials": credentials,
}
).invoke(
user_id='',
tool_parameters={
"prompt": "一个城市在水晶瓶中欢快生活的场景,水彩画风格,展现出微观与珠宝般的美丽。",
"size": "square",
"n": 1
},
)
except Exception as e:
raise ToolProviderCredentialValidationError(str(e)) from e

View File

@ -1,61 +0,0 @@
identity:
author: Waffle
name: cogview
label:
en_US: CogView
zh_Hans: CogView 绘画
pt_BR: CogView
description:
en_US: CogView art
zh_Hans: CogView 绘画
pt_BR: CogView art
icon: icon.png
tags:
- image
- productivity
credentials_for_provider:
zhipuai_api_key:
type: secret-input
required: true
label:
en_US: ZhipuAI API key
zh_Hans: ZhipuAI API key
pt_BR: ZhipuAI API key
help:
en_US: Please input your ZhipuAI API key
zh_Hans: 请输入你的 ZhipuAI API key
pt_BR: Please input your ZhipuAI API key
placeholder:
en_US: Please input your ZhipuAI API key
zh_Hans: 请输入你的 ZhipuAI API key
pt_BR: Please input your ZhipuAI API key
zhipuai_organizaion_id:
type: text-input
required: false
label:
en_US: ZhipuAI organization ID
zh_Hans: ZhipuAI organization ID
pt_BR: ZhipuAI organization ID
help:
en_US: Please input your ZhipuAI organization ID
zh_Hans: 请输入你的 ZhipuAI organization ID
pt_BR: Please input your ZhipuAI organization ID
placeholder:
en_US: Please input your ZhipuAI organization ID
zh_Hans: 请输入你的 ZhipuAI organization ID
pt_BR: Please input your ZhipuAI organization ID
zhipuai_base_url:
type: text-input
required: false
label:
en_US: ZhipuAI base URL
zh_Hans: ZhipuAI base URL
pt_BR: ZhipuAI base URL
help:
en_US: Please input your ZhipuAI base URL
zh_Hans: 请输入你的 ZhipuAI base URL
pt_BR: Please input your ZhipuAI base URL
placeholder:
en_US: Please input your ZhipuAI base URL
zh_Hans: 请输入你的 ZhipuAI base URL
pt_BR: Please input your ZhipuAI base URL

View File

@ -1,69 +0,0 @@
import random
from typing import Any, Union
from core.model_runtime.model_providers.zhipuai.zhipuai_sdk._client import ZhipuAI
from core.tools.entities.tool_entities import ToolInvokeMessage
from core.tools.tool.builtin_tool import BuiltinTool
class CogView3Tool(BuiltinTool):
""" CogView3 Tool """
def _invoke(self,
user_id: str,
tool_parameters: dict[str, Any]
) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]:
"""
Invoke CogView3 tool
"""
client = ZhipuAI(
base_url=self.runtime.credentials['zhipuai_base_url'],
api_key=self.runtime.credentials['zhipuai_api_key'],
)
size_mapping = {
'square': '1024x1024',
'vertical': '1024x1792',
'horizontal': '1792x1024',
}
# prompt
prompt = tool_parameters.get('prompt', '')
if not prompt:
return self.create_text_message('Please input prompt')
# get size
print(tool_parameters.get('prompt', 'square'))
size = size_mapping[tool_parameters.get('size', 'square')]
# get n
n = tool_parameters.get('n', 1)
# get quality
quality = tool_parameters.get('quality', 'standard')
if quality not in ['standard', 'hd']:
return self.create_text_message('Invalid quality')
# get style
style = tool_parameters.get('style', 'vivid')
if style not in ['natural', 'vivid']:
return self.create_text_message('Invalid style')
# set extra body
seed_id = tool_parameters.get('seed_id', self._generate_random_id(8))
extra_body = {'seed': seed_id}
response = client.images.generations(
prompt=prompt,
model="cogview-3",
size=size,
n=n,
extra_body=extra_body,
style=style,
quality=quality,
response_format='b64_json'
)
result = []
for image in response.data:
result.append(self.create_image_message(image=image.url))
result.append(self.create_text_message(
f'\nGenerate image source to Seed ID: {seed_id}'))
return result
@staticmethod
def _generate_random_id(length=8):
characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
random_id = ''.join(random.choices(characters, k=length))
return random_id

View File

@ -1,123 +0,0 @@
identity:
name: cogview3
author: Waffle
label:
en_US: CogView 3
zh_Hans: CogView 3 绘画
pt_BR: CogView 3
description:
en_US: CogView 3 is a powerful drawing tool that can draw the image you want based on your prompt
zh_Hans: CogView 3 是一个强大的绘画工具,它可以根据您的提示词绘制出您想要的图像
pt_BR: CogView 3 is a powerful drawing tool that can draw the image you want based on your prompt
description:
human:
en_US: CogView 3 is a text to image tool
zh_Hans: CogView 3 是一个文本到图像的工具
pt_BR: CogView 3 is a text to image tool
llm: CogView 3 is a tool used to generate images from text
parameters:
- name: prompt
type: string
required: true
label:
en_US: Prompt
zh_Hans: 提示词
pt_BR: Prompt
human_description:
en_US: Image prompt, you can check the official documentation of CogView 3
zh_Hans: 图像提示词您可以查看CogView 3 的官方文档
pt_BR: Image prompt, you can check the official documentation of CogView 3
llm_description: Image prompt of CogView 3, you should describe the image you want to generate as a list of words as possible as detailed
form: llm
- name: size
type: select
required: true
human_description:
en_US: selecting the image size
zh_Hans: 选择图像大小
pt_BR: selecting the image size
label:
en_US: Image size
zh_Hans: 图像大小
pt_BR: Image size
form: form
options:
- value: square
label:
en_US: Squre(1024x1024)
zh_Hans: 方(1024x1024)
pt_BR: Squre(1024x1024)
- value: vertical
label:
en_US: Vertical(1024x1792)
zh_Hans: 竖屏(1024x1792)
pt_BR: Vertical(1024x1792)
- value: horizontal
label:
en_US: Horizontal(1792x1024)
zh_Hans: 横屏(1792x1024)
pt_BR: Horizontal(1792x1024)
default: square
- name: n
type: number
required: true
human_description:
en_US: selecting the number of images
zh_Hans: 选择图像数量
pt_BR: selecting the number of images
label:
en_US: Number of images
zh_Hans: 图像数量
pt_BR: Number of images
form: form
min: 1
max: 1
default: 1
- name: quality
type: select
required: true
human_description:
en_US: selecting the image quality
zh_Hans: 选择图像质量
pt_BR: selecting the image quality
label:
en_US: Image quality
zh_Hans: 图像质量
pt_BR: Image quality
form: form
options:
- value: standard
label:
en_US: Standard
zh_Hans: 标准
pt_BR: Standard
- value: hd
label:
en_US: HD
zh_Hans: 高清
pt_BR: HD
default: standard
- name: style
type: select
required: true
human_description:
en_US: selecting the image style
zh_Hans: 选择图像风格
pt_BR: selecting the image style
label:
en_US: Image style
zh_Hans: 图像风格
pt_BR: Image style
form: form
options:
- value: vivid
label:
en_US: Vivid
zh_Hans: 生动
pt_BR: Vivid
- value: natural
label:
en_US: Natural
zh_Hans: 自然
pt_BR: Natural
default: vivid

View File

@ -1,4 +1,3 @@
import logging
import time
from collections.abc import Mapping
from typing import Any
@ -6,7 +5,6 @@ from typing import Any
import requests
from requests.exceptions import HTTPError
logger = logging.getLogger(__name__)
class FirecrawlApp:
def __init__(self, api_key: str | None = None, base_url: str | None = None):
@ -50,7 +48,6 @@ class FirecrawlApp:
headers = self._prepare_headers()
data = {'url': url, **kwargs}
response = self._request('POST', endpoint, data, headers)
logger.debug(f"Sent request to {endpoint=} body={data}")
if response is None:
raise HTTPError("Failed to scrape URL after multiple retries")
return response
@ -60,7 +57,6 @@ class FirecrawlApp:
headers = self._prepare_headers()
data = {'query': query, **kwargs}
response = self._request('POST', endpoint, data, headers)
logger.debug(f"Sent request to {endpoint=} body={data}")
if response is None:
raise HTTPError("Failed to perform search after multiple retries")
return response
@ -70,9 +66,8 @@ class FirecrawlApp:
):
endpoint = f'{self.base_url}/v0/crawl'
headers = self._prepare_headers(idempotency_key)
data = {'url': url, **kwargs['params']}
data = {'url': url, **kwargs}
response = self._request('POST', endpoint, data, headers)
logger.debug(f"Sent request to {endpoint=} body={data}")
if response is None:
raise HTTPError("Failed to initiate crawl after multiple retries")
job_id: str = response['jobId']

View File

@ -238,7 +238,7 @@ class ApiTool(Tool):
return int(value)
elif property['type'] == 'number':
# check if it is a float
if '.' in str(value):
if '.' in value:
return float(value)
else:
return int(value)

View File

@ -60,8 +60,6 @@ class IfElseNode(BaseNode):
final_result = all(group_result) if node_data.logical_operator == "and" else any(group_result)
selected_case_id = "true" if final_result else "false"
process_datas["condition_results"].append(
{
"group": "default",
@ -80,7 +78,11 @@ class IfElseNode(BaseNode):
error=str(e)
)
outputs = {"result": final_result, "selected_case_id": selected_case_id}
outputs = {
"result": final_result
}
if node_data.cases:
outputs["selected_case_id"] = selected_case_id
data = NodeRunResult(
status=WorkflowNodeExecutionStatus.SUCCEEDED,

View File

@ -38,8 +38,9 @@ class AzureStorage(BaseStorage):
def generate(filename: str = filename) -> Generator:
blob = client.get_blob_client(container=self.bucket_name, blob=filename)
blob_data = blob.download_blob()
yield from blob_data.chunks()
return generate(filename)
for chunk in blob_data.chunks():
yield from chunk
return generate()
def download(self, filename, target_filepath):
client = self._sync_client()

View File

@ -2,10 +2,10 @@ import datetime
import time
import click
from flask import current_app
from werkzeug.exceptions import NotFound
import app
from configs import dify_config
from extensions.ext_database import db
from models.dataset import Embedding
@ -13,7 +13,7 @@ from models.dataset import Embedding
@app.celery.task(queue='dataset')
def clean_embedding_cache_task():
click.echo(click.style('Start clean embedding cache.', fg='green'))
clean_days = int(dify_config.CLEAN_DAY_SETTING)
clean_days = int(current_app.config.get('CLEAN_DAY_SETTING'))
start_at = time.perf_counter()
thirty_days_ago = datetime.datetime.now() - datetime.timedelta(days=clean_days)
page = 1

View File

@ -2,10 +2,10 @@ import datetime
import time
import click
from flask import current_app
from werkzeug.exceptions import NotFound
import app
from configs import dify_config
from core.rag.index_processor.index_processor_factory import IndexProcessorFactory
from extensions.ext_database import db
from models.dataset import Dataset, DatasetQuery, Document
@ -14,7 +14,7 @@ from models.dataset import Dataset, DatasetQuery, Document
@app.celery.task(queue='dataset')
def clean_unused_datasets_task():
click.echo(click.style('Start clean unused datasets indexes.', fg='green'))
clean_days = int(dify_config.CLEAN_DAY_SETTING)
clean_days = int(current_app.config.get('CLEAN_DAY_SETTING'))
start_at = time.perf_counter()
thirty_days_ago = datetime.datetime.now() - datetime.timedelta(days=clean_days)
page = 1

View File

@ -6,10 +6,10 @@ from datetime import datetime, timedelta, timezone
from hashlib import sha256
from typing import Any, Optional
from flask import current_app
from sqlalchemy import func
from werkzeug.exceptions import Unauthorized
from configs import dify_config
from constants.languages import language_timezone_mapping, languages
from events.tenant_event import tenant_was_created
from extensions.ext_redis import redis_client
@ -80,7 +80,7 @@ class AccountService:
payload = {
"user_id": account.id,
"exp": datetime.now(timezone.utc).replace(tzinfo=None) + exp,
"iss": dify_config.EDITION,
"iss": current_app.config['EDITION'],
"sub": 'Console API Passport',
}
@ -524,7 +524,7 @@ class RegisterService:
TenantService.create_owner_tenant_if_not_exist(account)
dify_setup = DifySetup(
version=dify_config.CURRENT_VERSION
version=current_app.config['CURRENT_VERSION']
)
db.session.add(dify_setup)
db.session.commit()
@ -559,7 +559,7 @@ class RegisterService:
if open_id is not None or provider is not None:
AccountService.link_account_integrate(provider, open_id, account)
if dify_config.EDITION != 'SELF_HOSTED':
if current_app.config['EDITION'] != 'SELF_HOSTED':
tenant = TenantService.create_tenant(f"{account.name}'s Workspace")
TenantService.create_tenant_member(tenant, account, role='owner')
@ -623,7 +623,7 @@ class RegisterService:
'email': account.email,
'workspace_id': tenant.id,
}
expiryHours = dify_config.INVITE_EXPIRY_HOURS
expiryHours = current_app.config['INVITE_EXPIRY_HOURS']
redis_client.setex(
cls._get_invitation_token_key(token),
expiryHours * 60 * 60,

View File

@ -1,7 +1,6 @@
from collections.abc import Generator
from typing import Any, Union
from configs import dify_config
from core.app.apps.advanced_chat.app_generator import AdvancedChatAppGenerator
from core.app.apps.agent_chat.app_generator import AgentChatAppGenerator
from core.app.apps.chat.app_generator import ChatAppGenerator
@ -90,7 +89,8 @@ class AppGenerateService:
def _get_max_active_requests(app_model: App) -> int:
max_active_requests = app_model.max_active_requests
if app_model.max_active_requests is None:
max_active_requests = int(dify_config.APP_MAX_ACTIVE_REQUESTS)
from flask import current_app
max_active_requests = int(current_app.config['APP_MAX_ACTIVE_REQUESTS'])
return max_active_requests
@classmethod

View File

@ -4,10 +4,10 @@ from datetime import datetime, timezone
from typing import cast
import yaml
from flask import current_app
from flask_login import current_user
from flask_sqlalchemy.pagination import Pagination
from configs import dify_config
from constants.model_template import default_app_templates
from core.agent.entities import AgentToolEntity
from core.app.features.rate_limiting import RateLimit
@ -446,7 +446,7 @@ class AppService:
# get all tools
tools = agent_config.get('tools', [])
url_prefix = (dify_config.CONSOLE_API_URL
url_prefix = (current_app.config.get("CONSOLE_API_URL")
+ "/console/api/workspaces/current/tool-provider/builtin/")
for tool in tools:

View File

@ -6,10 +6,10 @@ import time
import uuid
from typing import Optional
from flask import current_app
from flask_login import current_user
from sqlalchemy import func
from configs import dify_config
from core.errors.error import LLMBadRequestError, ProviderTokenNotInitError
from core.model_manager import ModelManager
from core.model_runtime.entities.model_entities import ModelType
@ -650,7 +650,7 @@ class DocumentService:
elif document_data["data_source"]["type"] == "website_crawl":
website_info = document_data["data_source"]['info_list']['website_info_list']
count = len(website_info['urls'])
batch_upload_limit = int(dify_config.BATCH_UPLOAD_LIMIT)
batch_upload_limit = int(current_app.config['BATCH_UPLOAD_LIMIT'])
if count > batch_upload_limit:
raise ValueError(f"You have reached the batch upload limit of {batch_upload_limit}.")
@ -1028,7 +1028,7 @@ class DocumentService:
elif document_data["data_source"]["type"] == "website_crawl":
website_info = document_data["data_source"]['info_list']['website_info_list']
count = len(website_info['urls'])
batch_upload_limit = int(dify_config.BATCH_UPLOAD_LIMIT)
batch_upload_limit = int(current_app.config['BATCH_UPLOAD_LIMIT'])
if count > batch_upload_limit:
raise ValueError(f"You have reached the batch upload limit of {batch_upload_limit}.")

View File

@ -1,9 +1,9 @@
from enum import Enum
from typing import Optional
from flask import current_app
from pydantic import BaseModel, ConfigDict
from configs import dify_config
from core.entities.model_entities import ModelWithProviderEntity, ProviderModelWithStatusEntity
from core.entities.provider_entities import QuotaConfiguration
from core.model_runtime.entities.common_entities import I18nObject
@ -67,7 +67,7 @@ class ProviderResponse(BaseModel):
def __init__(self, **data) -> None:
super().__init__(**data)
url_prefix = (dify_config.CONSOLE_API_URL
url_prefix = (current_app.config.get("CONSOLE_API_URL")
+ f"/console/api/workspaces/current/model-providers/{self.provider}")
if self.icon_small is not None:
self.icon_small = I18nObject(
@ -96,7 +96,7 @@ class ProviderWithModelsResponse(BaseModel):
def __init__(self, **data) -> None:
super().__init__(**data)
url_prefix = (dify_config.CONSOLE_API_URL
url_prefix = (current_app.config.get("CONSOLE_API_URL")
+ f"/console/api/workspaces/current/model-providers/{self.provider}")
if self.icon_small is not None:
self.icon_small = I18nObject(
@ -119,7 +119,7 @@ class SimpleProviderEntityResponse(SimpleProviderEntity):
def __init__(self, **data) -> None:
super().__init__(**data)
url_prefix = (dify_config.CONSOLE_API_URL
url_prefix = (current_app.config.get("CONSOLE_API_URL")
+ f"/console/api/workspaces/current/model-providers/{self.provider}")
if self.icon_small is not None:
self.icon_small = I18nObject(

View File

@ -1,6 +1,6 @@
from flask import current_app
from pydantic import BaseModel, ConfigDict
from configs import dify_config
from services.billing_service import BillingService
from services.enterprise.enterprise_service import EnterpriseService
@ -51,7 +51,7 @@ class FeatureService:
cls._fulfill_params_from_env(features)
if dify_config.BILLING_ENABLED:
if current_app.config['BILLING_ENABLED']:
cls._fulfill_params_from_billing_api(features, tenant_id)
return features
@ -60,16 +60,16 @@ class FeatureService:
def get_system_features(cls) -> SystemFeatureModel:
system_features = SystemFeatureModel()
if dify_config.ENTERPRISE_ENABLED:
if current_app.config['ENTERPRISE_ENABLED']:
cls._fulfill_params_from_enterprise(system_features)
return system_features
@classmethod
def _fulfill_params_from_env(cls, features: FeatureModel):
features.can_replace_logo = dify_config.CAN_REPLACE_LOGO
features.model_load_balancing_enabled = dify_config.MODEL_LB_ENABLED
features.dataset_operator_enabled = dify_config.DATASET_OPERATOR_ENABLED
features.can_replace_logo = current_app.config['CAN_REPLACE_LOGO']
features.model_load_balancing_enabled = current_app.config['MODEL_LB_ENABLED']
features.dataset_operator_enabled = current_app.config['DATASET_OPERATOR_ENABLED']
@classmethod
def _fulfill_params_from_billing_api(cls, features: FeatureModel, tenant_id: str):

View File

@ -4,11 +4,11 @@ import uuid
from collections.abc import Generator
from typing import Union
from flask import current_app
from flask_login import current_user
from werkzeug.datastructures import FileStorage
from werkzeug.exceptions import NotFound
from configs import dify_config
from core.file.upload_file_parser import UploadFileParser
from core.rag.extractor.extract_processor import ExtractProcessor
from extensions.ext_database import db
@ -35,7 +35,7 @@ class FileService:
extension = file.filename.split('.')[-1]
if len(filename) > 200:
filename = filename.split('.')[0][:200] + '.' + extension
etl_type = dify_config.ETL_TYPE
etl_type = current_app.config['ETL_TYPE']
allowed_extensions = UNSTRUCTURED_ALLOWED_EXTENSIONS + IMAGE_EXTENSIONS if etl_type == 'Unstructured' \
else ALLOWED_EXTENSIONS + IMAGE_EXTENSIONS
if extension.lower() not in allowed_extensions:
@ -50,9 +50,9 @@ class FileService:
file_size = len(file_content)
if extension.lower() in IMAGE_EXTENSIONS:
file_size_limit = dify_config.UPLOAD_IMAGE_FILE_SIZE_LIMIT * 1024 * 1024
file_size_limit = current_app.config.get("UPLOAD_IMAGE_FILE_SIZE_LIMIT") * 1024 * 1024
else:
file_size_limit = dify_config.UPLOAD_FILE_SIZE_LIMIT * 1024 * 1024
file_size_limit = current_app.config.get("UPLOAD_FILE_SIZE_LIMIT") * 1024 * 1024
if file_size > file_size_limit:
message = f'File size exceeded. {file_size} > {file_size_limit}'
@ -73,9 +73,10 @@ class FileService:
storage.save(file_key, file_content)
# save file to db
config = current_app.config
upload_file = UploadFile(
tenant_id=current_tenant_id,
storage_type=dify_config.STORAGE_TYPE,
storage_type=config['STORAGE_TYPE'],
key=file_key,
name=filename,
size=file_size,
@ -105,9 +106,10 @@ class FileService:
storage.save(file_key, text.encode('utf-8'))
# save file to db
config = current_app.config
upload_file = UploadFile(
tenant_id=current_user.current_tenant_id,
storage_type=dify_config.STORAGE_TYPE,
storage_type=config['STORAGE_TYPE'],
key=file_key,
name=text_name + '.txt',
size=len(text),
@ -136,7 +138,7 @@ class FileService:
# extract text from file
extension = upload_file.extension
etl_type = dify_config.ETL_TYPE
etl_type = current_app.config['ETL_TYPE']
allowed_extensions = UNSTRUCTURED_ALLOWED_EXTENSIONS if etl_type == 'Unstructured' else ALLOWED_EXTENSIONS
if extension.lower() not in allowed_extensions:
raise UnsupportedFileTypeError()

View File

@ -4,8 +4,8 @@ from os import path
from typing import Optional
import requests
from flask import current_app
from configs import dify_config
from constants.languages import languages
from extensions.ext_database import db
from models.model import App, RecommendedApp
@ -25,7 +25,7 @@ class RecommendedAppService:
:param language: language
:return:
"""
mode = dify_config.HOSTED_FETCH_APP_TEMPLATES_MODE
mode = current_app.config.get('HOSTED_FETCH_APP_TEMPLATES_MODE', 'remote')
if mode == 'remote':
try:
result = cls._fetch_recommended_apps_from_dify_official(language)
@ -104,7 +104,7 @@ class RecommendedAppService:
:param language: language
:return:
"""
domain = dify_config.HOSTED_FETCH_APP_TEMPLATES_REMOTE_DOMAIN
domain = current_app.config.get('HOSTED_FETCH_APP_TEMPLATES_REMOTE_DOMAIN', 'https://tmpl.dify.ai')
url = f'{domain}/apps?language={language}'
response = requests.get(url, timeout=(3, 10))
if response.status_code != 200:
@ -134,7 +134,7 @@ class RecommendedAppService:
:param app_id: app id
:return:
"""
mode = dify_config.HOSTED_FETCH_APP_TEMPLATES_MODE
mode = current_app.config.get('HOSTED_FETCH_APP_TEMPLATES_MODE', 'remote')
if mode == 'remote':
try:
result = cls._fetch_recommended_app_detail_from_dify_official(app_id)
@ -157,7 +157,7 @@ class RecommendedAppService:
:param app_id: App ID
:return:
"""
domain = dify_config.HOSTED_FETCH_APP_TEMPLATES_REMOTE_DOMAIN
domain = current_app.config.get('HOSTED_FETCH_APP_TEMPLATES_REMOTE_DOMAIN', 'https://tmpl.dify.ai')
url = f'{domain}/apps/{app_id}'
response = requests.get(url, timeout=(3, 10))
if response.status_code != 200:

View File

@ -429,7 +429,6 @@ class ApiToolManageService:
db_provider=provider,
decrypt_credentials=True
)
user_provider.labels = labels
# add icon
ToolTransformService.repack_provider(user_provider)

View File

@ -2,7 +2,8 @@ import json
import logging
from typing import Optional, Union
from configs import dify_config
from flask import current_app
from core.tools.entities.api_entities import UserTool, UserToolProvider
from core.tools.entities.common_entities import I18nObject
from core.tools.entities.tool_bundle import ApiToolBundle
@ -28,7 +29,7 @@ class ToolTransformService:
"""
get tool provider icon url
"""
url_prefix = (dify_config.CONSOLE_API_URL
url_prefix = (current_app.config.get("CONSOLE_API_URL")
+ "/console/api/workspaces/current/tool-provider/")
if provider_type == ToolProviderType.BUILT_IN.value:

View File

@ -1,7 +1,7 @@
from flask import current_app
from flask_login import current_user
from configs import dify_config
from extensions.ext_database import db
from models.account import Tenant, TenantAccountJoin, TenantAccountJoinRole
from services.account_service import TenantService
@ -35,7 +35,7 @@ class WorkspaceService:
if can_replace_logo and TenantService.has_roles(tenant,
[TenantAccountJoinRole.OWNER, TenantAccountJoinRole.ADMIN]):
base_url = dify_config.FILES_URL
base_url = current_app.config.get('FILES_URL')
replace_webapp_logo = f'{base_url}/files/workspaces/{tenant.id}/webapp-logo' if tenant.custom_config_dict.get('replace_webapp_logo') else None
remove_webapp_brand = tenant.custom_config_dict.get('remove_webapp_brand', False)

View File

@ -4,8 +4,8 @@ import time
import click
from celery import shared_task
from flask import current_app
from configs import dify_config
from core.indexing_runner import DocumentIsPausedException, IndexingRunner
from extensions.ext_database import db
from models.dataset import Dataset, Document
@ -32,7 +32,7 @@ def document_indexing_task(dataset_id: str, document_ids: list):
if features.billing.enabled:
vector_space = features.vector_space
count = len(document_ids)
batch_upload_limit = int(dify_config.BATCH_UPLOAD_LIMIT)
batch_upload_limit = int(current_app.config['BATCH_UPLOAD_LIMIT'])
if count > batch_upload_limit:
raise ValueError(f"You have reached the batch upload limit of {batch_upload_limit}.")
if 0 < vector_space.limit <= vector_space.size:

View File

@ -4,8 +4,8 @@ import time
import click
from celery import shared_task
from flask import current_app
from configs import dify_config
from core.indexing_runner import DocumentIsPausedException, IndexingRunner
from core.rag.index_processor.index_processor_factory import IndexProcessorFactory
from extensions.ext_database import db
@ -33,7 +33,7 @@ def duplicate_document_indexing_task(dataset_id: str, document_ids: list):
if features.billing.enabled:
vector_space = features.vector_space
count = len(document_ids)
batch_upload_limit = int(dify_config.BATCH_UPLOAD_LIMIT)
batch_upload_limit = int(current_app.config['BATCH_UPLOAD_LIMIT'])
if count > batch_upload_limit:
raise ValueError(f"You have reached the batch upload limit of {batch_upload_limit}.")
if 0 < vector_space.limit <= vector_space.size:

View File

@ -3,9 +3,8 @@ import time
import click
from celery import shared_task
from flask import render_template
from flask import current_app, render_template
from configs import dify_config
from extensions.ext_mail import mail
@ -30,7 +29,7 @@ def send_invite_member_mail_task(language: str, to: str, token: str, inviter_nam
# send invite member mail using different languages
try:
url = f'{dify_config.CONSOLE_WEB_URL}/activate?token={token}'
url = f'{current_app.config.get("CONSOLE_WEB_URL")}/activate?token={token}'
if language == 'zh-Hans':
html_content = render_template('invite_member_mail_template_zh-CN.html',
to=to,

View File

@ -3,9 +3,8 @@ import time
import click
from celery import shared_task
from flask import render_template
from flask import current_app, render_template
from configs import dify_config
from extensions.ext_mail import mail
@ -25,7 +24,7 @@ def send_reset_password_mail_task(language: str, to: str, token: str):
# send reset password mail using different languages
try:
url = f'{dify_config.CONSOLE_WEB_URL}/forgot-password?token={token}'
url = f'{current_app.config.get("CONSOLE_WEB_URL")}/forgot-password?token={token}'
if language == 'zh-Hans':
html_content = render_template('reset_password_mail_template_zh-CN.html',
to=to,

View File

@ -40,7 +40,7 @@ services:
# The default value is 300 seconds.
FILES_ACCESS_TIMEOUT: 300
# The maximum number of active requests for the application, where 0 means unlimited, should be a non-negative integer.
APP_MAX_ACTIVE_REQUESTS: 0
APP_MAX_ACTIVE_REQUESTS: ${FILES_ACCESS_TIMEOUT:-0}
# When enabled, migrations will be executed prior to application startup and the application will start after the migrations have completed.
MIGRATION_ENABLED: 'true'
# The configurations of postgres database connection.

View File

@ -12,7 +12,7 @@ x-shared-env: &shared-api-worker-env
OPENAI_API_BASE: ${OPENAI_API_BASE:-https://api.openai.com/v1}
FILES_URL: ${FILES_URL:-}
FILES_ACCESS_TIMEOUT: ${FILES_ACCESS_TIMEOUT:-300}
APP_MAX_ACTIVE_REQUESTS: ${APP_MAX_ACTIVE_REQUESTS:-0}
APP_MAX_ACTIVE_REQUESTS: ${FILES_ACCESS_TIMEOUT:-0}
MIGRATION_ENABLED: ${MIGRATION_ENABLED:-true}
DEPLOY_ENV: ${DEPLOY_ENV:-PRODUCTION}
DIFY_BIND_ADDRESS: ${DIFY_BIND_ADDRESS:-0.0.0.0}

View File

@ -8,7 +8,6 @@ import Header from '@/app/components/header'
import { EventEmitterContextProvider } from '@/context/event-emitter'
import { ProviderContextProvider } from '@/context/provider-context'
import { ModalContextProvider } from '@/context/modal-context'
import LicenseInfo from '@/app/components/system-features-initor/license-info'
const Layout = ({ children }: { children: ReactNode }) => {
return (
@ -23,7 +22,6 @@ const Layout = ({ children }: { children: ReactNode }) => {
<Header />
</HeaderWrapper>
{children}
<LicenseInfo />
</ModalContextProvider>
</ProviderContextProvider>
</EventEmitterContextProvider>

View File

@ -17,6 +17,7 @@ import Switch from '@/app/components/base/switch'
import { ChangeType, InputVarType } from '@/app/components/workflow/types'
const TEXT_MAX_LENGTH = 256
const PARAGRAPH_MAX_LENGTH = 1032 * 32
export type IConfigModalProps = {
isCreate?: boolean
@ -166,7 +167,7 @@ const ConfigModal: FC<IConfigModalProps> = ({
{isStringInput && (
<Field title={t('appDebug.variableConig.maxLength')}>
<ConfigString maxLength={type === InputVarType.textInput ? TEXT_MAX_LENGTH : Infinity} modelId={modelConfig.model_id} value={max_length} onChange={handlePayloadChange('max_length')} />
<ConfigString maxLength={type === InputVarType.textInput ? TEXT_MAX_LENGTH : PARAGRAPH_MAX_LENGTH} modelId={modelConfig.model_id} value={max_length} onChange={handlePayloadChange('max_length')} />
</Field>
)}

View File

@ -1,8 +1,6 @@
import React, { useEffect, useRef, useState } from 'react'
import mermaid from 'mermaid'
import { usePrevious } from 'ahooks'
import CryptoJS from 'crypto-js'
import { ExclamationTriangleIcon } from '@heroicons/react/24/outline'
import LoadingAnim from '@/app/components/base/chat/chat/loading-anim'
let mermaidAPI: any
@ -42,15 +40,32 @@ const Flowchart = React.forwardRef((props: {
}, ref) => {
const [svgCode, setSvgCode] = useState(null)
const chartId = useRef(`flowchart_${CryptoJS.MD5(props.PrimitiveCode).toString()}`)
const prevPrimitiveCode = usePrevious(props.PrimitiveCode)
const [isRender, setIsRender] = useState(false)
const [isLoading, setIsLoading] = useState(true)
const timeRef = useRef<NodeJS.Timeout>()
const [errMsg, setErrMsg] = useState('')
const clearFlowchartCache = () => {
for (let i = localStorage.length - 1; i >= 0; --i) {
const key = localStorage.key(i)
if (key && key.startsWith('flowchart_'))
localStorage.removeItem(key)
}
}
const renderFlowchart = async (PrimitiveCode: string) => {
try {
const cachedSvg: any = localStorage.getItem(chartId.current)
if (cachedSvg) {
setSvgCode(cachedSvg)
setIsLoading(false)
return
}
if (typeof window !== 'undefined' && mermaidAPI) {
const svgGraph = await mermaidAPI.render(chartId.current, PrimitiveCode)
const dom = new DOMParser().parseFromString(svgGraph.svg, 'text/xml')
if (!dom.querySelector('g.main'))
throw new Error('empty svg')
const base64Svg: any = await svgToBase64(svgGraph.svg)
setSvgCode(base64Svg)
setIsLoading(false)
@ -59,26 +74,30 @@ const Flowchart = React.forwardRef((props: {
}
}
catch (error) {
if (prevPrimitiveCode === props.PrimitiveCode) {
setIsLoading(false)
setErrMsg((error as Error).message)
}
clearFlowchartCache()
// eslint-disable-next-line @typescript-eslint/no-use-before-define
handleReRender()
}
}
useEffect(() => {
const cachedSvg: any = localStorage.getItem(chartId.current)
if (cachedSvg) {
setSvgCode(cachedSvg)
setIsLoading(false)
return
}
if (timeRef.current)
clearTimeout(timeRef.current)
const handleReRender = () => {
setIsRender(false)
setSvgCode(null)
if (chartId.current)
localStorage.removeItem(chartId.current)
timeRef.current = setTimeout(() => {
setTimeout(() => {
setIsRender(true)
renderFlowchart(props.PrimitiveCode)
}, 300)
}, 100)
}
useEffect(() => {
setIsRender(false)
setTimeout(() => {
setIsRender(true)
renderFlowchart(props.PrimitiveCode)
}, 100)
}, [props.PrimitiveCode])
return (
@ -86,24 +105,16 @@ const Flowchart = React.forwardRef((props: {
// @ts-expect-error
<div ref={ref}>
{
svgCode
&& <div className="mermaid" style={style}>
{svgCode && <img src={svgCode} style={{ width: '100%', height: 'auto' }} alt="Mermaid chart" />}
</div>
isRender
&& <div className="mermaid" style={style}>
{svgCode && <img src={svgCode} style={{ width: '100%', height: 'auto' }} alt="Mermaid chart" />}
</div>
}
{isLoading
&& <div className='py-4 px-[26px]'>
<LoadingAnim type='text' />
</div>
}
{
errMsg
&& <div className='py-4 px-[26px]'>
<ExclamationTriangleIcon className='w-6 h-6 text-red-500' />
&nbsp;
{errMsg}
</div>
}
</div>
)
})

View File

@ -213,7 +213,7 @@ Workflow applications offers non-session support and is ideal for translation, a
---
<Heading
url='/workflows/tasks/:task_id/stop'
url='/workflows/:task_id/stop'
method='POST'
title='Stop Generate'
name='#stop-generatebacks'
@ -231,9 +231,9 @@ Workflow applications offers non-session support and is ideal for translation, a
</Col>
<Col sticky>
### Request Example
<CodeGroup title="Request" tag="POST" label="/workflows/tasks/:task_id/stop" targetCode={`curl -X POST '${props.appDetail.api_base_url}/workflows/tasks/:task_id/stop' \\\n-H 'Authorization: Bearer {api_key}' \\\n-H 'Content-Type: application/json' \\\n--data-raw '{"user": "abc-123"}'`}>
<CodeGroup title="Request" tag="POST" label="/workflows/:task_id/stop" targetCode={`curl -X POST '${props.appDetail.api_base_url}/workflows/:task_id/stop' \\\n-H 'Authorization: Bearer {api_key}' \\\n-H 'Content-Type: application/json' \\\n--data-raw '{"user": "abc-123"}'`}>
```bash {{ title: 'cURL' }}
curl -X POST '${props.appDetail.api_base_url}/workflows/tasks/:task_id/stop' \
curl -X POST '${props.appDetail.api_base_url}/workflows/:task_id/stop' \
-H 'Authorization: Bearer {api_key}' \
-H 'Content-Type: application/json' \
--data-raw '{

View File

@ -209,7 +209,7 @@ Workflow 应用无会话支持,适合用于翻译/文章写作/总结 AI 等
---
<Heading
url='/workflows/tasks/:task_id/stop'
url='/workflows/:task_id/stop'
method='POST'
title='停止响应'
name='#stop-generatebacks'
@ -227,9 +227,9 @@ Workflow 应用无会话支持,适合用于翻译/文章写作/总结 AI 等
</Col>
<Col sticky>
### Request Example
<CodeGroup title="Request" tag="POST" label="/workflows/tasks/:task_id/stop" targetCode={`curl -X POST '${props.appDetail.api_base_url}/workflows/tasks/:task_id/stop' \\\n-H 'Authorization: Bearer {api_key}' \\\n-H 'Content-Type: application/json' \\\n--data-raw '{"user": "abc-123"}'`}>
<CodeGroup title="Request" tag="POST" label="/workflows/:task_id/stop" targetCode={`curl -X POST '${props.appDetail.api_base_url}/workflows/:task_id/stop' \\\n-H 'Authorization: Bearer {api_key}' \\\n-H 'Content-Type: application/json' \\\n--data-raw '{"user": "abc-123"}'`}>
```bash {{ title: 'cURL' }}
curl -X POST '${props.appDetail.api_base_url}/workflows/tasks/:task_id/stop' \
curl -X POST '${props.appDetail.api_base_url}/workflows/:task_id/stop' \
-H 'Authorization: Bearer {api_key}' \
-H 'Content-Type: application/json' \
--data-raw '{

View File

@ -35,25 +35,20 @@ const ProviderCard: FC<ProviderCardProps> = ({
return (
<div
className='group relative flex flex-col px-4 py-3 h-[148px] border-[0.5px] border-black/5 rounded-xl shadow-xs hover:shadow-lg'
className='group relative flex flex-col justify-between px-4 py-3 h-[148px] border-[0.5px] border-black/5 rounded-xl shadow-xs hover:shadow-lg'
style={{ background: provider.background || DEFAULT_BACKGROUND_COLOR }}
>
<div className='grow h-0'>
<div>
<div className='py-0.5'>
<ProviderIcon provider={provider} />
</div>
{
provider.description && (
<div
className='mt-1 leading-4 text-xs text-black/[48] line-clamp-4'
title={provider.description[language] || provider.description.en_US}
>
{provider.description[language] || provider.description.en_US}
</div>
<div className='mt-1 leading-4 text-xs text-black/[48]'>{provider.description[language] || provider.description.en_US}</div>
)
}
</div>
<div className='shrink-0'>
<div>
<div className={'flex flex-wrap group-hover:hidden gap-0.5'}>
{
provider.supported_model_types.map(modelType => (

View File

@ -1,25 +0,0 @@
'use client'
import {
useEffect,
useState,
} from 'react'
import { useSystemFeaturesStore } from './store'
import { getSystemFeatures } from '@/service/common'
const SystemFeaturesInitor = ({
children,
}: { children: React.ReactElement }) => {
const [init, setInit] = useState(false)
const { setSystemFeatures } = useSystemFeaturesStore()
useEffect(() => {
getSystemFeatures().then((res) => {
setSystemFeatures(res)
}).finally(() => {
setInit(true)
})
}, [])
return init ? children : null
}
export default SystemFeaturesInitor

View File

@ -1,27 +0,0 @@
'use client'
import cn from 'classnames'
import { useSystemFeaturesStore } from '../store'
import s from './styles.module.css'
const LicenseInfo = () => {
const { systemFeatures } = useSystemFeaturesStore()
if (systemFeatures.expired_at) {
return (
<div className='fixed inset-0 flex flex-col pt-14 z-[99999]'>
<div className={cn(s.bg, 'grow flex flex-col items-center justify-center bg-white')}>
<div className='mb-3 text-xl font-semibold'>
Your organization's Dify Enterprise license has expired.
</div>
<div className='text-gray-300'>
Please contact your administrator to continue using Dify.
</div>
</div>
</div>
)
}
return null
}
export default LicenseInfo

View File

@ -1,4 +0,0 @@
.bg {
background-image: url(../../../signin/assets/background.png);
background-size: cover;
}

View File

@ -1,18 +0,0 @@
import { create } from 'zustand'
import type { SystemFeatures } from '@/types/feature'
type StateAndAction = {
systemFeatures: SystemFeatures
setSystemFeatures: (features: SystemFeatures) => void
}
export const useSystemFeaturesStore = create<StateAndAction>(set => ({
systemFeatures: {
sso_enforced_for_signin: false,
sso_enforced_for_signin_protocol: '',
sso_enforced_for_web: false,
sso_enforced_for_web_protocol: '',
expired_at: 0,
},
setSystemFeatures: features => set({ systemFeatures: features }),
}))

View File

@ -3,7 +3,6 @@ import I18nServer from './components/i18n-server'
import BrowerInitor from './components/browser-initor'
import SentryInitor from './components/sentry-initor'
import Topbar from './components/base/topbar'
import SystemFeaturesInitor from './components/system-features-initor'
import { getLocaleOnServer } from '@/i18n/server'
import './styles/globals.css'
import './styles/markdown.scss'
@ -48,9 +47,7 @@ const LocaleLayout = ({
<Topbar />
<BrowerInitor>
<SentryInitor>
<SystemFeaturesInitor>
<I18nServer>{children}</I18nServer>
</SystemFeaturesInitor>
<I18nServer>{children}</I18nServer>
</SentryInitor>
</BrowerInitor>
</body>

View File

@ -1,7 +1,7 @@
'use client'
import React from 'react'
import React, { useEffect, useState } from 'react'
import Script from 'next/script'
import { useSystemFeaturesStore } from '../components/system-features-initor/store'
import Loading from '../components/base/loading'
import Forms from './forms'
import Header from './_header'
import style from './page.module.css'
@ -9,8 +9,21 @@ import UserSSOForm from './userSSOForm'
import cn from '@/utils/classnames'
import { IS_CE_EDITION } from '@/config'
import type { SystemFeatures } from '@/types/feature'
import { defaultSystemFeatures } from '@/types/feature'
import { getSystemFeatures } from '@/service/common'
const SignIn = () => {
const { systemFeatures } = useSystemFeaturesStore()
const [loading, setLoading] = useState<boolean>(true)
const [systemFeatures, setSystemFeatures] = useState<SystemFeatures>(defaultSystemFeatures)
useEffect(() => {
getSystemFeatures().then((res) => {
setSystemFeatures(res)
}).finally(() => {
setLoading(false)
})
}, [])
return (
<>
@ -46,7 +59,19 @@ gtag('config', 'AW-11217955271"');
}>
<Header />
{!systemFeatures.sso_enforced_for_signin && (
{loading && (
<div className={
cn(
'flex flex-col items-center w-full grow justify-center',
'px-6',
'md:px-[108px]',
)
}>
<Loading type='area' />
</div>
)}
{!loading && !systemFeatures.sso_enforced_for_signin && (
<>
<Forms />
<div className='px-8 py-6 text-sm font-normal text-gray-500'>
@ -55,7 +80,7 @@ gtag('config', 'AW-11217955271"');
</>
)}
{systemFeatures.sso_enforced_for_signin && (
{!loading && systemFeatures.sso_enforced_for_signin && (
<UserSSOForm protocol={systemFeatures.sso_enforced_for_signin_protocol} />
)}
</div>

View File

@ -174,7 +174,7 @@ html[data-theme="dark"] {
--color-components-badge-status-light-success-halo: #17B26A4D;
--color-components-badge-status-light-border-outer: #222225;
--color-components-badge-status-light-high-light: #FFFFFF4D;
--color-components-badge-status-light-_high-light: #FFFFFF4D;
--color-components-badge-status-light-warning-bg: #F79009;
--color-components-badge-status-light-warning-border-inner: #FDB022;
--color-components-badge-status-light-warning-halo: #F790094D;
@ -249,7 +249,7 @@ html[data-theme="dark"] {
--color-text-accent-secondary: #84ABFF;
--color-text-accent-light-mode-only: #D9D9DE;
--color-text-text-selected: #155AEF4D;
--color-text-secondary-on-surface: #FFFFFFE5;
--color-text-_secondary-on-surface: #FFFFFFE5;
--color-text-logo-text: #E9E9EC;
--color-text-empty-state-icon: #C8CEDA4D;
@ -298,12 +298,12 @@ html[data-theme="dark"] {
--color-shadow-shadow-2: #00000014;
--color-shadow-shadow-10: #00000066;
--color-workflow-block-border: #FFFFFF14;
--color-workflow-block-panel-bg: #27272B;
--color-workflow-block-_border: #FFFFFF14;
--color-workflow-block-_panel-bg: #27272B;
--color-workflow-block-border: #FFFFFF14;
--color-workflow-block-parma-bg: #FFFFFF0D;
--color-workflow-block-nav-bg: #1D1D20;
--color-workflow-block-nav-border-right: #FFFFFF0D;
--color-workflow-block-_nav-bg: #1D1D20;
--color-workflow-block-_nav-border-right: #FFFFFF0D;
--color-workflow-block-bg: #27272B;
--color-workflow-canvas-workflow-dot-color: #8585AD26;
@ -395,167 +395,167 @@ html[data-theme="dark"] {
--color-effects-highlight-lightmode-off: #C8CEDA14;
--color-effects-image-frame: #FFFFFF;
--color-util-colors-orange-dark-orange-dark-50: #57130A;
--color-util-colors-orange-dark-orange-dark-100: #771A0D;
--color-util-colors-orange-dark-orange-dark-200: #97180C;
--color-util-colors-orange-dark-orange-dark-300: #BC1B06;
--color-util-colors-orange-dark-orange-dark-400: #E62E05;
--color-util-colors-orange-dark-orange-dark-500: #FF4405;
--color-util-colors-orange-dark-orange-dark-600: #FF692E;
--color-util-colors-orange-dark-orange-dark-700: #FF9C66;
--color-_util-colors-orange-dark-orange-dark-50: #57130A;
--color-_util-colors-orange-dark-orange-dark-100: #771A0D;
--color-_util-colors-orange-dark-orange-dark-200: #97180C;
--color-_util-colors-orange-dark-orange-dark-300: #BC1B06;
--color-_util-colors-orange-dark-orange-dark-400: #E62E05;
--color-_util-colors-orange-dark-orange-dark-500: #FF4405;
--color-_util-colors-orange-dark-orange-dark-600: #FF692E;
--color-_util-colors-orange-dark-orange-dark-700: #FF9C66;
--color-util-colors-orange-orange-50: #511C10;
--color-util-colors-orange-orange-100: #772917;
--color-util-colors-orange-orange-200: #932F19;
--color-util-colors-orange-orange-300: #B93815;
--color-util-colors-orange-orange-400: #E04F16;
--color-util-colors-orange-orange-500: #EF6820;
--color-util-colors-orange-orange-600: #F38744;
--color-util-colors-orange-orange-700: #F7B27A;
--color-_util-colors-orange-orange-50: #511C10;
--color-_util-colors-orange-orange-100: #772917;
--color-_util-colors-orange-orange-200: #932F19;
--color-_util-colors-orange-orange-300: #B93815;
--color-_util-colors-orange-orange-400: #E04F16;
--color-_util-colors-orange-orange-500: #EF6820;
--color-_util-colors-orange-orange-600: #F38744;
--color-_util-colors-orange-orange-700: #F7B27A;
--color-util-colors-pink-pink-50: #4E0D30;
--color-util-colors-pink-pink-100: #851651;
--color-util-colors-pink-pink-200: #9E165F;
--color-util-colors-pink-pink-300: #C11574;
--color-util-colors-pink-pink-400: #DD2590;
--color-util-colors-pink-pink-500: #EE46BC;
--color-util-colors-pink-pink-600: #F670C7;
--color-util-colors-pink-pink-700: #FAA7E0;
--color-_util-colors-pink-pink-50: #4E0D30;
--color-_util-colors-pink-pink-100: #851651;
--color-_util-colors-pink-pink-200: #9E165F;
--color-_util-colors-pink-pink-300: #C11574;
--color-_util-colors-pink-pink-400: #DD2590;
--color-_util-colors-pink-pink-500: #EE46BC;
--color-_util-colors-pink-pink-600: #F670C7;
--color-_util-colors-pink-pink-700: #FAA7E0;
--color-util-colors-fuchsia-fuchsia-50: #47104C;
--color-util-colors-fuchsia-fuchsia-100: #6F1877;
--color-util-colors-fuchsia-fuchsia-200: #821890;
--color-util-colors-fuchsia-fuchsia-300: #9F1AB1;
--color-util-colors-fuchsia-fuchsia-400: #BA24D5;
--color-util-colors-fuchsia-fuchsia-500: #D444F1;
--color-util-colors-fuchsia-fuchsia-600: #E478FA;
--color-util-colors-fuchsia-fuchsia-700: #EEAAFD;
--color-_util-colors-fuchsia-fuchsia-50: #47104C;
--color-_util-colors-fuchsia-fuchsia-100: #6F1877;
--color-_util-colors-fuchsia-fuchsia-200: #821890;
--color-_util-colors-fuchsia-fuchsia-300: #9F1AB1;
--color-_util-colors-fuchsia-fuchsia-400: #BA24D5;
--color-_util-colors-fuchsia-fuchsia-500: #D444F1;
--color-_util-colors-fuchsia-fuchsia-600: #E478FA;
--color-_util-colors-fuchsia-fuchsia-700: #EEAAFD;
--color-util-colors-purple-purple-50: #27115F;
--color-util-colors-purple-purple-100: #3E1C96;
--color-util-colors-purple-purple-200: #4A1FB8;
--color-util-colors-purple-purple-300: #5925DC;
--color-util-colors-purple-purple-400: #6938EF;
--color-util-colors-purple-purple-500: #7A5AF8;
--color-util-colors-purple-purple-600: #9B8AFB;
--color-util-colors-purple-purple-700: #BDB4FE;
--color-_util-colors-purple-purple-50: #27115F;
--color-_util-colors-purple-purple-100: #3E1C96;
--color-_util-colors-purple-purple-200: #4A1FB8;
--color-_util-colors-purple-purple-300: #5925DC;
--color-_util-colors-purple-purple-400: #6938EF;
--color-_util-colors-purple-purple-500: #7A5AF8;
--color-_util-colors-purple-purple-600: #9B8AFB;
--color-_util-colors-purple-purple-700: #BDB4FE;
--color-util-colors-indigo-indigo-50: #1F235B;
--color-util-colors-indigo-indigo-100: #2D3282;
--color-util-colors-indigo-indigo-200: #2D31A6;
--color-util-colors-indigo-indigo-300: #3538CD;
--color-util-colors-indigo-indigo-400: #444CE7;
--color-util-colors-indigo-indigo-500: #6172F3;
--color-util-colors-indigo-indigo-600: #8098F9;
--color-util-colors-indigo-indigo-700: #A4BCFD;
--color-_util-colors-indigo-indigo-50: #1F235B;
--color-_util-colors-indigo-indigo-100: #2D3282;
--color-_util-colors-indigo-indigo-200: #2D31A6;
--color-_util-colors-indigo-indigo-300: #3538CD;
--color-_util-colors-indigo-indigo-400: #444CE7;
--color-_util-colors-indigo-indigo-500: #6172F3;
--color-_util-colors-indigo-indigo-600: #8098F9;
--color-_util-colors-indigo-indigo-700: #A4BCFD;
--color-util-colors-blue-blue-50: #102A56;
--color-util-colors-blue-blue-100: #194185;
--color-util-colors-blue-blue-200: #1849A9;
--color-util-colors-blue-blue-300: #175CD3;
--color-util-colors-blue-blue-400: #1570EF;
--color-util-colors-blue-blue-500: #2E90FA;
--color-util-colors-blue-blue-600: #53B1FD;
--color-util-colors-blue-blue-700: #84CAFF;
--color-_util-colors-blue-blue-50: #102A56;
--color-_util-colors-blue-blue-100: #194185;
--color-_util-colors-blue-blue-200: #1849A9;
--color-_util-colors-blue-blue-300: #175CD3;
--color-_util-colors-blue-blue-400: #1570EF;
--color-_util-colors-blue-blue-500: #2E90FA;
--color-_util-colors-blue-blue-600: #53B1FD;
--color-_util-colors-blue-blue-700: #84CAFF;
--color-util-colors-blue-light-blue-light-50: #062C41;
--color-util-colors-blue-light-blue-light-100: #0B4A6F;
--color-util-colors-blue-light-blue-light-200: #065986;
--color-util-colors-blue-light-blue-light-300: #026AA2;
--color-util-colors-blue-light-blue-light-400: #0086C9;
--color-util-colors-blue-light-blue-light-500: #0BA5EC;
--color-util-colors-blue-light-blue-light-600: #36BFFA;
--color-util-colors-blue-light-blue-light-700: #7CD4FD;
--color-_util-colors-blue-light-blue-light-50: #062C41;
--color-_util-colors-blue-light-blue-light-100: #0B4A6F;
--color-_util-colors-blue-light-blue-light-200: #065986;
--color-_util-colors-blue-light-blue-light-300: #026AA2;
--color-_util-colors-blue-light-blue-light-400: #0086C9;
--color-_util-colors-blue-light-blue-light-500: #0BA5EC;
--color-_util-colors-blue-light-blue-light-600: #36BFFA;
--color-_util-colors-blue-light-blue-light-700: #7CD4FD;
--color-util-colors-gray-blue-gray-blue-50: #0D0F1C;
--color-util-colors-gray-blue-gray-blue-100: #101323;
--color-util-colors-gray-blue-gray-blue-200: #293056;
--color-util-colors-gray-blue-gray-blue-300: #363F72;
--color-util-colors-gray-blue-gray-blue-400: #3E4784;
--color-util-colors-gray-blue-gray-blue-500: #4E5BA6;
--color-util-colors-gray-blue-gray-blue-600: #717BBC;
--color-util-colors-gray-blue-gray-blue-700: #B3B8DB;
--color-_util-colors-gray-blue-gray-blue-50: #0D0F1C;
--color-_util-colors-gray-blue-gray-blue-100: #101323;
--color-_util-colors-gray-blue-gray-blue-200: #293056;
--color-_util-colors-gray-blue-gray-blue-300: #363F72;
--color-_util-colors-gray-blue-gray-blue-400: #3E4784;
--color-_util-colors-gray-blue-gray-blue-500: #4E5BA6;
--color-_util-colors-gray-blue-gray-blue-600: #717BBC;
--color-_util-colors-gray-blue-gray-blue-700: #B3B8DB;
--color-util-colors-blue-brand-blue-brand-50: #002066;
--color-util-colors-blue-brand-blue-brand-100: #00329E;
--color-util-colors-blue-brand-blue-brand-200: #003DC1;
--color-util-colors-blue-brand-blue-brand-300: #004AEB;
--color-util-colors-blue-brand-blue-brand-400: #155AEF;
--color-util-colors-blue-brand-blue-brand-500: #296DFF;
--color-util-colors-blue-brand-blue-brand-600: #5289FF;
--color-util-colors-blue-brand-blue-brand-700: #84ABFF;
--color-_util-colors-blue-brand-blue-brand-50: #002066;
--color-_util-colors-blue-brand-blue-brand-100: #00329E;
--color-_util-colors-blue-brand-blue-brand-200: #003DC1;
--color-_util-colors-blue-brand-blue-brand-300: #004AEB;
--color-_util-colors-blue-brand-blue-brand-400: #155AEF;
--color-_util-colors-blue-brand-blue-brand-500: #296DFF;
--color-_util-colors-blue-brand-blue-brand-600: #5289FF;
--color-_util-colors-blue-brand-blue-brand-700: #84ABFF;
--color-util-colors-red-red-50: #55160C;
--color-util-colors-red-red-100: #7A271A;
--color-util-colors-red-red-200: #912018;
--color-util-colors-red-red-300: #B42318;
--color-util-colors-red-red-400: #D92D20;
--color-util-colors-red-red-500: #F04438;
--color-util-colors-red-red-600: #F97066;
--color-util-colors-red-red-700: #FDA29B;
--color-_util-colors-red-red-50: #55160C;
--color-_util-colors-red-red-100: #7A271A;
--color-_util-colors-red-red-200: #912018;
--color-_util-colors-red-red-300: #B42318;
--color-_util-colors-red-red-400: #D92D20;
--color-_util-colors-red-red-500: #F04438;
--color-_util-colors-red-red-600: #F97066;
--color-_util-colors-red-red-700: #FDA29B;
--color-util-colors-green-green-50: #053321;
--color-util-colors-green-green-100: #074D31;
--color-util-colors-green-green-200: #085D3A;
--color-util-colors-green-green-300: #067647;
--color-util-colors-green-green-400: #079455;
--color-util-colors-green-green-500: #17B26A;
--color-util-colors-green-green-600: #47CD89;
--color-util-colors-green-green-700: #75E0A7;
--color-_util-colors-green-green-50: #053321;
--color-_util-colors-green-green-100: #074D31;
--color-_util-colors-green-green-200: #085D3A;
--color-_util-colors-green-green-300: #067647;
--color-_util-colors-green-green-400: #079455;
--color-_util-colors-green-green-500: #17B26A;
--color-_util-colors-green-green-600: #47CD89;
--color-_util-colors-green-green-700: #75E0A7;
--color-util-colors-warning-warning-50: #4E1D09;
--color-util-colors-warning-warning-100: #7A2E0E;
--color-util-colors-warning-warning-200: #93370D;
--color-util-colors-warning-warning-300: #B54708;
--color-util-colors-warning-warning-400: #DC6803;
--color-util-colors-warning-warning-500: #F79009;
--color-util-colors-warning-warning-600: #FDB022;
--color-util-colors-warning-warning-700: #FEC84B;
--color-_util-colors-warning-warning-50: #4E1D09;
--color-_util-colors-warning-warning-100: #7A2E0E;
--color-_util-colors-warning-warning-200: #93370D;
--color-_util-colors-warning-warning-300: #B54708;
--color-_util-colors-warning-warning-400: #DC6803;
--color-_util-colors-warning-warning-500: #F79009;
--color-_util-colors-warning-warning-600: #FDB022;
--color-_util-colors-warning-warning-700: #FEC84B;
--color-util-colors-yellow-yellow-50: #542C0D;
--color-util-colors-yellow-yellow-100: #713B12;
--color-util-colors-yellow-yellow-200: #854A0E;
--color-util-colors-yellow-yellow-300: #A15C07;
--color-util-colors-yellow-yellow-400: #CA8504;
--color-util-colors-yellow-yellow-500: #EAAA08;
--color-util-colors-yellow-yellow-600: #FAC515;
--color-util-colors-yellow-yellow-700: #FDE272;
--color-_util-colors-yellow-yellow-50: #542C0D;
--color-_util-colors-yellow-yellow-100: #713B12;
--color-_util-colors-yellow-yellow-200: #854A0E;
--color-_util-colors-yellow-yellow-300: #A15C07;
--color-_util-colors-yellow-yellow-400: #CA8504;
--color-_util-colors-yellow-yellow-500: #EAAA08;
--color-_util-colors-yellow-yellow-600: #FAC515;
--color-_util-colors-yellow-yellow-700: #FDE272;
--color-util-colors-teal-teal-50: #0A2926;
--color-util-colors-teal-teal-100: #134E48;
--color-util-colors-teal-teal-200: #125D56;
--color-util-colors-teal-teal-300: #107569;
--color-util-colors-teal-teal-400: #0E9384;
--color-util-colors-teal-teal-500: #15B79E;
--color-util-colors-teal-teal-600: #2ED3B7;
--color-util-colors-teal-teal-700: #5FE9D0;
--color-_util-colors-teal-teal-50: #0A2926;
--color-_util-colors-teal-teal-100: #134E48;
--color-_util-colors-teal-teal-200: #125D56;
--color-_util-colors-teal-teal-300: #107569;
--color-_util-colors-teal-teal-400: #0E9384;
--color-_util-colors-teal-teal-500: #15B79E;
--color-_util-colors-teal-teal-600: #2ED3B7;
--color-_util-colors-teal-teal-700: #5FE9D0;
--color-util-colors-cyan-cyan-50: #0D2D3A;
--color-util-colors-cyan-cyan-100: #164C63;
--color-util-colors-cyan-cyan-200: #155B75;
--color-util-colors-cyan-cyan-300: #0E7090;
--color-util-colors-cyan-cyan-400: #088AB2;
--color-util-colors-cyan-cyan-500: #06AED4;
--color-util-colors-cyan-cyan-600: #22CCEE;
--color-util-colors-cyan-cyan-700: #67E3F9;
--color-_util-colors-cyan-cyan-50: #0D2D3A;
--color-_util-colors-cyan-cyan-100: #164C63;
--color-_util-colors-cyan-cyan-200: #155B75;
--color-_util-colors-cyan-cyan-300: #0E7090;
--color-_util-colors-cyan-cyan-400: #088AB2;
--color-_util-colors-cyan-cyan-500: #06AED4;
--color-_util-colors-cyan-cyan-600: #22CCEE;
--color-_util-colors-cyan-cyan-700: #67E3F9;
--color-util-colors-violet-violet-50: #2E125E;
--color-util-colors-violet-violet-100: #491C96;
--color-util-colors-violet-violet-200: #5720B7;
--color-util-colors-violet-violet-300: #6927DA;
--color-util-colors-violet-violet-400: #7839EE;
--color-util-colors-violet-violet-500: #875BF7;
--color-util-colors-violet-violet-600: #A48AFB;
--color-util-colors-violet-violet-700: #C3B5FD;
--color-_util-colors-violet-violet-50: #2E125E;
--color-_util-colors-violet-violet-100: #491C96;
--color-_util-colors-violet-violet-200: #5720B7;
--color-_util-colors-violet-violet-300: #6927DA;
--color-_util-colors-violet-violet-400: #7839EE;
--color-_util-colors-violet-violet-500: #875BF7;
--color-_util-colors-violet-violet-600: #A48AFB;
--color-_util-colors-violet-violet-700: #C3B5FD;
--color-util-colors-gray-gray-50: #0C111C;
--color-util-colors-gray-gray-100: #101828;
--color-util-colors-gray-gray-200: #18222F;
--color-util-colors-gray-gray-300: #354052;
--color-util-colors-gray-gray-400: #495464;
--color-util-colors-gray-gray-500: #676F83;
--color-util-colors-gray-gray-600: #98A2B2;
--color-util-colors-gray-gray-700: #D0D5DC;
--color-_util-colors-gray-gray-50: #0C111C;
--color-_util-colors-gray-gray-100: #101828;
--color-_util-colors-gray-gray-200: #18222F;
--color-_util-colors-gray-gray-300: #354052;
--color-_util-colors-gray-gray-400: #495464;
--color-_util-colors-gray-gray-500: #676F83;
--color-_util-colors-gray-gray-600: #98A2B2;
--color-_util-colors-gray-gray-700: #D0D5DC;
--color-third-party-LangChain: #FFFFFF;
--color-third-party-Langfuse: #FFFFFF;

View File

@ -174,7 +174,7 @@ html[data-theme="light"] {
--color-components-badge-status-light-success-halo: #17B26A40;
--color-components-badge-status-light-border-outer: #FFFFFF;
--color-components-badge-status-light-high-light: #FFFFFF4D;
--color-components-badge-status-light-_high-light: #FFFFFF4D;
--color-components-badge-status-light-warning-bg: #FDB022;
--color-components-badge-status-light-warning-border-inner: #F79009;
--color-components-badge-status-light-warning-halo: #F7900940;
@ -249,7 +249,7 @@ html[data-theme="light"] {
--color-text-accent-secondary: #296DFF;
--color-text-accent-light-mode-only: #155AEF;
--color-text-text-selected: #155AEF24;
--color-text-secondary-on-surface: #FFFFFFE5;
--color-text-_secondary-on-surface: #FFFFFFE5;
--color-text-logo-text: #18222F;
--color-text-empty-state-icon: #D0D5DC;
@ -298,12 +298,12 @@ html[data-theme="light"] {
--color-shadow-shadow-2: #09090B0A;
--color-shadow-shadow-10: #09090B0D;
--color-workflow-block-border: #18181B14;
--color-workflow-block-panel-bg: #FFFFFF;
--color-workflow-block-_border: #18181B14;
--color-workflow-block-_panel-bg: #FFFFFF;
--color-workflow-block-border: #FFFFFF;
--color-workflow-block-parma-bg: #F2F4F7;
--color-workflow-block-nav-bg: #FFFFFF;
--color-workflow-block-nav-border-right: #FFFFFF;
--color-workflow-block-_nav-bg: #FFFFFF;
--color-workflow-block-_nav-border-right: #FFFFFF;
--color-workflow-block-bg: #FCFCFD;
--color-workflow-canvas-workflow-dot-color: #8585AD26;
@ -395,167 +395,167 @@ html[data-theme="light"] {
--color-effects-highlight-lightmode-off: #FFFFFF00;
--color-effects-image-frame: #FFFFFF;
--color-util-colors-orange-dark-orange-dark-50: #FFF4ED;
--color-util-colors-orange-dark-orange-dark-100: #FFE6D5;
--color-util-colors-orange-dark-orange-dark-200: #FFD6AE;
--color-util-colors-orange-dark-orange-dark-300: #FF9C66;
--color-util-colors-orange-dark-orange-dark-400: #FF692E;
--color-util-colors-orange-dark-orange-dark-500: #FF4405;
--color-util-colors-orange-dark-orange-dark-600: #E62E05;
--color-util-colors-orange-dark-orange-dark-700: #BC1B06;
--color-_util-colors-orange-dark-orange-dark-50: #FFF4ED;
--color-_util-colors-orange-dark-orange-dark-100: #FFE6D5;
--color-_util-colors-orange-dark-orange-dark-200: #FFD6AE;
--color-_util-colors-orange-dark-orange-dark-300: #FF9C66;
--color-_util-colors-orange-dark-orange-dark-400: #FF692E;
--color-_util-colors-orange-dark-orange-dark-500: #FF4405;
--color-_util-colors-orange-dark-orange-dark-600: #E62E05;
--color-_util-colors-orange-dark-orange-dark-700: #BC1B06;
--color-util-colors-orange-orange-50: #FEF6EE;
--color-util-colors-orange-orange-100: #FDEAD7;
--color-util-colors-orange-orange-200: #F9DBAF;
--color-util-colors-orange-orange-300: #F7B27A;
--color-util-colors-orange-orange-400: #F38744;
--color-util-colors-orange-orange-500: #EF6820;
--color-util-colors-orange-orange-600: #E04F16;
--color-util-colors-orange-orange-700: #B93815;
--color-_util-colors-orange-orange-50: #FEF6EE;
--color-_util-colors-orange-orange-100: #FDEAD7;
--color-_util-colors-orange-orange-200: #F9DBAF;
--color-_util-colors-orange-orange-300: #F7B27A;
--color-_util-colors-orange-orange-400: #F38744;
--color-_util-colors-orange-orange-500: #EF6820;
--color-_util-colors-orange-orange-600: #E04F16;
--color-_util-colors-orange-orange-700: #B93815;
--color-util-colors-pink-pink-50: #FDF2FA;
--color-util-colors-pink-pink-100: #FCE7F6;
--color-util-colors-pink-pink-200: #FCCEEE;
--color-util-colors-pink-pink-300: #FAA7E0;
--color-util-colors-pink-pink-400: #F670C7;
--color-util-colors-pink-pink-500: #EE46BC;
--color-util-colors-pink-pink-600: #DD2590;
--color-util-colors-pink-pink-700: #C11574;
--color-_util-colors-pink-pink-50: #FDF2FA;
--color-_util-colors-pink-pink-100: #FCE7F6;
--color-_util-colors-pink-pink-200: #FCCEEE;
--color-_util-colors-pink-pink-300: #FAA7E0;
--color-_util-colors-pink-pink-400: #F670C7;
--color-_util-colors-pink-pink-500: #EE46BC;
--color-_util-colors-pink-pink-600: #DD2590;
--color-_util-colors-pink-pink-700: #C11574;
--color-util-colors-fuchsia-fuchsia-50: #FDF4FF;
--color-util-colors-fuchsia-fuchsia-100: #FBE8FF;
--color-util-colors-fuchsia-fuchsia-200: #F6D0FE;
--color-util-colors-fuchsia-fuchsia-300: #EEAAFD;
--color-util-colors-fuchsia-fuchsia-400: #E478FA;
--color-util-colors-fuchsia-fuchsia-500: #D444F1;
--color-util-colors-fuchsia-fuchsia-600: #BA24D5;
--color-util-colors-fuchsia-fuchsia-700: #9F1AB1;
--color-_util-colors-fuchsia-fuchsia-50: #FDF4FF;
--color-_util-colors-fuchsia-fuchsia-100: #FBE8FF;
--color-_util-colors-fuchsia-fuchsia-200: #F6D0FE;
--color-_util-colors-fuchsia-fuchsia-300: #EEAAFD;
--color-_util-colors-fuchsia-fuchsia-400: #E478FA;
--color-_util-colors-fuchsia-fuchsia-500: #D444F1;
--color-_util-colors-fuchsia-fuchsia-600: #BA24D5;
--color-_util-colors-fuchsia-fuchsia-700: #9F1AB1;
--color-util-colors-purple-purple-50: #F4F3FF;
--color-util-colors-purple-purple-100: #EBE9FE;
--color-util-colors-purple-purple-200: #D9D6FE;
--color-util-colors-purple-purple-300: #BDB4FE;
--color-util-colors-purple-purple-400: #9B8AFB;
--color-util-colors-purple-purple-500: #7A5AF8;
--color-util-colors-purple-purple-600: #6938EF;
--color-util-colors-purple-purple-700: #5925DC;
--color-_util-colors-purple-purple-50: #F4F3FF;
--color-_util-colors-purple-purple-100: #EBE9FE;
--color-_util-colors-purple-purple-200: #D9D6FE;
--color-_util-colors-purple-purple-300: #BDB4FE;
--color-_util-colors-purple-purple-400: #9B8AFB;
--color-_util-colors-purple-purple-500: #7A5AF8;
--color-_util-colors-purple-purple-600: #6938EF;
--color-_util-colors-purple-purple-700: #5925DC;
--color-util-colors-indigo-indigo-50: #EEF4FF;
--color-util-colors-indigo-indigo-100: #E0EAFF;
--color-util-colors-indigo-indigo-200: #C7D7FE;
--color-util-colors-indigo-indigo-300: #A4BCFD;
--color-util-colors-indigo-indigo-400: #8098F9;
--color-util-colors-indigo-indigo-500: #6172F3;
--color-util-colors-indigo-indigo-600: #444CE7;
--color-util-colors-indigo-indigo-700: #3538CD;
--color-_util-colors-indigo-indigo-50: #EEF4FF;
--color-_util-colors-indigo-indigo-100: #E0EAFF;
--color-_util-colors-indigo-indigo-200: #C7D7FE;
--color-_util-colors-indigo-indigo-300: #A4BCFD;
--color-_util-colors-indigo-indigo-400: #8098F9;
--color-_util-colors-indigo-indigo-500: #6172F3;
--color-_util-colors-indigo-indigo-600: #444CE7;
--color-_util-colors-indigo-indigo-700: #3538CD;
--color-util-colors-blue-blue-50: #EFF8FF;
--color-util-colors-blue-blue-100: #D1E9FF;
--color-util-colors-blue-blue-200: #B2DDFF;
--color-util-colors-blue-blue-300: #84CAFF;
--color-util-colors-blue-blue-400: #53B1FD;
--color-util-colors-blue-blue-500: #2E90FA;
--color-util-colors-blue-blue-600: #1570EF;
--color-util-colors-blue-blue-700: #175CD3;
--color-_util-colors-blue-blue-50: #EFF8FF;
--color-_util-colors-blue-blue-100: #D1E9FF;
--color-_util-colors-blue-blue-200: #B2DDFF;
--color-_util-colors-blue-blue-300: #84CAFF;
--color-_util-colors-blue-blue-400: #53B1FD;
--color-_util-colors-blue-blue-500: #2E90FA;
--color-_util-colors-blue-blue-600: #1570EF;
--color-_util-colors-blue-blue-700: #175CD3;
--color-util-colors-blue-light-blue-light-50: #F0F9FF;
--color-util-colors-blue-light-blue-light-100: #E0F2FE;
--color-util-colors-blue-light-blue-light-200: #B9E6FE;
--color-util-colors-blue-light-blue-light-300: #7CD4FD;
--color-util-colors-blue-light-blue-light-400: #36BFFA;
--color-util-colors-blue-light-blue-light-500: #0BA5EC;
--color-util-colors-blue-light-blue-light-600: #0086C9;
--color-util-colors-blue-light-blue-light-700: #026AA2;
--color-_util-colors-blue-light-blue-light-50: #F0F9FF;
--color-_util-colors-blue-light-blue-light-100: #E0F2FE;
--color-_util-colors-blue-light-blue-light-200: #B9E6FE;
--color-_util-colors-blue-light-blue-light-300: #7CD4FD;
--color-_util-colors-blue-light-blue-light-400: #36BFFA;
--color-_util-colors-blue-light-blue-light-500: #0BA5EC;
--color-_util-colors-blue-light-blue-light-600: #0086C9;
--color-_util-colors-blue-light-blue-light-700: #026AA2;
--color-util-colors-gray-blue-gray-blue-50: #F8F9FC;
--color-util-colors-gray-blue-gray-blue-100: #EAECF5;
--color-util-colors-gray-blue-gray-blue-200: #D5D9EB;
--color-util-colors-gray-blue-gray-blue-300: #B3B8DB;
--color-util-colors-gray-blue-gray-blue-400: #717BBC;
--color-util-colors-gray-blue-gray-blue-500: #4E5BA6;
--color-util-colors-gray-blue-gray-blue-600: #3E4784;
--color-util-colors-gray-blue-gray-blue-700: #363F72;
--color-_util-colors-gray-blue-gray-blue-50: #F8F9FC;
--color-_util-colors-gray-blue-gray-blue-100: #EAECF5;
--color-_util-colors-gray-blue-gray-blue-200: #D5D9EB;
--color-_util-colors-gray-blue-gray-blue-300: #B3B8DB;
--color-_util-colors-gray-blue-gray-blue-400: #717BBC;
--color-_util-colors-gray-blue-gray-blue-500: #4E5BA6;
--color-_util-colors-gray-blue-gray-blue-600: #3E4784;
--color-_util-colors-gray-blue-gray-blue-700: #363F72;
--color-util-colors-blue-brand-blue-brand-50: #F5F7FF;
--color-util-colors-blue-brand-blue-brand-100: #D1E0FF;
--color-util-colors-blue-brand-blue-brand-200: #B2CAFF;
--color-util-colors-blue-brand-blue-brand-300: #84ABFF;
--color-util-colors-blue-brand-blue-brand-400: #5289FF;
--color-util-colors-blue-brand-blue-brand-500: #296DFF;
--color-util-colors-blue-brand-blue-brand-600: #155AEF;
--color-util-colors-blue-brand-blue-brand-700: #004AEB;
--color-_util-colors-blue-brand-blue-brand-50: #F5F7FF;
--color-_util-colors-blue-brand-blue-brand-100: #D1E0FF;
--color-_util-colors-blue-brand-blue-brand-200: #B2CAFF;
--color-_util-colors-blue-brand-blue-brand-300: #84ABFF;
--color-_util-colors-blue-brand-blue-brand-400: #5289FF;
--color-_util-colors-blue-brand-blue-brand-500: #296DFF;
--color-_util-colors-blue-brand-blue-brand-600: #155AEF;
--color-_util-colors-blue-brand-blue-brand-700: #004AEB;
--color-util-colors-red-red-50: #FEF3F2;
--color-util-colors-red-red-100: #FEE4E2;
--color-util-colors-red-red-200: #FECDCA;
--color-util-colors-red-red-300: #FDA29B;
--color-util-colors-red-red-400: #F97066;
--color-util-colors-red-red-500: #F04438;
--color-util-colors-red-red-600: #D92D20;
--color-util-colors-red-red-700: #B42318;
--color-_util-colors-red-red-50: #FEF3F2;
--color-_util-colors-red-red-100: #FEE4E2;
--color-_util-colors-red-red-200: #FECDCA;
--color-_util-colors-red-red-300: #FDA29B;
--color-_util-colors-red-red-400: #F97066;
--color-_util-colors-red-red-500: #F04438;
--color-_util-colors-red-red-600: #D92D20;
--color-_util-colors-red-red-700: #B42318;
--color-util-colors-green-green-50: #ECFDF3;
--color-util-colors-green-green-100: #DCFAE6;
--color-util-colors-green-green-200: #ABEFC6;
--color-util-colors-green-green-300: #75E0A7;
--color-util-colors-green-green-400: #47CD89;
--color-util-colors-green-green-500: #17B26A;
--color-util-colors-green-green-600: #079455;
--color-util-colors-green-green-700: #067647;
--color-_util-colors-green-green-50: #ECFDF3;
--color-_util-colors-green-green-100: #DCFAE6;
--color-_util-colors-green-green-200: #ABEFC6;
--color-_util-colors-green-green-300: #75E0A7;
--color-_util-colors-green-green-400: #47CD89;
--color-_util-colors-green-green-500: #17B26A;
--color-_util-colors-green-green-600: #079455;
--color-_util-colors-green-green-700: #067647;
--color-util-colors-warning-warning-50: #FFFAEB;
--color-util-colors-warning-warning-100: #FEF0C7;
--color-util-colors-warning-warning-200: #FEDF89;
--color-util-colors-warning-warning-300: #FEC84B;
--color-util-colors-warning-warning-400: #FDB022;
--color-util-colors-warning-warning-500: #F79009;
--color-util-colors-warning-warning-600: #DC6803;
--color-util-colors-warning-warning-700: #B54708;
--color-_util-colors-warning-warning-50: #FFFAEB;
--color-_util-colors-warning-warning-100: #FEF0C7;
--color-_util-colors-warning-warning-200: #FEDF89;
--color-_util-colors-warning-warning-300: #FEC84B;
--color-_util-colors-warning-warning-400: #FDB022;
--color-_util-colors-warning-warning-500: #F79009;
--color-_util-colors-warning-warning-600: #DC6803;
--color-_util-colors-warning-warning-700: #B54708;
--color-util-colors-yellow-yellow-50: #FEFBE8;
--color-util-colors-yellow-yellow-100: #FEF7C3;
--color-util-colors-yellow-yellow-200: #FEEE95;
--color-util-colors-yellow-yellow-300: #FDE272;
--color-util-colors-yellow-yellow-400: #FAC515;
--color-util-colors-yellow-yellow-500: #EAAA08;
--color-util-colors-yellow-yellow-600: #CA8504;
--color-util-colors-yellow-yellow-700: #A15C07;
--color-_util-colors-yellow-yellow-50: #FEFBE8;
--color-_util-colors-yellow-yellow-100: #FEF7C3;
--color-_util-colors-yellow-yellow-200: #FEEE95;
--color-_util-colors-yellow-yellow-300: #FDE272;
--color-_util-colors-yellow-yellow-400: #FAC515;
--color-_util-colors-yellow-yellow-500: #EAAA08;
--color-_util-colors-yellow-yellow-600: #CA8504;
--color-_util-colors-yellow-yellow-700: #A15C07;
--color-util-colors-teal-teal-50: #F0FDF9;
--color-util-colors-teal-teal-100: #CCFBEF;
--color-util-colors-teal-teal-200: #99F6E0;
--color-util-colors-teal-teal-300: #5FE9D0;
--color-util-colors-teal-teal-400: #2ED3B7;
--color-util-colors-teal-teal-500: #15B79E;
--color-util-colors-teal-teal-600: #0E9384;
--color-util-colors-teal-teal-700: #107569;
--color-_util-colors-teal-teal-50: #F0FDF9;
--color-_util-colors-teal-teal-100: #CCFBEF;
--color-_util-colors-teal-teal-200: #99F6E0;
--color-_util-colors-teal-teal-300: #5FE9D0;
--color-_util-colors-teal-teal-400: #2ED3B7;
--color-_util-colors-teal-teal-500: #15B79E;
--color-_util-colors-teal-teal-600: #0E9384;
--color-_util-colors-teal-teal-700: #107569;
--color-util-colors-cyan-cyan-50: #ECFDFF;
--color-util-colors-cyan-cyan-100: #CFF9FE;
--color-util-colors-cyan-cyan-200: #A5F0FC;
--color-util-colors-cyan-cyan-300: #67E3F9;
--color-util-colors-cyan-cyan-400: #22CCEE;
--color-util-colors-cyan-cyan-500: #06AED4;
--color-util-colors-cyan-cyan-600: #088AB2;
--color-util-colors-cyan-cyan-700: #0E7090;
--color-_util-colors-cyan-cyan-50: #ECFDFF;
--color-_util-colors-cyan-cyan-100: #CFF9FE;
--color-_util-colors-cyan-cyan-200: #A5F0FC;
--color-_util-colors-cyan-cyan-300: #67E3F9;
--color-_util-colors-cyan-cyan-400: #22CCEE;
--color-_util-colors-cyan-cyan-500: #06AED4;
--color-_util-colors-cyan-cyan-600: #088AB2;
--color-_util-colors-cyan-cyan-700: #0E7090;
--color-util-colors-violet-violet-50: #F5F3FF;
--color-util-colors-violet-violet-100: #ECE9FE;
--color-util-colors-violet-violet-200: #DDD6FE;
--color-util-colors-violet-violet-300: #C3B5FD;
--color-util-colors-violet-violet-400: #A48AFB;
--color-util-colors-violet-violet-500: #875BF7;
--color-util-colors-violet-violet-600: #7839EE;
--color-util-colors-violet-violet-700: #6927DA;
--color-_util-colors-violet-violet-50: #F5F3FF;
--color-_util-colors-violet-violet-100: #ECE9FE;
--color-_util-colors-violet-violet-200: #DDD6FE;
--color-_util-colors-violet-violet-300: #C3B5FD;
--color-_util-colors-violet-violet-400: #A48AFB;
--color-_util-colors-violet-violet-500: #875BF7;
--color-_util-colors-violet-violet-600: #7839EE;
--color-_util-colors-violet-violet-700: #6927DA;
--color-util-colors-gray-gray-50: #F9FAFB;
--color-util-colors-gray-gray-100: #F2F4F7;
--color-util-colors-gray-gray-200: #E9EBF0;
--color-util-colors-gray-gray-300: #D0D5DC;
--color-util-colors-gray-gray-400: #98A2B2;
--color-util-colors-gray-gray-500: #676F83;
--color-util-colors-gray-gray-600: #495464;
--color-util-colors-gray-gray-700: #354052;
--color-_util-colors-gray-gray-50: #F9FAFB;
--color-_util-colors-gray-gray-100: #F2F4F7;
--color-_util-colors-gray-gray-200: #E9EBF0;
--color-_util-colors-gray-gray-300: #D0D5DC;
--color-_util-colors-gray-gray-400: #98A2B2;
--color-_util-colors-gray-gray-500: #676F83;
--color-_util-colors-gray-gray-600: #495464;
--color-_util-colors-gray-gray-700: #354052;
--color-third-party-LangChain: #1C3C3C;
--color-third-party-Langfuse: #000000;

View File

@ -174,7 +174,7 @@ const vars = {
'components-badge-status-light-success-halo': 'var(--color-components-badge-status-light-success-halo)',
'components-badge-status-light-border-outer': 'var(--color-components-badge-status-light-border-outer)',
'components-badge-status-light-high-light': 'var(--color-components-badge-status-light-high-light)',
'components-badge-status-light-_high-light': 'var(--color-components-badge-status-light-_high-light)',
'components-badge-status-light-warning-bg': 'var(--color-components-badge-status-light-warning-bg)',
'components-badge-status-light-warning-border-inner': 'var(--color-components-badge-status-light-warning-border-inner)',
'components-badge-status-light-warning-halo': 'var(--color-components-badge-status-light-warning-halo)',
@ -249,7 +249,7 @@ const vars = {
'text-accent-secondary': 'var(--color-text-accent-secondary)',
'text-accent-light-mode-only': 'var(--color-text-accent-light-mode-only)',
'text-text-selected': 'var(--color-text-text-selected)',
'text-secondary-on-surface': 'var(--color-text-secondary-on-surface)',
'text-_secondary-on-surface': 'var(--color-text-_secondary-on-surface)',
'text-logo-text': 'var(--color-text-logo-text)',
'text-empty-state-icon': 'var(--color-text-empty-state-icon)',
@ -298,11 +298,12 @@ const vars = {
'shadow-shadow-2': 'var(--color-shadow-shadow-2)',
'shadow-shadow-10': 'var(--color-shadow-shadow-10)',
'workflow-block-_border': 'var(--color-workflow-block-_border)',
'workflow-block-_panel-bg': 'var(--color-workflow-block-_panel-bg)',
'workflow-block-border': 'var(--color-workflow-block-border)',
'workflow-block-panel-bg': 'var(--color-workflow-block-panel-bg)',
'workflow-block-parma-bg': 'var(--color-workflow-block-parma-bg)',
'workflow-block-nav-bg': 'var(--color-workflow-block-nav-bg)',
'workflow-block-nav-border-right': 'var(--color-workflow-block-nav-border-right)',
'workflow-block-_nav-bg': 'var(--color-workflow-block-_nav-bg)',
'workflow-block-_nav-border-right': 'var(--color-workflow-block-_nav-border-right)',
'workflow-block-bg': 'var(--color-workflow-block-bg)',
'workflow-canvas-workflow-dot-color': 'var(--color-workflow-canvas-workflow-dot-color)',
@ -394,167 +395,167 @@ const vars = {
'effects-highlight-lightmode-off': 'var(--color-effects-highlight-lightmode-off)',
'effects-image-frame': 'var(--color-effects-image-frame)',
'util-colors-orange-dark-orange-dark-50': 'var(--color-util-colors-orange-dark-orange-dark-50)',
'util-colors-orange-dark-orange-dark-100': 'var(--color-util-colors-orange-dark-orange-dark-100)',
'util-colors-orange-dark-orange-dark-200': 'var(--color-util-colors-orange-dark-orange-dark-200)',
'util-colors-orange-dark-orange-dark-300': 'var(--color-util-colors-orange-dark-orange-dark-300)',
'util-colors-orange-dark-orange-dark-400': 'var(--color-util-colors-orange-dark-orange-dark-400)',
'util-colors-orange-dark-orange-dark-500': 'var(--color-util-colors-orange-dark-orange-dark-500)',
'util-colors-orange-dark-orange-dark-600': 'var(--color-util-colors-orange-dark-orange-dark-600)',
'util-colors-orange-dark-orange-dark-700': 'var(--color-util-colors-orange-dark-orange-dark-700)',
'_util-colors-orange-dark-orange-dark-50': 'var(--color-_util-colors-orange-dark-orange-dark-50)',
'_util-colors-orange-dark-orange-dark-100': 'var(--color-_util-colors-orange-dark-orange-dark-100)',
'_util-colors-orange-dark-orange-dark-200': 'var(--color-_util-colors-orange-dark-orange-dark-200)',
'_util-colors-orange-dark-orange-dark-300': 'var(--color-_util-colors-orange-dark-orange-dark-300)',
'_util-colors-orange-dark-orange-dark-400': 'var(--color-_util-colors-orange-dark-orange-dark-400)',
'_util-colors-orange-dark-orange-dark-500': 'var(--color-_util-colors-orange-dark-orange-dark-500)',
'_util-colors-orange-dark-orange-dark-600': 'var(--color-_util-colors-orange-dark-orange-dark-600)',
'_util-colors-orange-dark-orange-dark-700': 'var(--color-_util-colors-orange-dark-orange-dark-700)',
'util-colors-orange-orange-50': 'var(--color-util-colors-orange-orange-50)',
'util-colors-orange-orange-100': 'var(--color-util-colors-orange-orange-100)',
'util-colors-orange-orange-200': 'var(--color-util-colors-orange-orange-200)',
'util-colors-orange-orange-300': 'var(--color-util-colors-orange-orange-300)',
'util-colors-orange-orange-400': 'var(--color-util-colors-orange-orange-400)',
'util-colors-orange-orange-500': 'var(--color-util-colors-orange-orange-500)',
'util-colors-orange-orange-600': 'var(--color-util-colors-orange-orange-600)',
'util-colors-orange-orange-700': 'var(--color-util-colors-orange-orange-700)',
'_util-colors-orange-orange-50': 'var(--color-_util-colors-orange-orange-50)',
'_util-colors-orange-orange-100': 'var(--color-_util-colors-orange-orange-100)',
'_util-colors-orange-orange-200': 'var(--color-_util-colors-orange-orange-200)',
'_util-colors-orange-orange-300': 'var(--color-_util-colors-orange-orange-300)',
'_util-colors-orange-orange-400': 'var(--color-_util-colors-orange-orange-400)',
'_util-colors-orange-orange-500': 'var(--color-_util-colors-orange-orange-500)',
'_util-colors-orange-orange-600': 'var(--color-_util-colors-orange-orange-600)',
'_util-colors-orange-orange-700': 'var(--color-_util-colors-orange-orange-700)',
'util-colors-pink-pink-50': 'var(--color-util-colors-pink-pink-50)',
'util-colors-pink-pink-100': 'var(--color-util-colors-pink-pink-100)',
'util-colors-pink-pink-200': 'var(--color-util-colors-pink-pink-200)',
'util-colors-pink-pink-300': 'var(--color-util-colors-pink-pink-300)',
'util-colors-pink-pink-400': 'var(--color-util-colors-pink-pink-400)',
'util-colors-pink-pink-500': 'var(--color-util-colors-pink-pink-500)',
'util-colors-pink-pink-600': 'var(--color-util-colors-pink-pink-600)',
'util-colors-pink-pink-700': 'var(--color-util-colors-pink-pink-700)',
'_util-colors-pink-pink-50': 'var(--color-_util-colors-pink-pink-50)',
'_util-colors-pink-pink-100': 'var(--color-_util-colors-pink-pink-100)',
'_util-colors-pink-pink-200': 'var(--color-_util-colors-pink-pink-200)',
'_util-colors-pink-pink-300': 'var(--color-_util-colors-pink-pink-300)',
'_util-colors-pink-pink-400': 'var(--color-_util-colors-pink-pink-400)',
'_util-colors-pink-pink-500': 'var(--color-_util-colors-pink-pink-500)',
'_util-colors-pink-pink-600': 'var(--color-_util-colors-pink-pink-600)',
'_util-colors-pink-pink-700': 'var(--color-_util-colors-pink-pink-700)',
'util-colors-fuchsia-fuchsia-50': 'var(--color-util-colors-fuchsia-fuchsia-50)',
'util-colors-fuchsia-fuchsia-100': 'var(--color-util-colors-fuchsia-fuchsia-100)',
'util-colors-fuchsia-fuchsia-200': 'var(--color-util-colors-fuchsia-fuchsia-200)',
'util-colors-fuchsia-fuchsia-300': 'var(--color-util-colors-fuchsia-fuchsia-300)',
'util-colors-fuchsia-fuchsia-400': 'var(--color-util-colors-fuchsia-fuchsia-400)',
'util-colors-fuchsia-fuchsia-500': 'var(--color-util-colors-fuchsia-fuchsia-500)',
'util-colors-fuchsia-fuchsia-600': 'var(--color-util-colors-fuchsia-fuchsia-600)',
'util-colors-fuchsia-fuchsia-700': 'var(--color-util-colors-fuchsia-fuchsia-700)',
'_util-colors-fuchsia-fuchsia-50': 'var(--color-_util-colors-fuchsia-fuchsia-50)',
'_util-colors-fuchsia-fuchsia-100': 'var(--color-_util-colors-fuchsia-fuchsia-100)',
'_util-colors-fuchsia-fuchsia-200': 'var(--color-_util-colors-fuchsia-fuchsia-200)',
'_util-colors-fuchsia-fuchsia-300': 'var(--color-_util-colors-fuchsia-fuchsia-300)',
'_util-colors-fuchsia-fuchsia-400': 'var(--color-_util-colors-fuchsia-fuchsia-400)',
'_util-colors-fuchsia-fuchsia-500': 'var(--color-_util-colors-fuchsia-fuchsia-500)',
'_util-colors-fuchsia-fuchsia-600': 'var(--color-_util-colors-fuchsia-fuchsia-600)',
'_util-colors-fuchsia-fuchsia-700': 'var(--color-_util-colors-fuchsia-fuchsia-700)',
'util-colors-purple-purple-50': 'var(--color-util-colors-purple-purple-50)',
'util-colors-purple-purple-100': 'var(--color-util-colors-purple-purple-100)',
'util-colors-purple-purple-200': 'var(--color-util-colors-purple-purple-200)',
'util-colors-purple-purple-300': 'var(--color-util-colors-purple-purple-300)',
'util-colors-purple-purple-400': 'var(--color-util-colors-purple-purple-400)',
'util-colors-purple-purple-500': 'var(--color-util-colors-purple-purple-500)',
'util-colors-purple-purple-600': 'var(--color-util-colors-purple-purple-600)',
'util-colors-purple-purple-700': 'var(--color-util-colors-purple-purple-700)',
'_util-colors-purple-purple-50': 'var(--color-_util-colors-purple-purple-50)',
'_util-colors-purple-purple-100': 'var(--color-_util-colors-purple-purple-100)',
'_util-colors-purple-purple-200': 'var(--color-_util-colors-purple-purple-200)',
'_util-colors-purple-purple-300': 'var(--color-_util-colors-purple-purple-300)',
'_util-colors-purple-purple-400': 'var(--color-_util-colors-purple-purple-400)',
'_util-colors-purple-purple-500': 'var(--color-_util-colors-purple-purple-500)',
'_util-colors-purple-purple-600': 'var(--color-_util-colors-purple-purple-600)',
'_util-colors-purple-purple-700': 'var(--color-_util-colors-purple-purple-700)',
'util-colors-indigo-indigo-50': 'var(--color-util-colors-indigo-indigo-50)',
'util-colors-indigo-indigo-100': 'var(--color-util-colors-indigo-indigo-100)',
'util-colors-indigo-indigo-200': 'var(--color-util-colors-indigo-indigo-200)',
'util-colors-indigo-indigo-300': 'var(--color-util-colors-indigo-indigo-300)',
'util-colors-indigo-indigo-400': 'var(--color-util-colors-indigo-indigo-400)',
'util-colors-indigo-indigo-500': 'var(--color-util-colors-indigo-indigo-500)',
'util-colors-indigo-indigo-600': 'var(--color-util-colors-indigo-indigo-600)',
'util-colors-indigo-indigo-700': 'var(--color-util-colors-indigo-indigo-700)',
'_util-colors-indigo-indigo-50': 'var(--color-_util-colors-indigo-indigo-50)',
'_util-colors-indigo-indigo-100': 'var(--color-_util-colors-indigo-indigo-100)',
'_util-colors-indigo-indigo-200': 'var(--color-_util-colors-indigo-indigo-200)',
'_util-colors-indigo-indigo-300': 'var(--color-_util-colors-indigo-indigo-300)',
'_util-colors-indigo-indigo-400': 'var(--color-_util-colors-indigo-indigo-400)',
'_util-colors-indigo-indigo-500': 'var(--color-_util-colors-indigo-indigo-500)',
'_util-colors-indigo-indigo-600': 'var(--color-_util-colors-indigo-indigo-600)',
'_util-colors-indigo-indigo-700': 'var(--color-_util-colors-indigo-indigo-700)',
'util-colors-blue-blue-50': 'var(--color-util-colors-blue-blue-50)',
'util-colors-blue-blue-100': 'var(--color-util-colors-blue-blue-100)',
'util-colors-blue-blue-200': 'var(--color-util-colors-blue-blue-200)',
'util-colors-blue-blue-300': 'var(--color-util-colors-blue-blue-300)',
'util-colors-blue-blue-400': 'var(--color-util-colors-blue-blue-400)',
'util-colors-blue-blue-500': 'var(--color-util-colors-blue-blue-500)',
'util-colors-blue-blue-600': 'var(--color-util-colors-blue-blue-600)',
'util-colors-blue-blue-700': 'var(--color-util-colors-blue-blue-700)',
'_util-colors-blue-blue-50': 'var(--color-_util-colors-blue-blue-50)',
'_util-colors-blue-blue-100': 'var(--color-_util-colors-blue-blue-100)',
'_util-colors-blue-blue-200': 'var(--color-_util-colors-blue-blue-200)',
'_util-colors-blue-blue-300': 'var(--color-_util-colors-blue-blue-300)',
'_util-colors-blue-blue-400': 'var(--color-_util-colors-blue-blue-400)',
'_util-colors-blue-blue-500': 'var(--color-_util-colors-blue-blue-500)',
'_util-colors-blue-blue-600': 'var(--color-_util-colors-blue-blue-600)',
'_util-colors-blue-blue-700': 'var(--color-_util-colors-blue-blue-700)',
'util-colors-blue-light-blue-light-50': 'var(--color-util-colors-blue-light-blue-light-50)',
'util-colors-blue-light-blue-light-100': 'var(--color-util-colors-blue-light-blue-light-100)',
'util-colors-blue-light-blue-light-200': 'var(--color-util-colors-blue-light-blue-light-200)',
'util-colors-blue-light-blue-light-300': 'var(--color-util-colors-blue-light-blue-light-300)',
'util-colors-blue-light-blue-light-400': 'var(--color-util-colors-blue-light-blue-light-400)',
'util-colors-blue-light-blue-light-500': 'var(--color-util-colors-blue-light-blue-light-500)',
'util-colors-blue-light-blue-light-600': 'var(--color-util-colors-blue-light-blue-light-600)',
'util-colors-blue-light-blue-light-700': 'var(--color-util-colors-blue-light-blue-light-700)',
'_util-colors-blue-light-blue-light-50': 'var(--color-_util-colors-blue-light-blue-light-50)',
'_util-colors-blue-light-blue-light-100': 'var(--color-_util-colors-blue-light-blue-light-100)',
'_util-colors-blue-light-blue-light-200': 'var(--color-_util-colors-blue-light-blue-light-200)',
'_util-colors-blue-light-blue-light-300': 'var(--color-_util-colors-blue-light-blue-light-300)',
'_util-colors-blue-light-blue-light-400': 'var(--color-_util-colors-blue-light-blue-light-400)',
'_util-colors-blue-light-blue-light-500': 'var(--color-_util-colors-blue-light-blue-light-500)',
'_util-colors-blue-light-blue-light-600': 'var(--color-_util-colors-blue-light-blue-light-600)',
'_util-colors-blue-light-blue-light-700': 'var(--color-_util-colors-blue-light-blue-light-700)',
'util-colors-gray-blue-gray-blue-50': 'var(--color-util-colors-gray-blue-gray-blue-50)',
'util-colors-gray-blue-gray-blue-100': 'var(--color-util-colors-gray-blue-gray-blue-100)',
'util-colors-gray-blue-gray-blue-200': 'var(--color-util-colors-gray-blue-gray-blue-200)',
'util-colors-gray-blue-gray-blue-300': 'var(--color-util-colors-gray-blue-gray-blue-300)',
'util-colors-gray-blue-gray-blue-400': 'var(--color-util-colors-gray-blue-gray-blue-400)',
'util-colors-gray-blue-gray-blue-500': 'var(--color-util-colors-gray-blue-gray-blue-500)',
'util-colors-gray-blue-gray-blue-600': 'var(--color-util-colors-gray-blue-gray-blue-600)',
'util-colors-gray-blue-gray-blue-700': 'var(--color-util-colors-gray-blue-gray-blue-700)',
'_util-colors-gray-blue-gray-blue-50': 'var(--color-_util-colors-gray-blue-gray-blue-50)',
'_util-colors-gray-blue-gray-blue-100': 'var(--color-_util-colors-gray-blue-gray-blue-100)',
'_util-colors-gray-blue-gray-blue-200': 'var(--color-_util-colors-gray-blue-gray-blue-200)',
'_util-colors-gray-blue-gray-blue-300': 'var(--color-_util-colors-gray-blue-gray-blue-300)',
'_util-colors-gray-blue-gray-blue-400': 'var(--color-_util-colors-gray-blue-gray-blue-400)',
'_util-colors-gray-blue-gray-blue-500': 'var(--color-_util-colors-gray-blue-gray-blue-500)',
'_util-colors-gray-blue-gray-blue-600': 'var(--color-_util-colors-gray-blue-gray-blue-600)',
'_util-colors-gray-blue-gray-blue-700': 'var(--color-_util-colors-gray-blue-gray-blue-700)',
'util-colors-blue-brand-blue-brand-50': 'var(--color-util-colors-blue-brand-blue-brand-50)',
'util-colors-blue-brand-blue-brand-100': 'var(--color-util-colors-blue-brand-blue-brand-100)',
'util-colors-blue-brand-blue-brand-200': 'var(--color-util-colors-blue-brand-blue-brand-200)',
'util-colors-blue-brand-blue-brand-300': 'var(--color-util-colors-blue-brand-blue-brand-300)',
'util-colors-blue-brand-blue-brand-400': 'var(--color-util-colors-blue-brand-blue-brand-400)',
'util-colors-blue-brand-blue-brand-500': 'var(--color-util-colors-blue-brand-blue-brand-500)',
'util-colors-blue-brand-blue-brand-600': 'var(--color-util-colors-blue-brand-blue-brand-600)',
'util-colors-blue-brand-blue-brand-700': 'var(--color-util-colors-blue-brand-blue-brand-700)',
'_util-colors-blue-brand-blue-brand-50': 'var(--color-_util-colors-blue-brand-blue-brand-50)',
'_util-colors-blue-brand-blue-brand-100': 'var(--color-_util-colors-blue-brand-blue-brand-100)',
'_util-colors-blue-brand-blue-brand-200': 'var(--color-_util-colors-blue-brand-blue-brand-200)',
'_util-colors-blue-brand-blue-brand-300': 'var(--color-_util-colors-blue-brand-blue-brand-300)',
'_util-colors-blue-brand-blue-brand-400': 'var(--color-_util-colors-blue-brand-blue-brand-400)',
'_util-colors-blue-brand-blue-brand-500': 'var(--color-_util-colors-blue-brand-blue-brand-500)',
'_util-colors-blue-brand-blue-brand-600': 'var(--color-_util-colors-blue-brand-blue-brand-600)',
'_util-colors-blue-brand-blue-brand-700': 'var(--color-_util-colors-blue-brand-blue-brand-700)',
'util-colors-red-red-50': 'var(--color-util-colors-red-red-50)',
'util-colors-red-red-100': 'var(--color-util-colors-red-red-100)',
'util-colors-red-red-200': 'var(--color-util-colors-red-red-200)',
'util-colors-red-red-300': 'var(--color-util-colors-red-red-300)',
'util-colors-red-red-400': 'var(--color-util-colors-red-red-400)',
'util-colors-red-red-500': 'var(--color-util-colors-red-red-500)',
'util-colors-red-red-600': 'var(--color-util-colors-red-red-600)',
'util-colors-red-red-700': 'var(--color-util-colors-red-red-700)',
'_util-colors-red-red-50': 'var(--color-_util-colors-red-red-50)',
'_util-colors-red-red-100': 'var(--color-_util-colors-red-red-100)',
'_util-colors-red-red-200': 'var(--color-_util-colors-red-red-200)',
'_util-colors-red-red-300': 'var(--color-_util-colors-red-red-300)',
'_util-colors-red-red-400': 'var(--color-_util-colors-red-red-400)',
'_util-colors-red-red-500': 'var(--color-_util-colors-red-red-500)',
'_util-colors-red-red-600': 'var(--color-_util-colors-red-red-600)',
'_util-colors-red-red-700': 'var(--color-_util-colors-red-red-700)',
'util-colors-green-green-50': 'var(--color-util-colors-green-green-50)',
'util-colors-green-green-100': 'var(--color-util-colors-green-green-100)',
'util-colors-green-green-200': 'var(--color-util-colors-green-green-200)',
'util-colors-green-green-300': 'var(--color-util-colors-green-green-300)',
'util-colors-green-green-400': 'var(--color-util-colors-green-green-400)',
'util-colors-green-green-500': 'var(--color-util-colors-green-green-500)',
'util-colors-green-green-600': 'var(--color-util-colors-green-green-600)',
'util-colors-green-green-700': 'var(--color-util-colors-green-green-700)',
'_util-colors-green-green-50': 'var(--color-_util-colors-green-green-50)',
'_util-colors-green-green-100': 'var(--color-_util-colors-green-green-100)',
'_util-colors-green-green-200': 'var(--color-_util-colors-green-green-200)',
'_util-colors-green-green-300': 'var(--color-_util-colors-green-green-300)',
'_util-colors-green-green-400': 'var(--color-_util-colors-green-green-400)',
'_util-colors-green-green-500': 'var(--color-_util-colors-green-green-500)',
'_util-colors-green-green-600': 'var(--color-_util-colors-green-green-600)',
'_util-colors-green-green-700': 'var(--color-_util-colors-green-green-700)',
'util-colors-warning-warning-50': 'var(--color-util-colors-warning-warning-50)',
'util-colors-warning-warning-100': 'var(--color-util-colors-warning-warning-100)',
'util-colors-warning-warning-200': 'var(--color-util-colors-warning-warning-200)',
'util-colors-warning-warning-300': 'var(--color-util-colors-warning-warning-300)',
'util-colors-warning-warning-400': 'var(--color-util-colors-warning-warning-400)',
'util-colors-warning-warning-500': 'var(--color-util-colors-warning-warning-500)',
'util-colors-warning-warning-600': 'var(--color-util-colors-warning-warning-600)',
'util-colors-warning-warning-700': 'var(--color-util-colors-warning-warning-700)',
'_util-colors-warning-warning-50': 'var(--color-_util-colors-warning-warning-50)',
'_util-colors-warning-warning-100': 'var(--color-_util-colors-warning-warning-100)',
'_util-colors-warning-warning-200': 'var(--color-_util-colors-warning-warning-200)',
'_util-colors-warning-warning-300': 'var(--color-_util-colors-warning-warning-300)',
'_util-colors-warning-warning-400': 'var(--color-_util-colors-warning-warning-400)',
'_util-colors-warning-warning-500': 'var(--color-_util-colors-warning-warning-500)',
'_util-colors-warning-warning-600': 'var(--color-_util-colors-warning-warning-600)',
'_util-colors-warning-warning-700': 'var(--color-_util-colors-warning-warning-700)',
'util-colors-yellow-yellow-50': 'var(--color-util-colors-yellow-yellow-50)',
'util-colors-yellow-yellow-100': 'var(--color-util-colors-yellow-yellow-100)',
'util-colors-yellow-yellow-200': 'var(--color-util-colors-yellow-yellow-200)',
'util-colors-yellow-yellow-300': 'var(--color-util-colors-yellow-yellow-300)',
'util-colors-yellow-yellow-400': 'var(--color-util-colors-yellow-yellow-400)',
'util-colors-yellow-yellow-500': 'var(--color-util-colors-yellow-yellow-500)',
'util-colors-yellow-yellow-600': 'var(--color-util-colors-yellow-yellow-600)',
'util-colors-yellow-yellow-700': 'var(--color-util-colors-yellow-yellow-700)',
'_util-colors-yellow-yellow-50': 'var(--color-_util-colors-yellow-yellow-50)',
'_util-colors-yellow-yellow-100': 'var(--color-_util-colors-yellow-yellow-100)',
'_util-colors-yellow-yellow-200': 'var(--color-_util-colors-yellow-yellow-200)',
'_util-colors-yellow-yellow-300': 'var(--color-_util-colors-yellow-yellow-300)',
'_util-colors-yellow-yellow-400': 'var(--color-_util-colors-yellow-yellow-400)',
'_util-colors-yellow-yellow-500': 'var(--color-_util-colors-yellow-yellow-500)',
'_util-colors-yellow-yellow-600': 'var(--color-_util-colors-yellow-yellow-600)',
'_util-colors-yellow-yellow-700': 'var(--color-_util-colors-yellow-yellow-700)',
'util-colors-teal-teal-50': 'var(--color-util-colors-teal-teal-50)',
'util-colors-teal-teal-100': 'var(--color-util-colors-teal-teal-100)',
'util-colors-teal-teal-200': 'var(--color-util-colors-teal-teal-200)',
'util-colors-teal-teal-300': 'var(--color-util-colors-teal-teal-300)',
'util-colors-teal-teal-400': 'var(--color-util-colors-teal-teal-400)',
'util-colors-teal-teal-500': 'var(--color-util-colors-teal-teal-500)',
'util-colors-teal-teal-600': 'var(--color-util-colors-teal-teal-600)',
'util-colors-teal-teal-700': 'var(--color-util-colors-teal-teal-700)',
'_util-colors-teal-teal-50': 'var(--color-_util-colors-teal-teal-50)',
'_util-colors-teal-teal-100': 'var(--color-_util-colors-teal-teal-100)',
'_util-colors-teal-teal-200': 'var(--color-_util-colors-teal-teal-200)',
'_util-colors-teal-teal-300': 'var(--color-_util-colors-teal-teal-300)',
'_util-colors-teal-teal-400': 'var(--color-_util-colors-teal-teal-400)',
'_util-colors-teal-teal-500': 'var(--color-_util-colors-teal-teal-500)',
'_util-colors-teal-teal-600': 'var(--color-_util-colors-teal-teal-600)',
'_util-colors-teal-teal-700': 'var(--color-_util-colors-teal-teal-700)',
'util-colors-cyan-cyan-50': 'var(--color-util-colors-cyan-cyan-50)',
'util-colors-cyan-cyan-100': 'var(--color-util-colors-cyan-cyan-100)',
'util-colors-cyan-cyan-200': 'var(--color-util-colors-cyan-cyan-200)',
'util-colors-cyan-cyan-300': 'var(--color-util-colors-cyan-cyan-300)',
'util-colors-cyan-cyan-400': 'var(--color-util-colors-cyan-cyan-400)',
'util-colors-cyan-cyan-500': 'var(--color-util-colors-cyan-cyan-500)',
'util-colors-cyan-cyan-600': 'var(--color-util-colors-cyan-cyan-600)',
'util-colors-cyan-cyan-700': 'var(--color-util-colors-cyan-cyan-700)',
'_util-colors-cyan-cyan-50': 'var(--color-_util-colors-cyan-cyan-50)',
'_util-colors-cyan-cyan-100': 'var(--color-_util-colors-cyan-cyan-100)',
'_util-colors-cyan-cyan-200': 'var(--color-_util-colors-cyan-cyan-200)',
'_util-colors-cyan-cyan-300': 'var(--color-_util-colors-cyan-cyan-300)',
'_util-colors-cyan-cyan-400': 'var(--color-_util-colors-cyan-cyan-400)',
'_util-colors-cyan-cyan-500': 'var(--color-_util-colors-cyan-cyan-500)',
'_util-colors-cyan-cyan-600': 'var(--color-_util-colors-cyan-cyan-600)',
'_util-colors-cyan-cyan-700': 'var(--color-_util-colors-cyan-cyan-700)',
'util-colors-violet-violet-50': 'var(--color-util-colors-violet-violet-50)',
'util-colors-violet-violet-100': 'var(--color-util-colors-violet-violet-100)',
'util-colors-violet-violet-200': 'var(--color-util-colors-violet-violet-200)',
'util-colors-violet-violet-300': 'var(--color-util-colors-violet-violet-300)',
'util-colors-violet-violet-400': 'var(--color-util-colors-violet-violet-400)',
'util-colors-violet-violet-500': 'var(--color-util-colors-violet-violet-500)',
'util-colors-violet-violet-600': 'var(--color-util-colors-violet-violet-600)',
'util-colors-violet-violet-700': 'var(--color-util-colors-violet-violet-700)',
'_util-colors-violet-violet-50': 'var(--color-_util-colors-violet-violet-50)',
'_util-colors-violet-violet-100': 'var(--color-_util-colors-violet-violet-100)',
'_util-colors-violet-violet-200': 'var(--color-_util-colors-violet-violet-200)',
'_util-colors-violet-violet-300': 'var(--color-_util-colors-violet-violet-300)',
'_util-colors-violet-violet-400': 'var(--color-_util-colors-violet-violet-400)',
'_util-colors-violet-violet-500': 'var(--color-_util-colors-violet-violet-500)',
'_util-colors-violet-violet-600': 'var(--color-_util-colors-violet-violet-600)',
'_util-colors-violet-violet-700': 'var(--color-_util-colors-violet-violet-700)',
'util-colors-gray-gray-50': 'var(--color-util-colors-gray-gray-50)',
'util-colors-gray-gray-100': 'var(--color-util-colors-gray-gray-100)',
'util-colors-gray-gray-200': 'var(--color-util-colors-gray-gray-200)',
'util-colors-gray-gray-300': 'var(--color-util-colors-gray-gray-300)',
'util-colors-gray-gray-400': 'var(--color-util-colors-gray-gray-400)',
'util-colors-gray-gray-500': 'var(--color-util-colors-gray-gray-500)',
'util-colors-gray-gray-600': 'var(--color-util-colors-gray-gray-600)',
'util-colors-gray-gray-700': 'var(--color-util-colors-gray-gray-700)',
'_util-colors-gray-gray-50': 'var(--color-_util-colors-gray-gray-50)',
'_util-colors-gray-gray-100': 'var(--color-_util-colors-gray-gray-100)',
'_util-colors-gray-gray-200': 'var(--color-_util-colors-gray-gray-200)',
'_util-colors-gray-gray-300': 'var(--color-_util-colors-gray-gray-300)',
'_util-colors-gray-gray-400': 'var(--color-_util-colors-gray-gray-400)',
'_util-colors-gray-gray-500': 'var(--color-_util-colors-gray-gray-500)',
'_util-colors-gray-gray-600': 'var(--color-_util-colors-gray-gray-600)',
'_util-colors-gray-gray-700': 'var(--color-_util-colors-gray-gray-700)',
'third-party-LangChain': 'var(--color-third-party-LangChain)',
'third-party-Langfuse': 'var(--color-third-party-Langfuse)',

View File

@ -3,7 +3,6 @@ export type SystemFeatures = {
sso_enforced_for_signin_protocol: string
sso_enforced_for_web: boolean
sso_enforced_for_web_protocol: string
expired_at?: number
}
export const defaultSystemFeatures: SystemFeatures = {