Compare commits
28
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eabfd84ceb | ||
|
|
d320d1468d | ||
|
|
b47fa27a35 | ||
|
|
68ad9a91b2 | ||
|
|
c17a4165c1 | ||
|
|
96c171805a | ||
|
|
9a536979ab | ||
|
|
46a5294d94 | ||
|
|
ec181649ae | ||
|
|
4fdcb30ff8 | ||
|
|
07add06c59 | ||
|
|
a7b33b55e8 | ||
|
|
0cbbaf3f68 | ||
|
|
c564f32ab6 | ||
|
|
7c2c949f01 | ||
|
|
066168da52 | ||
|
|
1df71ec64d | ||
|
|
a9ee52f2d7 | ||
|
|
7b225a5ab0 | ||
|
|
d7a6f25c63 | ||
|
|
f46792334c | ||
|
|
ee3936916f | ||
|
|
109de52fe2 | ||
|
|
10dd0f3fa0 | ||
|
|
2f064c68bc | ||
|
|
079583eaa4 | ||
|
|
0e82072323 | ||
|
|
678ad6b7eb |
@@ -9,7 +9,7 @@ class PackagingInfo(BaseSettings):
|
||||
|
||||
CURRENT_VERSION: str = Field(
|
||||
description='Dify version',
|
||||
default='0.6.13',
|
||||
default='0.6.14',
|
||||
)
|
||||
|
||||
COMMIT_SHA: str = Field(
|
||||
|
||||
@@ -15,6 +15,7 @@ from fields.app_fields import (
|
||||
app_pagination_fields,
|
||||
)
|
||||
from libs.login import login_required
|
||||
from services.app_dsl_service import AppDslService
|
||||
from services.app_service import AppService
|
||||
|
||||
ALLOW_CREATE_APP_MODES = ['chat', 'agent-chat', 'advanced-chat', 'workflow', 'completion']
|
||||
@@ -97,8 +98,42 @@ class AppImportApi(Resource):
|
||||
parser.add_argument('icon_background', type=str, location='json')
|
||||
args = parser.parse_args()
|
||||
|
||||
app_service = AppService()
|
||||
app = app_service.import_app(current_user.current_tenant_id, args['data'], args, current_user)
|
||||
app = AppDslService.import_and_create_new_app(
|
||||
tenant_id=current_user.current_tenant_id,
|
||||
data=args['data'],
|
||||
args=args,
|
||||
account=current_user
|
||||
)
|
||||
|
||||
return app, 201
|
||||
|
||||
|
||||
class AppImportFromUrlApi(Resource):
|
||||
@setup_required
|
||||
@login_required
|
||||
@account_initialization_required
|
||||
@marshal_with(app_detail_fields_with_site)
|
||||
@cloud_edition_billing_resource_check('apps')
|
||||
def post(self):
|
||||
"""Import app from url"""
|
||||
# The role of the current user in the ta table must be admin, owner, or editor
|
||||
if not current_user.is_editor:
|
||||
raise Forbidden()
|
||||
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('url', type=str, required=True, nullable=False, location='json')
|
||||
parser.add_argument('name', type=str, location='json')
|
||||
parser.add_argument('description', type=str, location='json')
|
||||
parser.add_argument('icon', type=str, location='json')
|
||||
parser.add_argument('icon_background', type=str, location='json')
|
||||
args = parser.parse_args()
|
||||
|
||||
app = AppDslService.import_and_create_new_app_from_url(
|
||||
tenant_id=current_user.current_tenant_id,
|
||||
url=args['url'],
|
||||
args=args,
|
||||
account=current_user
|
||||
)
|
||||
|
||||
return app, 201
|
||||
|
||||
@@ -177,9 +212,13 @@ class AppCopyApi(Resource):
|
||||
parser.add_argument('icon_background', type=str, location='json')
|
||||
args = parser.parse_args()
|
||||
|
||||
app_service = AppService()
|
||||
data = app_service.export_app(app_model)
|
||||
app = app_service.import_app(current_user.current_tenant_id, data, args, current_user)
|
||||
data = AppDslService.export_dsl(app_model=app_model)
|
||||
app = AppDslService.import_and_create_new_app(
|
||||
tenant_id=current_user.current_tenant_id,
|
||||
data=data,
|
||||
args=args,
|
||||
account=current_user
|
||||
)
|
||||
|
||||
return app, 201
|
||||
|
||||
@@ -195,10 +234,8 @@ class AppExportApi(Resource):
|
||||
if not current_user.is_editor:
|
||||
raise Forbidden()
|
||||
|
||||
app_service = AppService()
|
||||
|
||||
return {
|
||||
"data": app_service.export_app(app_model)
|
||||
"data": AppDslService.export_dsl(app_model=app_model)
|
||||
}
|
||||
|
||||
|
||||
@@ -322,6 +359,7 @@ class AppTraceApi(Resource):
|
||||
|
||||
api.add_resource(AppListApi, '/apps')
|
||||
api.add_resource(AppImportApi, '/apps/import')
|
||||
api.add_resource(AppImportFromUrlApi, '/apps/import/url')
|
||||
api.add_resource(AppApi, '/apps/<uuid:app_id>')
|
||||
api.add_resource(AppCopyApi, '/apps/<uuid:app_id>/copy')
|
||||
api.add_resource(AppExportApi, '/apps/<uuid:app_id>/export')
|
||||
|
||||
@@ -20,6 +20,7 @@ from libs import helper
|
||||
from libs.helper import TimestampField, uuid_value
|
||||
from libs.login import current_user, login_required
|
||||
from models.model import App, AppMode
|
||||
from services.app_dsl_service import AppDslService
|
||||
from services.app_generate_service import AppGenerateService
|
||||
from services.errors.app import WorkflowHashNotEqualError
|
||||
from services.workflow_service import WorkflowService
|
||||
@@ -128,8 +129,7 @@ class DraftWorkflowImportApi(Resource):
|
||||
parser.add_argument('data', type=str, required=True, nullable=False, location='json')
|
||||
args = parser.parse_args()
|
||||
|
||||
workflow_service = WorkflowService()
|
||||
workflow = workflow_service.import_draft_workflow(
|
||||
workflow = AppDslService.import_and_overwrite_workflow(
|
||||
app_model=app_model,
|
||||
data=args['data'],
|
||||
account=current_user
|
||||
|
||||
@@ -3,8 +3,9 @@ from functools import wraps
|
||||
from hashlib import sha1
|
||||
from hmac import new as hmac_new
|
||||
|
||||
from flask import abort, current_app, request
|
||||
from flask import abort, request
|
||||
|
||||
from configs import dify_config
|
||||
from extensions.ext_database import db
|
||||
from models.model import EndUser
|
||||
|
||||
@@ -12,12 +13,12 @@ from models.model import EndUser
|
||||
def inner_api_only(view):
|
||||
@wraps(view)
|
||||
def decorated(*args, **kwargs):
|
||||
if not current_app.config['INNER_API']:
|
||||
if not dify_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 != current_app.config['INNER_API_KEY']:
|
||||
if not inner_api_key or inner_api_key != dify_config.INNER_API_KEY:
|
||||
abort(404)
|
||||
|
||||
return view(*args, **kwargs)
|
||||
@@ -28,7 +29,7 @@ def inner_api_only(view):
|
||||
def inner_api_user_auth(view):
|
||||
@wraps(view)
|
||||
def decorated(*args, **kwargs):
|
||||
if not current_app.config['INNER_API']:
|
||||
if not dify_config.INNER_API:
|
||||
return view(*args, **kwargs)
|
||||
|
||||
# get header 'X-Inner-Api-Key'
|
||||
|
||||
@@ -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': current_app.config.get('UPLOAD_IMAGE_FILE_SIZE_LIMIT')
|
||||
'image_file_size_limit': dify_config.UPLOAD_IMAGE_FILE_SIZE_LIMIT
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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": current_app.config['CURRENT_VERSION']
|
||||
"server_version": dify_config.CURRENT_VERSION,
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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': current_app.config.get('UPLOAD_IMAGE_FILE_SIZE_LIMIT')
|
||||
'image_file_size_limit': dify_config.UPLOAD_IMAGE_FILE_SIZE_LIMIT
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 = current_app.config.get('FILES_URL')
|
||||
base_url = dify_config.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 = {
|
||||
|
||||
@@ -255,6 +255,12 @@ 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),
|
||||
|
||||
@@ -66,6 +66,10 @@ provider_credential_schema:
|
||||
label:
|
||||
en_US: Europe (Frankfurt)
|
||||
zh_Hans: 欧洲 (法兰克福)
|
||||
- value: eu-west-2
|
||||
label:
|
||||
en_US: Eu west London (London)
|
||||
zh_Hans: 欧洲西部 (伦敦)
|
||||
- value: us-gov-west-1
|
||||
label:
|
||||
en_US: AWS GovCloud (US-West)
|
||||
|
||||
@@ -7,7 +7,7 @@ features:
|
||||
- agent-thought
|
||||
model_properties:
|
||||
mode: chat
|
||||
context_size: 32000
|
||||
context_size: 128000
|
||||
parameter_rules:
|
||||
- name: temperature
|
||||
use_template: temperature
|
||||
|
||||
@@ -7,7 +7,7 @@ features:
|
||||
- agent-thought
|
||||
model_properties:
|
||||
mode: chat
|
||||
context_size: 32000
|
||||
context_size: 128000
|
||||
parameter_rules:
|
||||
- name: temperature
|
||||
use_template: temperature
|
||||
|
||||
@@ -616,30 +616,34 @@ class OAIAPICompatLargeLanguageModel(_CommonOAI_API_Compat, LargeLanguageModel):
|
||||
message = cast(AssistantPromptMessage, message)
|
||||
message_dict = {"role": "assistant", "content": message.content}
|
||||
if message.tool_calls:
|
||||
# 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,
|
||||
}
|
||||
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,
|
||||
}
|
||||
elif isinstance(message, SystemPromptMessage):
|
||||
message = cast(SystemPromptMessage, message)
|
||||
message_dict = {"role": "system", "content": message.content}
|
||||
elif isinstance(message, ToolPromptMessage):
|
||||
message = cast(ToolPromptMessage, message)
|
||||
# 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
|
||||
}
|
||||
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
|
||||
}
|
||||
else:
|
||||
raise ValueError(f"Got unknown type {message}")
|
||||
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ model_credential_schema:
|
||||
label:
|
||||
zh_Hans: 服务器URL
|
||||
en_US: Server url
|
||||
type: secret-input
|
||||
type: text-input
|
||||
required: true
|
||||
placeholder:
|
||||
zh_Hans: 在此输入 Triton Inference Server 的服务器地址,如 http://192.168.1.100:8000
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
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
|
||||
@@ -138,6 +138,7 @@ 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 = [
|
||||
@@ -149,6 +150,7 @@ class ErnieBotModel:
|
||||
'ernie-3.5-4k-0205',
|
||||
'ernie-3.5-128k',
|
||||
'ernie-4.0-8k'
|
||||
'ernie-4.0-turbo-8k-preview'
|
||||
]
|
||||
|
||||
api_key: str = ''
|
||||
|
||||
@@ -32,7 +32,7 @@ model_credential_schema:
|
||||
label:
|
||||
zh_Hans: 服务器URL
|
||||
en_US: Server url
|
||||
type: secret-input
|
||||
type: text-input
|
||||
required: true
|
||||
placeholder:
|
||||
zh_Hans: 在此输入Xinference的服务器地址,如 http://192.168.1.100:9997
|
||||
|
||||
@@ -20,7 +20,7 @@ class ZhipuaiProvider(ModelProvider):
|
||||
model_instance = self.get_model_instance(ModelType.LLM)
|
||||
|
||||
model_instance.validate_credentials(
|
||||
model='chatglm_turbo',
|
||||
model='glm-4',
|
||||
credentials=credentials
|
||||
)
|
||||
except CredentialsValidateFailedError as ex:
|
||||
|
||||
@@ -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, Headers, NotGiven
|
||||
from ..core._base_type import NOT_GIVEN, Body, Headers, NotGiven
|
||||
from ..core._http_client import make_user_request_input
|
||||
from ..types.image import ImagesResponded
|
||||
|
||||
@@ -28,7 +28,9 @@ 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:
|
||||
@@ -46,9 +48,12 @@ class Images(BaseAPI):
|
||||
"size": size,
|
||||
"style": style,
|
||||
"user": user,
|
||||
"request_id": request_id,
|
||||
},
|
||||
options=make_user_request_input(
|
||||
extra_headers=extra_headers, timeout=timeout
|
||||
extra_headers=extra_headers,
|
||||
extra_body=extra_body,
|
||||
timeout=timeout
|
||||
),
|
||||
cast_type=_cast_type,
|
||||
enable_stream=False,
|
||||
|
||||
@@ -11,7 +11,7 @@ from tenacity import retry
|
||||
from tenacity.stop import stop_after_attempt
|
||||
|
||||
from . import _errors
|
||||
from ._base_type import NOT_GIVEN, Body, Data, Headers, NotGiven, Query, RequestFiles, ResponseT
|
||||
from ._base_type import NOT_GIVEN, AnyMapping, 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,6 +358,7 @@ 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 = {}
|
||||
@@ -370,5 +371,7 @@ 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
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
from typing import Any
|
||||
|
||||
from flask import current_app
|
||||
|
||||
from configs import dify_config
|
||||
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
|
||||
@@ -14,8 +13,8 @@ class Keyword:
|
||||
self._keyword_processor = self._init_keyword()
|
||||
|
||||
def _init_keyword(self) -> BaseKeyword:
|
||||
config = current_app.config
|
||||
keyword_type = config.get('KEYWORD_STORE')
|
||||
config = dify_config
|
||||
keyword_type = config.KEYWORD_STORE
|
||||
|
||||
if not keyword_type:
|
||||
raise ValueError("Keyword store must be specified.")
|
||||
|
||||
@@ -46,7 +46,6 @@ 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:
|
||||
|
||||
@@ -18,8 +18,8 @@ class MarkdownExtractor(BaseExtractor):
|
||||
def __init__(
|
||||
self,
|
||||
file_path: str,
|
||||
remove_hyperlinks: bool = True,
|
||||
remove_images: bool = True,
|
||||
remove_hyperlinks: bool = False,
|
||||
remove_images: bool = False,
|
||||
encoding: Optional[str] = None,
|
||||
autodetect_encoding: bool = True,
|
||||
):
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
@@ -0,0 +1,27 @@
|
||||
""" 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
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
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
|
||||
@@ -0,0 +1,69 @@
|
||||
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
|
||||
@@ -0,0 +1,123 @@
|
||||
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
|
||||
@@ -1,3 +1,4 @@
|
||||
import logging
|
||||
import time
|
||||
from collections.abc import Mapping
|
||||
from typing import Any
|
||||
@@ -5,6 +6,7 @@ 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):
|
||||
@@ -48,6 +50,7 @@ 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
|
||||
@@ -57,6 +60,7 @@ 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
|
||||
@@ -66,8 +70,9 @@ class FirecrawlApp:
|
||||
):
|
||||
endpoint = f'{self.base_url}/v0/crawl'
|
||||
headers = self._prepare_headers(idempotency_key)
|
||||
data = {'url': url, **kwargs}
|
||||
data = {'url': url, **kwargs['params']}
|
||||
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']
|
||||
|
||||
@@ -238,7 +238,7 @@ class ApiTool(Tool):
|
||||
return int(value)
|
||||
elif property['type'] == 'number':
|
||||
# check if it is a float
|
||||
if '.' in value:
|
||||
if '.' in str(value):
|
||||
return float(value)
|
||||
else:
|
||||
return int(value)
|
||||
|
||||
@@ -60,6 +60,8 @@ 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",
|
||||
@@ -78,11 +80,7 @@ class IfElseNode(BaseNode):
|
||||
error=str(e)
|
||||
)
|
||||
|
||||
outputs = {
|
||||
"result": final_result
|
||||
}
|
||||
if node_data.cases:
|
||||
outputs["selected_case_id"] = selected_case_id
|
||||
outputs = {"result": final_result, "selected_case_id": selected_case_id}
|
||||
|
||||
data = NodeRunResult(
|
||||
status=WorkflowNodeExecutionStatus.SUCCEEDED,
|
||||
|
||||
@@ -7,4 +7,5 @@ def handle(sender, **kwargs):
|
||||
document_id = sender
|
||||
dataset_id = kwargs.get('dataset_id')
|
||||
doc_form = kwargs.get('doc_form')
|
||||
clean_document_task.delay(document_id, dataset_id, doc_form)
|
||||
file_id = kwargs.get('file_id')
|
||||
clean_document_task.delay(document_id, dataset_id, doc_form, file_id)
|
||||
|
||||
@@ -38,9 +38,8 @@ 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()
|
||||
for chunk in blob_data.chunks():
|
||||
yield from chunk
|
||||
return generate()
|
||||
yield from blob_data.chunks()
|
||||
return generate(filename)
|
||||
|
||||
def download(self, filename, target_filepath):
|
||||
client = self._sync_client()
|
||||
|
||||
@@ -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(current_app.config.get('CLEAN_DAY_SETTING'))
|
||||
clean_days = int(dify_config.CLEAN_DAY_SETTING)
|
||||
start_at = time.perf_counter()
|
||||
thirty_days_ago = datetime.datetime.now() - datetime.timedelta(days=clean_days)
|
||||
page = 1
|
||||
|
||||
@@ -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(current_app.config.get('CLEAN_DAY_SETTING'))
|
||||
clean_days = int(dify_config.CLEAN_DAY_SETTING)
|
||||
start_at = time.perf_counter()
|
||||
thirty_days_ago = datetime.datetime.now() - datetime.timedelta(days=clean_days)
|
||||
page = 1
|
||||
|
||||
@@ -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": current_app.config['EDITION'],
|
||||
"iss": dify_config.EDITION,
|
||||
"sub": 'Console API Passport',
|
||||
}
|
||||
|
||||
@@ -524,7 +524,7 @@ class RegisterService:
|
||||
TenantService.create_owner_tenant_if_not_exist(account)
|
||||
|
||||
dify_setup = DifySetup(
|
||||
version=current_app.config['CURRENT_VERSION']
|
||||
version=dify_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 current_app.config['EDITION'] != 'SELF_HOSTED':
|
||||
if dify_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 = current_app.config['INVITE_EXPIRY_HOURS']
|
||||
expiryHours = dify_config.INVITE_EXPIRY_HOURS
|
||||
redis_client.setex(
|
||||
cls._get_invitation_token_key(token),
|
||||
expiryHours * 60 * 60,
|
||||
|
||||
@@ -0,0 +1,407 @@
|
||||
import logging
|
||||
|
||||
import httpx
|
||||
import yaml # type: ignore
|
||||
|
||||
from events.app_event import app_model_config_was_updated, app_was_created
|
||||
from extensions.ext_database import db
|
||||
from models.account import Account
|
||||
from models.model import App, AppMode, AppModelConfig
|
||||
from models.workflow import Workflow
|
||||
from services.workflow_service import WorkflowService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
current_dsl_version = "0.1.0"
|
||||
dsl_to_dify_version_mapping: dict[str, str] = {
|
||||
"0.1.0": "0.6.0", # dsl version -> from dify version
|
||||
}
|
||||
|
||||
|
||||
class AppDslService:
|
||||
@classmethod
|
||||
def import_and_create_new_app_from_url(cls, tenant_id: str, url: str, args: dict, account: Account) -> App:
|
||||
"""
|
||||
Import app dsl from url and create new app
|
||||
:param tenant_id: tenant id
|
||||
:param url: import url
|
||||
:param args: request args
|
||||
:param account: Account instance
|
||||
"""
|
||||
try:
|
||||
max_size = 10 * 1024 * 1024 # 10MB
|
||||
timeout = httpx.Timeout(10.0)
|
||||
with httpx.stream("GET", url.strip(), follow_redirects=True, timeout=timeout) as response:
|
||||
response.raise_for_status()
|
||||
total_size = 0
|
||||
content = b""
|
||||
for chunk in response.iter_bytes():
|
||||
total_size += len(chunk)
|
||||
if total_size > max_size:
|
||||
raise ValueError("File size exceeds the limit of 10MB")
|
||||
content += chunk
|
||||
except httpx.HTTPStatusError as http_err:
|
||||
raise ValueError(f"HTTP error occurred: {http_err}")
|
||||
except httpx.RequestError as req_err:
|
||||
raise ValueError(f"Request error occurred: {req_err}")
|
||||
except Exception as e:
|
||||
raise ValueError(f"Failed to fetch DSL from URL: {e}")
|
||||
|
||||
if not content:
|
||||
raise ValueError("Empty content from url")
|
||||
|
||||
try:
|
||||
data = content.decode("utf-8")
|
||||
except UnicodeDecodeError as e:
|
||||
raise ValueError(f"Error decoding content: {e}")
|
||||
|
||||
return cls.import_and_create_new_app(tenant_id, data, args, account)
|
||||
|
||||
@classmethod
|
||||
def import_and_create_new_app(cls, tenant_id: str, data: str, args: dict, account: Account) -> App:
|
||||
"""
|
||||
Import app dsl and create new app
|
||||
:param tenant_id: tenant id
|
||||
:param data: import data
|
||||
:param args: request args
|
||||
:param account: Account instance
|
||||
"""
|
||||
try:
|
||||
import_data = yaml.safe_load(data)
|
||||
except yaml.YAMLError:
|
||||
raise ValueError("Invalid YAML format in data argument.")
|
||||
|
||||
# check or repair dsl version
|
||||
import_data = cls._check_or_fix_dsl(import_data)
|
||||
|
||||
app_data = import_data.get('app')
|
||||
if not app_data:
|
||||
raise ValueError("Missing app in data argument")
|
||||
|
||||
# get app basic info
|
||||
name = args.get("name") if args.get("name") else app_data.get('name')
|
||||
description = args.get("description") if args.get("description") else app_data.get('description', '')
|
||||
icon = args.get("icon") if args.get("icon") else app_data.get('icon')
|
||||
icon_background = args.get("icon_background") if args.get("icon_background") \
|
||||
else app_data.get('icon_background')
|
||||
|
||||
# import dsl and create app
|
||||
app_mode = AppMode.value_of(app_data.get('mode'))
|
||||
if app_mode in [AppMode.ADVANCED_CHAT, AppMode.WORKFLOW]:
|
||||
app = cls._import_and_create_new_workflow_based_app(
|
||||
tenant_id=tenant_id,
|
||||
app_mode=app_mode,
|
||||
workflow_data=import_data.get('workflow'),
|
||||
account=account,
|
||||
name=name,
|
||||
description=description,
|
||||
icon=icon,
|
||||
icon_background=icon_background
|
||||
)
|
||||
elif app_mode in [AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.COMPLETION]:
|
||||
app = cls._import_and_create_new_model_config_based_app(
|
||||
tenant_id=tenant_id,
|
||||
app_mode=app_mode,
|
||||
model_config_data=import_data.get('model_config'),
|
||||
account=account,
|
||||
name=name,
|
||||
description=description,
|
||||
icon=icon,
|
||||
icon_background=icon_background
|
||||
)
|
||||
else:
|
||||
raise ValueError("Invalid app mode")
|
||||
|
||||
return app
|
||||
|
||||
@classmethod
|
||||
def import_and_overwrite_workflow(cls, app_model: App, data: str, account: Account) -> Workflow:
|
||||
"""
|
||||
Import app dsl and overwrite workflow
|
||||
:param app_model: App instance
|
||||
:param data: import data
|
||||
:param account: Account instance
|
||||
"""
|
||||
try:
|
||||
import_data = yaml.safe_load(data)
|
||||
except yaml.YAMLError:
|
||||
raise ValueError("Invalid YAML format in data argument.")
|
||||
|
||||
# check or repair dsl version
|
||||
import_data = cls._check_or_fix_dsl(import_data)
|
||||
|
||||
app_data = import_data.get('app')
|
||||
if not app_data:
|
||||
raise ValueError("Missing app in data argument")
|
||||
|
||||
# import dsl and overwrite app
|
||||
app_mode = AppMode.value_of(app_data.get('mode'))
|
||||
if app_mode not in [AppMode.ADVANCED_CHAT, AppMode.WORKFLOW]:
|
||||
raise ValueError("Only support import workflow in advanced-chat or workflow app.")
|
||||
|
||||
if app_data.get('mode') != app_model.mode:
|
||||
raise ValueError(
|
||||
f"App mode {app_data.get('mode')} is not matched with current app mode {app_mode.value}")
|
||||
|
||||
return cls._import_and_overwrite_workflow_based_app(
|
||||
app_model=app_model,
|
||||
workflow_data=import_data.get('workflow'),
|
||||
account=account,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def export_dsl(cls, app_model: App) -> str:
|
||||
"""
|
||||
Export app
|
||||
:param app_model: App instance
|
||||
:return:
|
||||
"""
|
||||
app_mode = AppMode.value_of(app_model.mode)
|
||||
|
||||
export_data = {
|
||||
"version": current_dsl_version,
|
||||
"kind": "app",
|
||||
"app": {
|
||||
"name": app_model.name,
|
||||
"mode": app_model.mode,
|
||||
"icon": app_model.icon,
|
||||
"icon_background": app_model.icon_background,
|
||||
"description": app_model.description
|
||||
}
|
||||
}
|
||||
|
||||
if app_mode in [AppMode.ADVANCED_CHAT, AppMode.WORKFLOW]:
|
||||
cls._append_workflow_export_data(export_data, app_model)
|
||||
else:
|
||||
cls._append_model_config_export_data(export_data, app_model)
|
||||
|
||||
return yaml.dump(export_data)
|
||||
|
||||
@classmethod
|
||||
def _check_or_fix_dsl(cls, import_data: dict) -> dict:
|
||||
"""
|
||||
Check or fix dsl
|
||||
|
||||
:param import_data: import data
|
||||
"""
|
||||
if not import_data.get('version'):
|
||||
import_data['version'] = "0.1.0"
|
||||
|
||||
if not import_data.get('kind') or import_data.get('kind') != "app":
|
||||
import_data['kind'] = "app"
|
||||
|
||||
if import_data.get('version') != current_dsl_version:
|
||||
# Currently only one DSL version, so no difference checks or compatibility fixes will be performed.
|
||||
logger.warning(f"DSL version {import_data.get('version')} is not compatible "
|
||||
f"with current version {current_dsl_version}, related to "
|
||||
f"Dify version {dsl_to_dify_version_mapping.get(current_dsl_version)}.")
|
||||
|
||||
return import_data
|
||||
|
||||
@classmethod
|
||||
def _import_and_create_new_workflow_based_app(cls,
|
||||
tenant_id: str,
|
||||
app_mode: AppMode,
|
||||
workflow_data: dict,
|
||||
account: Account,
|
||||
name: str,
|
||||
description: str,
|
||||
icon: str,
|
||||
icon_background: str) -> App:
|
||||
"""
|
||||
Import app dsl and create new workflow based app
|
||||
|
||||
:param tenant_id: tenant id
|
||||
:param app_mode: app mode
|
||||
:param workflow_data: workflow data
|
||||
:param account: Account instance
|
||||
:param name: app name
|
||||
:param description: app description
|
||||
:param icon: app icon
|
||||
:param icon_background: app icon background
|
||||
"""
|
||||
if not workflow_data:
|
||||
raise ValueError("Missing workflow in data argument "
|
||||
"when app mode is advanced-chat or workflow")
|
||||
|
||||
app = cls._create_app(
|
||||
tenant_id=tenant_id,
|
||||
app_mode=app_mode,
|
||||
account=account,
|
||||
name=name,
|
||||
description=description,
|
||||
icon=icon,
|
||||
icon_background=icon_background
|
||||
)
|
||||
|
||||
# init draft workflow
|
||||
workflow_service = WorkflowService()
|
||||
draft_workflow = workflow_service.sync_draft_workflow(
|
||||
app_model=app,
|
||||
graph=workflow_data.get('graph', {}),
|
||||
features=workflow_data.get('../core/app/features', {}),
|
||||
unique_hash=None,
|
||||
account=account
|
||||
)
|
||||
workflow_service.publish_workflow(
|
||||
app_model=app,
|
||||
account=account,
|
||||
draft_workflow=draft_workflow
|
||||
)
|
||||
|
||||
return app
|
||||
|
||||
@classmethod
|
||||
def _import_and_overwrite_workflow_based_app(cls,
|
||||
app_model: App,
|
||||
workflow_data: dict,
|
||||
account: Account) -> Workflow:
|
||||
"""
|
||||
Import app dsl and overwrite workflow based app
|
||||
|
||||
:param app_model: App instance
|
||||
:param workflow_data: workflow data
|
||||
:param account: Account instance
|
||||
"""
|
||||
if not workflow_data:
|
||||
raise ValueError("Missing workflow in data argument "
|
||||
"when app mode is advanced-chat or workflow")
|
||||
|
||||
# fetch draft workflow by app_model
|
||||
workflow_service = WorkflowService()
|
||||
current_draft_workflow = workflow_service.get_draft_workflow(app_model=app_model)
|
||||
if current_draft_workflow:
|
||||
unique_hash = current_draft_workflow.unique_hash
|
||||
else:
|
||||
unique_hash = None
|
||||
|
||||
# sync draft workflow
|
||||
draft_workflow = workflow_service.sync_draft_workflow(
|
||||
app_model=app_model,
|
||||
graph=workflow_data.get('graph', {}),
|
||||
features=workflow_data.get('features', {}),
|
||||
unique_hash=unique_hash,
|
||||
account=account
|
||||
)
|
||||
|
||||
return draft_workflow
|
||||
|
||||
@classmethod
|
||||
def _import_and_create_new_model_config_based_app(cls,
|
||||
tenant_id: str,
|
||||
app_mode: AppMode,
|
||||
model_config_data: dict,
|
||||
account: Account,
|
||||
name: str,
|
||||
description: str,
|
||||
icon: str,
|
||||
icon_background: str) -> App:
|
||||
"""
|
||||
Import app dsl and create new model config based app
|
||||
|
||||
:param tenant_id: tenant id
|
||||
:param app_mode: app mode
|
||||
:param model_config_data: model config data
|
||||
:param account: Account instance
|
||||
:param name: app name
|
||||
:param description: app description
|
||||
:param icon: app icon
|
||||
:param icon_background: app icon background
|
||||
"""
|
||||
if not model_config_data:
|
||||
raise ValueError("Missing model_config in data argument "
|
||||
"when app mode is chat, agent-chat or completion")
|
||||
|
||||
app = cls._create_app(
|
||||
tenant_id=tenant_id,
|
||||
app_mode=app_mode,
|
||||
account=account,
|
||||
name=name,
|
||||
description=description,
|
||||
icon=icon,
|
||||
icon_background=icon_background
|
||||
)
|
||||
|
||||
app_model_config = AppModelConfig()
|
||||
app_model_config = app_model_config.from_model_config_dict(model_config_data)
|
||||
app_model_config.app_id = app.id
|
||||
|
||||
db.session.add(app_model_config)
|
||||
db.session.commit()
|
||||
|
||||
app.app_model_config_id = app_model_config.id
|
||||
|
||||
app_model_config_was_updated.send(
|
||||
app,
|
||||
app_model_config=app_model_config
|
||||
)
|
||||
|
||||
return app
|
||||
|
||||
@classmethod
|
||||
def _create_app(cls,
|
||||
tenant_id: str,
|
||||
app_mode: AppMode,
|
||||
account: Account,
|
||||
name: str,
|
||||
description: str,
|
||||
icon: str,
|
||||
icon_background: str) -> App:
|
||||
"""
|
||||
Create new app
|
||||
|
||||
:param tenant_id: tenant id
|
||||
:param app_mode: app mode
|
||||
:param account: Account instance
|
||||
:param name: app name
|
||||
:param description: app description
|
||||
:param icon: app icon
|
||||
:param icon_background: app icon background
|
||||
"""
|
||||
app = App(
|
||||
tenant_id=tenant_id,
|
||||
mode=app_mode.value,
|
||||
name=name,
|
||||
description=description,
|
||||
icon=icon,
|
||||
icon_background=icon_background,
|
||||
enable_site=True,
|
||||
enable_api=True
|
||||
)
|
||||
|
||||
db.session.add(app)
|
||||
db.session.commit()
|
||||
|
||||
app_was_created.send(app, account=account)
|
||||
|
||||
return app
|
||||
|
||||
@classmethod
|
||||
def _append_workflow_export_data(cls, export_data: dict, app_model: App) -> None:
|
||||
"""
|
||||
Append workflow export data
|
||||
:param export_data: export data
|
||||
:param app_model: App instance
|
||||
"""
|
||||
workflow_service = WorkflowService()
|
||||
workflow = workflow_service.get_draft_workflow(app_model)
|
||||
if not workflow:
|
||||
raise ValueError("Missing draft workflow configuration, please check.")
|
||||
|
||||
export_data['workflow'] = {
|
||||
"graph": workflow.graph_dict,
|
||||
"features": workflow.features_dict
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def _append_model_config_export_data(cls, export_data: dict, app_model: App) -> None:
|
||||
"""
|
||||
Append model config export data
|
||||
:param export_data: export data
|
||||
:param app_model: App instance
|
||||
"""
|
||||
app_model_config = app_model.app_model_config
|
||||
if not app_model_config:
|
||||
raise ValueError("Missing app configuration, please check.")
|
||||
|
||||
export_data['model_config'] = app_model_config.to_dict()
|
||||
@@ -1,6 +1,7 @@
|
||||
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
|
||||
@@ -89,8 +90,7 @@ 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:
|
||||
from flask import current_app
|
||||
max_active_requests = int(current_app.config['APP_MAX_ACTIVE_REQUESTS'])
|
||||
max_active_requests = int(dify_config.APP_MAX_ACTIVE_REQUESTS)
|
||||
return max_active_requests
|
||||
|
||||
@classmethod
|
||||
|
||||
+3
-119
@@ -3,11 +3,10 @@ import logging
|
||||
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
|
||||
@@ -17,13 +16,12 @@ from core.model_runtime.entities.model_entities import ModelPropertyKey, ModelTy
|
||||
from core.model_runtime.model_providers.__base.large_language_model import LargeLanguageModel
|
||||
from core.tools.tool_manager import ToolManager
|
||||
from core.tools.utils.configuration import ToolParameterConfigurationManager
|
||||
from events.app_event import app_model_config_was_updated, app_was_created
|
||||
from events.app_event import app_was_created
|
||||
from extensions.ext_database import db
|
||||
from models.account import Account
|
||||
from models.model import App, AppMode, AppModelConfig
|
||||
from models.tools import ApiToolProvider
|
||||
from services.tag_service import TagService
|
||||
from services.workflow_service import WorkflowService
|
||||
from tasks.remove_app_and_related_data_task import remove_app_and_related_data_task
|
||||
|
||||
|
||||
@@ -144,120 +142,6 @@ class AppService:
|
||||
|
||||
return app
|
||||
|
||||
def import_app(self, tenant_id: str, data: str, args: dict, account: Account) -> App:
|
||||
"""
|
||||
Import app
|
||||
:param tenant_id: tenant id
|
||||
:param data: import data
|
||||
:param args: request args
|
||||
:param account: Account instance
|
||||
"""
|
||||
try:
|
||||
import_data = yaml.safe_load(data)
|
||||
except yaml.YAMLError as e:
|
||||
raise ValueError("Invalid YAML format in data argument.")
|
||||
|
||||
app_data = import_data.get('app')
|
||||
model_config_data = import_data.get('model_config')
|
||||
workflow = import_data.get('workflow')
|
||||
|
||||
if not app_data:
|
||||
raise ValueError("Missing app in data argument")
|
||||
|
||||
app_mode = AppMode.value_of(app_data.get('mode'))
|
||||
if app_mode in [AppMode.ADVANCED_CHAT, AppMode.WORKFLOW]:
|
||||
if not workflow:
|
||||
raise ValueError("Missing workflow in data argument "
|
||||
"when app mode is advanced-chat or workflow")
|
||||
elif app_mode in [AppMode.CHAT, AppMode.AGENT_CHAT, AppMode.COMPLETION]:
|
||||
if not model_config_data:
|
||||
raise ValueError("Missing model_config in data argument "
|
||||
"when app mode is chat, agent-chat or completion")
|
||||
else:
|
||||
raise ValueError("Invalid app mode")
|
||||
|
||||
app = App(
|
||||
tenant_id=tenant_id,
|
||||
mode=app_data.get('mode'),
|
||||
name=args.get("name") if args.get("name") else app_data.get('name'),
|
||||
description=args.get("description") if args.get("description") else app_data.get('description', ''),
|
||||
icon=args.get("icon") if args.get("icon") else app_data.get('icon'),
|
||||
icon_background=args.get("icon_background") if args.get("icon_background") \
|
||||
else app_data.get('icon_background'),
|
||||
enable_site=True,
|
||||
enable_api=True
|
||||
)
|
||||
|
||||
db.session.add(app)
|
||||
db.session.commit()
|
||||
|
||||
app_was_created.send(app, account=account)
|
||||
|
||||
if workflow:
|
||||
# init draft workflow
|
||||
workflow_service = WorkflowService()
|
||||
draft_workflow = workflow_service.sync_draft_workflow(
|
||||
app_model=app,
|
||||
graph=workflow.get('graph'),
|
||||
features=workflow.get('features'),
|
||||
unique_hash=None,
|
||||
account=account
|
||||
)
|
||||
workflow_service.publish_workflow(
|
||||
app_model=app,
|
||||
account=account,
|
||||
draft_workflow=draft_workflow
|
||||
)
|
||||
|
||||
if model_config_data:
|
||||
app_model_config = AppModelConfig()
|
||||
app_model_config = app_model_config.from_model_config_dict(model_config_data)
|
||||
app_model_config.app_id = app.id
|
||||
|
||||
db.session.add(app_model_config)
|
||||
db.session.commit()
|
||||
|
||||
app.app_model_config_id = app_model_config.id
|
||||
|
||||
app_model_config_was_updated.send(
|
||||
app,
|
||||
app_model_config=app_model_config
|
||||
)
|
||||
|
||||
return app
|
||||
|
||||
def export_app(self, app: App) -> str:
|
||||
"""
|
||||
Export app
|
||||
:param app: App instance
|
||||
:return:
|
||||
"""
|
||||
app_mode = AppMode.value_of(app.mode)
|
||||
|
||||
export_data = {
|
||||
"app": {
|
||||
"name": app.name,
|
||||
"mode": app.mode,
|
||||
"icon": app.icon,
|
||||
"icon_background": app.icon_background,
|
||||
"description": app.description
|
||||
}
|
||||
}
|
||||
|
||||
if app_mode in [AppMode.ADVANCED_CHAT, AppMode.WORKFLOW]:
|
||||
workflow_service = WorkflowService()
|
||||
workflow = workflow_service.get_draft_workflow(app)
|
||||
export_data['workflow'] = {
|
||||
"graph": workflow.graph_dict,
|
||||
"features": workflow.features_dict
|
||||
}
|
||||
else:
|
||||
app_model_config = app.app_model_config
|
||||
|
||||
export_data['model_config'] = app_model_config.to_dict()
|
||||
|
||||
return yaml.dump(export_data)
|
||||
|
||||
def get_app(self, app: App) -> App:
|
||||
"""
|
||||
Get App
|
||||
@@ -446,7 +330,7 @@ class AppService:
|
||||
# get all tools
|
||||
tools = agent_config.get('tools', [])
|
||||
|
||||
url_prefix = (current_app.config.get("CONSOLE_API_URL")
|
||||
url_prefix = (dify_config.CONSOLE_API_URL
|
||||
+ "/console/api/workspaces/current/tool-provider/builtin/")
|
||||
|
||||
for tool in tools:
|
||||
|
||||
@@ -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
|
||||
@@ -524,7 +524,14 @@ class DocumentService:
|
||||
@staticmethod
|
||||
def delete_document(document):
|
||||
# trigger document_was_deleted signal
|
||||
document_was_deleted.send(document.id, dataset_id=document.dataset_id, doc_form=document.doc_form)
|
||||
file_id = None
|
||||
if document.data_source_type == 'upload_file':
|
||||
if document.data_source_info:
|
||||
data_source_info = document.data_source_info_dict
|
||||
if data_source_info and 'upload_file_id' in data_source_info:
|
||||
file_id = data_source_info['upload_file_id']
|
||||
document_was_deleted.send(document.id, dataset_id=document.dataset_id,
|
||||
doc_form=document.doc_form, file_id=file_id)
|
||||
|
||||
db.session.delete(document)
|
||||
db.session.commit()
|
||||
@@ -650,7 +657,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(current_app.config['BATCH_UPLOAD_LIMIT'])
|
||||
batch_upload_limit = int(dify_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 +1035,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(current_app.config['BATCH_UPLOAD_LIMIT'])
|
||||
batch_upload_limit = int(dify_config.BATCH_UPLOAD_LIMIT)
|
||||
if count > batch_upload_limit:
|
||||
raise ValueError(f"You have reached the batch upload limit of {batch_upload_limit}.")
|
||||
|
||||
|
||||
@@ -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 = (current_app.config.get("CONSOLE_API_URL")
|
||||
url_prefix = (dify_config.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 = (current_app.config.get("CONSOLE_API_URL")
|
||||
url_prefix = (dify_config.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 = (current_app.config.get("CONSOLE_API_URL")
|
||||
url_prefix = (dify_config.CONSOLE_API_URL
|
||||
+ f"/console/api/workspaces/current/model-providers/{self.provider}")
|
||||
if self.icon_small is not None:
|
||||
self.icon_small = I18nObject(
|
||||
|
||||
@@ -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 current_app.config['BILLING_ENABLED']:
|
||||
if dify_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 current_app.config['ENTERPRISE_ENABLED']:
|
||||
if dify_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 = 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']
|
||||
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
|
||||
|
||||
@classmethod
|
||||
def _fulfill_params_from_billing_api(cls, features: FeatureModel, tenant_id: str):
|
||||
|
||||
@@ -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 = current_app.config['ETL_TYPE']
|
||||
etl_type = dify_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 = current_app.config.get("UPLOAD_IMAGE_FILE_SIZE_LIMIT") * 1024 * 1024
|
||||
file_size_limit = dify_config.UPLOAD_IMAGE_FILE_SIZE_LIMIT * 1024 * 1024
|
||||
else:
|
||||
file_size_limit = current_app.config.get("UPLOAD_FILE_SIZE_LIMIT") * 1024 * 1024
|
||||
file_size_limit = dify_config.UPLOAD_FILE_SIZE_LIMIT * 1024 * 1024
|
||||
|
||||
if file_size > file_size_limit:
|
||||
message = f'File size exceeded. {file_size} > {file_size_limit}'
|
||||
@@ -73,10 +73,9 @@ 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=config['STORAGE_TYPE'],
|
||||
storage_type=dify_config.STORAGE_TYPE,
|
||||
key=file_key,
|
||||
name=filename,
|
||||
size=file_size,
|
||||
@@ -106,10 +105,9 @@ 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=config['STORAGE_TYPE'],
|
||||
storage_type=dify_config.STORAGE_TYPE,
|
||||
key=file_key,
|
||||
name=text_name + '.txt',
|
||||
size=len(text),
|
||||
@@ -138,7 +136,7 @@ class FileService:
|
||||
|
||||
# extract text from file
|
||||
extension = upload_file.extension
|
||||
etl_type = current_app.config['ETL_TYPE']
|
||||
etl_type = dify_config.ETL_TYPE
|
||||
allowed_extensions = UNSTRUCTURED_ALLOWED_EXTENSIONS if etl_type == 'Unstructured' else ALLOWED_EXTENSIONS
|
||||
if extension.lower() not in allowed_extensions:
|
||||
raise UnsupportedFileTypeError()
|
||||
|
||||
@@ -6,10 +6,11 @@ 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
|
||||
from services.app_service import AppService
|
||||
from services.app_dsl_service import AppDslService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -25,7 +26,7 @@ class RecommendedAppService:
|
||||
:param language: language
|
||||
:return:
|
||||
"""
|
||||
mode = current_app.config.get('HOSTED_FETCH_APP_TEMPLATES_MODE', 'remote')
|
||||
mode = dify_config.HOSTED_FETCH_APP_TEMPLATES_MODE
|
||||
if mode == 'remote':
|
||||
try:
|
||||
result = cls._fetch_recommended_apps_from_dify_official(language)
|
||||
@@ -104,7 +105,7 @@ class RecommendedAppService:
|
||||
:param language: language
|
||||
:return:
|
||||
"""
|
||||
domain = current_app.config.get('HOSTED_FETCH_APP_TEMPLATES_REMOTE_DOMAIN', 'https://tmpl.dify.ai')
|
||||
domain = dify_config.HOSTED_FETCH_APP_TEMPLATES_REMOTE_DOMAIN
|
||||
url = f'{domain}/apps?language={language}'
|
||||
response = requests.get(url, timeout=(3, 10))
|
||||
if response.status_code != 200:
|
||||
@@ -134,7 +135,7 @@ class RecommendedAppService:
|
||||
:param app_id: app id
|
||||
:return:
|
||||
"""
|
||||
mode = current_app.config.get('HOSTED_FETCH_APP_TEMPLATES_MODE', 'remote')
|
||||
mode = dify_config.HOSTED_FETCH_APP_TEMPLATES_MODE
|
||||
if mode == 'remote':
|
||||
try:
|
||||
result = cls._fetch_recommended_app_detail_from_dify_official(app_id)
|
||||
@@ -157,7 +158,7 @@ class RecommendedAppService:
|
||||
:param app_id: App ID
|
||||
:return:
|
||||
"""
|
||||
domain = current_app.config.get('HOSTED_FETCH_APP_TEMPLATES_REMOTE_DOMAIN', 'https://tmpl.dify.ai')
|
||||
domain = dify_config.HOSTED_FETCH_APP_TEMPLATES_REMOTE_DOMAIN
|
||||
url = f'{domain}/apps/{app_id}'
|
||||
response = requests.get(url, timeout=(3, 10))
|
||||
if response.status_code != 200:
|
||||
@@ -186,16 +187,13 @@ class RecommendedAppService:
|
||||
if not app_model or not app_model.is_public:
|
||||
return None
|
||||
|
||||
app_service = AppService()
|
||||
export_str = app_service.export_app(app_model)
|
||||
|
||||
return {
|
||||
'id': app_model.id,
|
||||
'name': app_model.name,
|
||||
'icon': app_model.icon,
|
||||
'icon_background': app_model.icon_background,
|
||||
'mode': app_model.mode,
|
||||
'export_data': export_str
|
||||
'export_data': AppDslService.export_dsl(app_model=app_model)
|
||||
}
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -429,6 +429,7 @@ class ApiToolManageService:
|
||||
db_provider=provider,
|
||||
decrypt_credentials=True
|
||||
)
|
||||
user_provider.labels = labels
|
||||
|
||||
# add icon
|
||||
ToolTransformService.repack_provider(user_provider)
|
||||
|
||||
@@ -2,8 +2,7 @@ import json
|
||||
import logging
|
||||
from typing import Optional, Union
|
||||
|
||||
from flask import current_app
|
||||
|
||||
from configs import dify_config
|
||||
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
|
||||
@@ -29,7 +28,7 @@ class ToolTransformService:
|
||||
"""
|
||||
get tool provider icon url
|
||||
"""
|
||||
url_prefix = (current_app.config.get("CONSOLE_API_URL")
|
||||
url_prefix = (dify_config.CONSOLE_API_URL
|
||||
+ "/console/api/workspaces/current/tool-provider/")
|
||||
|
||||
if provider_type == ToolProviderType.BUILT_IN.value:
|
||||
|
||||
@@ -3,8 +3,6 @@ import time
|
||||
from datetime import datetime, timezone
|
||||
from typing import Optional
|
||||
|
||||
import yaml
|
||||
|
||||
from core.app.apps.advanced_chat.app_config_manager import AdvancedChatAppConfigManager
|
||||
from core.app.apps.workflow.app_config_manager import WorkflowAppConfigManager
|
||||
from core.model_runtime.utils.encoders import jsonable_encoder
|
||||
@@ -114,56 +112,6 @@ class WorkflowService:
|
||||
# return draft workflow
|
||||
return workflow
|
||||
|
||||
def import_draft_workflow(self, app_model: App,
|
||||
data: str,
|
||||
account: Account) -> Workflow:
|
||||
"""
|
||||
Import draft workflow
|
||||
:param app_model: App instance
|
||||
:param data: import data
|
||||
:param account: Account instance
|
||||
:return:
|
||||
"""
|
||||
try:
|
||||
import_data = yaml.safe_load(data)
|
||||
except yaml.YAMLError as e:
|
||||
raise ValueError("Invalid YAML format in data argument.")
|
||||
|
||||
app_data = import_data.get('app')
|
||||
workflow = import_data.get('workflow')
|
||||
|
||||
if not app_data:
|
||||
raise ValueError("Missing app in data argument")
|
||||
|
||||
app_mode = AppMode.value_of(app_data.get('mode'))
|
||||
if app_mode not in [AppMode.ADVANCED_CHAT, AppMode.WORKFLOW]:
|
||||
raise ValueError("Only support import workflow in advanced-chat or workflow app.")
|
||||
|
||||
if app_data.get('mode') != app_model.mode:
|
||||
raise ValueError(f"App mode {app_data.get('mode')} is not matched with current app mode {app_model.mode}")
|
||||
|
||||
if not workflow:
|
||||
raise ValueError("Missing workflow in data argument "
|
||||
"when app mode is advanced-chat or workflow")
|
||||
|
||||
# fetch draft workflow by app_model
|
||||
current_draft_workflow = self.get_draft_workflow(app_model=app_model)
|
||||
if current_draft_workflow:
|
||||
unique_hash = current_draft_workflow.unique_hash
|
||||
else:
|
||||
unique_hash = None
|
||||
|
||||
# sync draft workflow
|
||||
draft_workflow = self.sync_draft_workflow(
|
||||
app_model=app_model,
|
||||
graph=workflow.get('graph'),
|
||||
features=workflow.get('features'),
|
||||
unique_hash=unique_hash,
|
||||
account=account
|
||||
)
|
||||
|
||||
return draft_workflow
|
||||
|
||||
def publish_workflow(self, app_model: App,
|
||||
account: Account,
|
||||
draft_workflow: Optional[Workflow] = None) -> Workflow:
|
||||
|
||||
@@ -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 = current_app.config.get('FILES_URL')
|
||||
base_url = dify_config.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)
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ from celery import shared_task
|
||||
|
||||
from core.rag.index_processor.index_processor_factory import IndexProcessorFactory
|
||||
from extensions.ext_database import db
|
||||
from extensions.ext_storage import storage
|
||||
from models.dataset import (
|
||||
AppDatasetJoin,
|
||||
Dataset,
|
||||
@@ -14,6 +15,7 @@ from models.dataset import (
|
||||
Document,
|
||||
DocumentSegment,
|
||||
)
|
||||
from models.model import UploadFile
|
||||
|
||||
|
||||
# Add import statement for ValueError
|
||||
@@ -65,8 +67,27 @@ def clean_dataset_task(dataset_id: str, tenant_id: str, indexing_technique: str,
|
||||
db.session.query(DatasetQuery).filter(DatasetQuery.dataset_id == dataset_id).delete()
|
||||
db.session.query(AppDatasetJoin).filter(AppDatasetJoin.dataset_id == dataset_id).delete()
|
||||
|
||||
db.session.commit()
|
||||
# delete files
|
||||
if documents:
|
||||
for document in documents:
|
||||
try:
|
||||
if document.data_source_type == 'upload_file':
|
||||
if document.data_source_info:
|
||||
data_source_info = document.data_source_info_dict
|
||||
if data_source_info and 'upload_file_id' in data_source_info:
|
||||
file_id = data_source_info['upload_file_id']
|
||||
file = db.session.query(UploadFile).filter(
|
||||
UploadFile.tenant_id == document.tenant_id,
|
||||
UploadFile.id == file_id
|
||||
).first()
|
||||
if not file:
|
||||
continue
|
||||
storage.delete(file.key)
|
||||
db.session.delete(file)
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
db.session.commit()
|
||||
end_at = time.perf_counter()
|
||||
logging.info(
|
||||
click.style('Cleaned dataset when dataset deleted: {} latency: {}'.format(dataset_id, end_at - start_at), fg='green'))
|
||||
|
||||
@@ -1,21 +1,25 @@
|
||||
import logging
|
||||
import time
|
||||
from typing import Optional
|
||||
|
||||
import click
|
||||
from celery import shared_task
|
||||
|
||||
from core.rag.index_processor.index_processor_factory import IndexProcessorFactory
|
||||
from extensions.ext_database import db
|
||||
from extensions.ext_storage import storage
|
||||
from models.dataset import Dataset, DocumentSegment
|
||||
from models.model import UploadFile
|
||||
|
||||
|
||||
@shared_task(queue='dataset')
|
||||
def clean_document_task(document_id: str, dataset_id: str, doc_form: str):
|
||||
def clean_document_task(document_id: str, dataset_id: str, doc_form: str, file_id: Optional[str]):
|
||||
"""
|
||||
Clean document when document deleted.
|
||||
:param document_id: document id
|
||||
:param dataset_id: dataset id
|
||||
:param doc_form: doc_form
|
||||
:param file_id: file id
|
||||
|
||||
Usage: clean_document_task.delay(document_id, dataset_id)
|
||||
"""
|
||||
@@ -39,8 +43,20 @@ def clean_document_task(document_id: str, dataset_id: str, doc_form: str):
|
||||
db.session.delete(segment)
|
||||
|
||||
db.session.commit()
|
||||
end_at = time.perf_counter()
|
||||
logging.info(
|
||||
click.style('Cleaned document when document deleted: {} latency: {}'.format(document_id, end_at - start_at), fg='green'))
|
||||
if file_id:
|
||||
file = db.session.query(UploadFile).filter(
|
||||
UploadFile.id == file_id
|
||||
).first()
|
||||
if file:
|
||||
try:
|
||||
storage.delete(file.key)
|
||||
except Exception:
|
||||
logging.exception("Delete file failed when document deleted, file_id: {}".format(file_id))
|
||||
db.session.delete(file)
|
||||
db.session.commit()
|
||||
|
||||
end_at = time.perf_counter()
|
||||
logging.info(
|
||||
click.style('Cleaned document when document deleted: {} latency: {}'.format(document_id, end_at - start_at), fg='green'))
|
||||
except Exception:
|
||||
logging.exception("Cleaned document when document deleted failed")
|
||||
|
||||
@@ -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(current_app.config['BATCH_UPLOAD_LIMIT'])
|
||||
batch_upload_limit = int(dify_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:
|
||||
|
||||
@@ -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(current_app.config['BATCH_UPLOAD_LIMIT'])
|
||||
batch_upload_limit = int(dify_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:
|
||||
|
||||
@@ -3,8 +3,9 @@ import time
|
||||
|
||||
import click
|
||||
from celery import shared_task
|
||||
from flask import current_app, render_template
|
||||
from flask import render_template
|
||||
|
||||
from configs import dify_config
|
||||
from extensions.ext_mail import mail
|
||||
|
||||
|
||||
@@ -29,7 +30,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'{current_app.config.get("CONSOLE_WEB_URL")}/activate?token={token}'
|
||||
url = f'{dify_config.CONSOLE_WEB_URL}/activate?token={token}'
|
||||
if language == 'zh-Hans':
|
||||
html_content = render_template('invite_member_mail_template_zh-CN.html',
|
||||
to=to,
|
||||
|
||||
@@ -3,8 +3,9 @@ import time
|
||||
|
||||
import click
|
||||
from celery import shared_task
|
||||
from flask import current_app, render_template
|
||||
from flask import render_template
|
||||
|
||||
from configs import dify_config
|
||||
from extensions.ext_mail import mail
|
||||
|
||||
|
||||
@@ -24,7 +25,7 @@ def send_reset_password_mail_task(language: str, to: str, token: str):
|
||||
|
||||
# send reset password mail using different languages
|
||||
try:
|
||||
url = f'{current_app.config.get("CONSOLE_WEB_URL")}/forgot-password?token={token}'
|
||||
url = f'{dify_config.CONSOLE_WEB_URL}/forgot-password?token={token}'
|
||||
if language == 'zh-Hans':
|
||||
html_content = render_template('reset_password_mail_template_zh-CN.html',
|
||||
to=to,
|
||||
|
||||
@@ -2,7 +2,7 @@ version: '3'
|
||||
services:
|
||||
# API service
|
||||
api:
|
||||
image: langgenius/dify-api:0.6.13
|
||||
image: langgenius/dify-api:0.6.14
|
||||
restart: always
|
||||
environment:
|
||||
# Startup mode, 'api' starts the API server.
|
||||
@@ -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: ${FILES_ACCESS_TIMEOUT:-0}
|
||||
APP_MAX_ACTIVE_REQUESTS: 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.
|
||||
@@ -224,7 +224,7 @@ services:
|
||||
# worker service
|
||||
# The Celery worker for processing the queue.
|
||||
worker:
|
||||
image: langgenius/dify-api:0.6.13
|
||||
image: langgenius/dify-api:0.6.14
|
||||
restart: always
|
||||
environment:
|
||||
CONSOLE_WEB_URL: ''
|
||||
@@ -390,7 +390,7 @@ services:
|
||||
|
||||
# Frontend web application.
|
||||
web:
|
||||
image: langgenius/dify-web:0.6.13
|
||||
image: langgenius/dify-web:0.6.14
|
||||
restart: always
|
||||
environment:
|
||||
# The base URL of console application api server, refers to the Console base URL of WEB service if console domain is
|
||||
|
||||
@@ -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: ${FILES_ACCESS_TIMEOUT:-0}
|
||||
APP_MAX_ACTIVE_REQUESTS: ${APP_MAX_ACTIVE_REQUESTS:-0}
|
||||
MIGRATION_ENABLED: ${MIGRATION_ENABLED:-true}
|
||||
DEPLOY_ENV: ${DEPLOY_ENV:-PRODUCTION}
|
||||
DIFY_BIND_ADDRESS: ${DIFY_BIND_ADDRESS:-0.0.0.0}
|
||||
@@ -177,7 +177,7 @@ x-shared-env: &shared-api-worker-env
|
||||
services:
|
||||
# API service
|
||||
api:
|
||||
image: langgenius/dify-api:0.6.13
|
||||
image: langgenius/dify-api:0.6.14
|
||||
restart: always
|
||||
environment:
|
||||
# Use the shared environment variables.
|
||||
@@ -197,7 +197,7 @@ services:
|
||||
# worker service
|
||||
# The Celery worker for processing the queue.
|
||||
worker:
|
||||
image: langgenius/dify-api:0.6.13
|
||||
image: langgenius/dify-api:0.6.14
|
||||
restart: always
|
||||
environment:
|
||||
# Use the shared environment variables.
|
||||
@@ -216,7 +216,7 @@ services:
|
||||
|
||||
# Frontend web application.
|
||||
web:
|
||||
image: langgenius/dify-web:0.6.13
|
||||
image: langgenius/dify-web:0.6.14
|
||||
restart: always
|
||||
environment:
|
||||
CONSOLE_API_URL: ${CONSOLE_API_URL:-}
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
'use client'
|
||||
|
||||
import { forwardRef, useState } from 'react'
|
||||
import { forwardRef, useMemo, useState } from 'react'
|
||||
import {
|
||||
useRouter,
|
||||
useSearchParams,
|
||||
} from 'next/navigation'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import CreateAppTemplateDialog from '@/app/components/app/create-app-dialog'
|
||||
import CreateAppModal from '@/app/components/app/create-app-modal'
|
||||
import CreateFromDSLModal from '@/app/components/app/create-from-dsl-modal'
|
||||
import CreateFromDSLModal, { CreateFromDSLModalTab } from '@/app/components/app/create-from-dsl-modal'
|
||||
import { useProviderContext } from '@/context/provider-context'
|
||||
import { FileArrow01, FilePlus01, FilePlus02 } from '@/app/components/base/icons/src/vender/line/files'
|
||||
|
||||
@@ -16,10 +20,21 @@ export type CreateAppCardProps = {
|
||||
const CreateAppCard = forwardRef<HTMLAnchorElement, CreateAppCardProps>(({ onSuccess }, ref) => {
|
||||
const { t } = useTranslation()
|
||||
const { onPlanInfoChanged } = useProviderContext()
|
||||
const searchParams = useSearchParams()
|
||||
const { replace } = useRouter()
|
||||
const dslUrl = searchParams.get('remoteInstallUrl') || undefined
|
||||
|
||||
const [showNewAppTemplateDialog, setShowNewAppTemplateDialog] = useState(false)
|
||||
const [showNewAppModal, setShowNewAppModal] = useState(false)
|
||||
const [showCreateFromDSLModal, setShowCreateFromDSLModal] = useState(false)
|
||||
const [showCreateFromDSLModal, setShowCreateFromDSLModal] = useState(!!dslUrl)
|
||||
|
||||
const activeTab = useMemo(() => {
|
||||
if (dslUrl)
|
||||
return CreateFromDSLModalTab.FROM_URL
|
||||
|
||||
return undefined
|
||||
}, [dslUrl])
|
||||
|
||||
return (
|
||||
<a
|
||||
ref={ref}
|
||||
@@ -65,7 +80,14 @@ const CreateAppCard = forwardRef<HTMLAnchorElement, CreateAppCardProps>(({ onSuc
|
||||
/>
|
||||
<CreateFromDSLModal
|
||||
show={showCreateFromDSLModal}
|
||||
onClose={() => setShowCreateFromDSLModal(false)}
|
||||
onClose={() => {
|
||||
setShowCreateFromDSLModal(false)
|
||||
|
||||
if (dslUrl)
|
||||
replace('/')
|
||||
}}
|
||||
activeTab={activeTab}
|
||||
dslUrl={dslUrl}
|
||||
onSuccess={() => {
|
||||
onPlanInfoChanged()
|
||||
if (onSuccess)
|
||||
|
||||
@@ -17,7 +17,6 @@ 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
|
||||
@@ -167,7 +166,7 @@ const ConfigModal: FC<IConfigModalProps> = ({
|
||||
|
||||
{isStringInput && (
|
||||
<Field title={t('appDebug.variableConig.maxLength')}>
|
||||
<ConfigString maxLength={type === InputVarType.textInput ? TEXT_MAX_LENGTH : PARAGRAPH_MAX_LENGTH} modelId={modelConfig.model_id} value={max_length} onChange={handlePayloadChange('max_length')} />
|
||||
<ConfigString maxLength={type === InputVarType.textInput ? TEXT_MAX_LENGTH : Infinity} modelId={modelConfig.model_id} value={max_length} onChange={handlePayloadChange('max_length')} />
|
||||
</Field>
|
||||
|
||||
)}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client'
|
||||
|
||||
import type { MouseEventHandler } from 'react'
|
||||
import { useRef, useState } from 'react'
|
||||
import { useMemo, useRef, useState } from 'react'
|
||||
import { useRouter } from 'next/navigation'
|
||||
import { useContext } from 'use-context-selector'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
@@ -10,25 +10,38 @@ import Uploader from './uploader'
|
||||
import Button from '@/app/components/base/button'
|
||||
import Modal from '@/app/components/base/modal'
|
||||
import { ToastContext } from '@/app/components/base/toast'
|
||||
import { importApp } from '@/service/apps'
|
||||
import {
|
||||
importApp,
|
||||
importAppFromUrl,
|
||||
} from '@/service/apps'
|
||||
import { useAppContext } from '@/context/app-context'
|
||||
import { useProviderContext } from '@/context/provider-context'
|
||||
import AppsFull from '@/app/components/billing/apps-full-in-dialog'
|
||||
import { NEED_REFRESH_APP_LIST_KEY } from '@/config'
|
||||
import { getRedirection } from '@/utils/app-redirection'
|
||||
import cn from '@/utils/classnames'
|
||||
|
||||
type CreateFromDSLModalProps = {
|
||||
show: boolean
|
||||
onSuccess?: () => void
|
||||
onClose: () => void
|
||||
activeTab?: string
|
||||
dslUrl?: string
|
||||
}
|
||||
|
||||
const CreateFromDSLModal = ({ show, onSuccess, onClose }: CreateFromDSLModalProps) => {
|
||||
export enum CreateFromDSLModalTab {
|
||||
FROM_FILE = 'from-file',
|
||||
FROM_URL = 'from-url',
|
||||
}
|
||||
|
||||
const CreateFromDSLModal = ({ show, onSuccess, onClose, activeTab = CreateFromDSLModalTab.FROM_FILE, dslUrl = '' }: CreateFromDSLModalProps) => {
|
||||
const { push } = useRouter()
|
||||
const { t } = useTranslation()
|
||||
const { notify } = useContext(ToastContext)
|
||||
const [currentFile, setDSLFile] = useState<File>()
|
||||
const [fileContent, setFileContent] = useState<string>()
|
||||
const [currentTab, setCurrentTab] = useState(activeTab)
|
||||
const [dslUrlValue, setDslUrlValue] = useState(dslUrl)
|
||||
|
||||
const readFile = (file: File) => {
|
||||
const reader = new FileReader()
|
||||
@@ -53,15 +66,26 @@ const CreateFromDSLModal = ({ show, onSuccess, onClose }: CreateFromDSLModalProp
|
||||
|
||||
const isCreatingRef = useRef(false)
|
||||
const onCreate: MouseEventHandler = async () => {
|
||||
if (currentTab === CreateFromDSLModalTab.FROM_FILE && !currentFile)
|
||||
return
|
||||
if (currentTab === CreateFromDSLModalTab.FROM_URL && !dslUrlValue)
|
||||
return
|
||||
if (isCreatingRef.current)
|
||||
return
|
||||
isCreatingRef.current = true
|
||||
if (!currentFile)
|
||||
return
|
||||
try {
|
||||
const app = await importApp({
|
||||
data: fileContent || '',
|
||||
})
|
||||
let app
|
||||
|
||||
if (currentTab === CreateFromDSLModalTab.FROM_FILE) {
|
||||
app = await importApp({
|
||||
data: fileContent || '',
|
||||
})
|
||||
}
|
||||
if (currentTab === CreateFromDSLModalTab.FROM_URL) {
|
||||
app = await importAppFromUrl({
|
||||
url: dslUrlValue || '',
|
||||
})
|
||||
}
|
||||
if (onSuccess)
|
||||
onSuccess()
|
||||
if (onClose)
|
||||
@@ -76,24 +100,95 @@ const CreateFromDSLModal = ({ show, onSuccess, onClose }: CreateFromDSLModalProp
|
||||
isCreatingRef.current = false
|
||||
}
|
||||
|
||||
const tabs = [
|
||||
{
|
||||
key: CreateFromDSLModalTab.FROM_FILE,
|
||||
label: t('app.importFromDSLFile'),
|
||||
},
|
||||
{
|
||||
key: CreateFromDSLModalTab.FROM_URL,
|
||||
label: t('app.importFromDSLUrl'),
|
||||
},
|
||||
]
|
||||
|
||||
const buttonDisabled = useMemo(() => {
|
||||
if (isAppsFull)
|
||||
return true
|
||||
if (currentTab === CreateFromDSLModalTab.FROM_FILE)
|
||||
return !currentFile
|
||||
if (currentTab === CreateFromDSLModalTab.FROM_URL)
|
||||
return !dslUrlValue
|
||||
return false
|
||||
}, [isAppsFull, currentTab, currentFile, dslUrlValue])
|
||||
|
||||
return (
|
||||
<Modal
|
||||
className='px-8 py-6 max-w-[520px] w-[520px] rounded-xl'
|
||||
className='p-0 w-[520px] rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg shadow-xl'
|
||||
isShow={show}
|
||||
onClose={() => { }}
|
||||
>
|
||||
<div className='relative pb-2 text-xl font-medium leading-[30px] text-gray-900'>{t('app.createFromConfigFile')}</div>
|
||||
<div className='absolute right-4 top-4 p-2 cursor-pointer' onClick={onClose}>
|
||||
<RiCloseLine className='w-4 h-4 text-gray-500' />
|
||||
<div className='flex items-center justify-between pt-6 pl-6 pr-5 pb-3 text-text-primary title-2xl-semi-bold'>
|
||||
{t('app.importFromDSL')}
|
||||
<div
|
||||
className='flex items-center w-8 h-8 cursor-pointer'
|
||||
onClick={() => onClose()}
|
||||
>
|
||||
<RiCloseLine className='w-5 h-5 text-text-tertiary' />
|
||||
</div>
|
||||
</div>
|
||||
<Uploader
|
||||
file={currentFile}
|
||||
updateFile={handleFile}
|
||||
/>
|
||||
{isAppsFull && <AppsFull loc='app-create-dsl' />}
|
||||
<div className='pt-6 flex justify-end'>
|
||||
<div className='flex items-center px-6 h-9 space-x-6 system-md-semibold text-text-tertiary border-b border-divider-subtle'>
|
||||
{
|
||||
tabs.map(tab => (
|
||||
<div
|
||||
key={tab.key}
|
||||
className={cn(
|
||||
'relative flex items-center h-full cursor-pointer',
|
||||
currentTab === tab.key && 'text-text-primary',
|
||||
)}
|
||||
onClick={() => setCurrentTab(tab.key)}
|
||||
>
|
||||
{tab.label}
|
||||
{
|
||||
currentTab === tab.key && (
|
||||
<div className='absolute bottom-0 w-full h-[2px] bg-util-colors-blue-brand-blue-brand-600'></div>
|
||||
)
|
||||
}
|
||||
</div>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
<div className='px-6 py-4'>
|
||||
{
|
||||
currentTab === CreateFromDSLModalTab.FROM_FILE && (
|
||||
<Uploader
|
||||
className='mt-0'
|
||||
file={currentFile}
|
||||
updateFile={handleFile}
|
||||
/>
|
||||
)
|
||||
}
|
||||
{
|
||||
currentTab === CreateFromDSLModalTab.FROM_URL && (
|
||||
<div>
|
||||
<div className='mb-1 system-md-semibold leading6'>DSL URL</div>
|
||||
<input
|
||||
placeholder={t('app.importFromDSLUrlPlaceholder') || ''}
|
||||
className='px-2 w-full h-8 border border-components-input-border-active bg-components-input-bg-active rounded-lg outline-none appearance-none placeholder:text-components-input-text-placeholder system-sm-regular'
|
||||
value={dslUrlValue}
|
||||
onChange={e => setDslUrlValue(e.target.value)}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
</div>
|
||||
{isAppsFull && (
|
||||
<div className='px-6'>
|
||||
<AppsFull className='mt-0' loc='app-create-dsl' />
|
||||
</div>
|
||||
)}
|
||||
<div className='flex justify-end px-6 py-5'>
|
||||
<Button className='mr-2' onClick={onClose}>{t('app.newApp.Cancel')}</Button>
|
||||
<Button disabled={isAppsFull || !currentFile} variant="primary" onClick={onCreate}>{t('app.newApp.Create')}</Button>
|
||||
<Button disabled={buttonDisabled} variant="primary" onClick={onCreate}>{t('app.newApp.Create')}</Button>
|
||||
</div>
|
||||
</Modal>
|
||||
)
|
||||
|
||||
@@ -109,7 +109,7 @@ const SettingsModal: FC<ISettingsModalProps> = ({
|
||||
}
|
||||
|
||||
const validateColorHex = (hex: string | null) => {
|
||||
if (hex === null || hex.length === 0)
|
||||
if (hex === null || hex?.length === 0)
|
||||
return true
|
||||
|
||||
const regex = /#([A-Fa-f0-9]{6})/
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
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
|
||||
@@ -40,32 +42,15 @@ const Flowchart = React.forwardRef((props: {
|
||||
}, ref) => {
|
||||
const [svgCode, setSvgCode] = useState(null)
|
||||
const chartId = useRef(`flowchart_${CryptoJS.MD5(props.PrimitiveCode).toString()}`)
|
||||
const [isRender, setIsRender] = useState(false)
|
||||
const prevPrimitiveCode = usePrevious(props.PrimitiveCode)
|
||||
const [isLoading, setIsLoading] = useState(true)
|
||||
|
||||
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 timeRef = useRef<NodeJS.Timeout>()
|
||||
const [errMsg, setErrMsg] = useState('')
|
||||
|
||||
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)
|
||||
@@ -74,30 +59,26 @@ const Flowchart = React.forwardRef((props: {
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
clearFlowchartCache()
|
||||
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
||||
handleReRender()
|
||||
if (prevPrimitiveCode === props.PrimitiveCode) {
|
||||
setIsLoading(false)
|
||||
setErrMsg((error as Error).message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const handleReRender = () => {
|
||||
setIsRender(false)
|
||||
setSvgCode(null)
|
||||
if (chartId.current)
|
||||
localStorage.removeItem(chartId.current)
|
||||
|
||||
setTimeout(() => {
|
||||
setIsRender(true)
|
||||
renderFlowchart(props.PrimitiveCode)
|
||||
}, 100)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
setIsRender(false)
|
||||
setTimeout(() => {
|
||||
setIsRender(true)
|
||||
const cachedSvg: any = localStorage.getItem(chartId.current)
|
||||
if (cachedSvg) {
|
||||
setSvgCode(cachedSvg)
|
||||
setIsLoading(false)
|
||||
return
|
||||
}
|
||||
if (timeRef.current)
|
||||
clearTimeout(timeRef.current)
|
||||
|
||||
timeRef.current = setTimeout(() => {
|
||||
renderFlowchart(props.PrimitiveCode)
|
||||
}, 100)
|
||||
}, 300)
|
||||
}, [props.PrimitiveCode])
|
||||
|
||||
return (
|
||||
@@ -105,16 +86,24 @@ const Flowchart = React.forwardRef((props: {
|
||||
// @ts-expect-error
|
||||
<div ref={ref}>
|
||||
{
|
||||
isRender
|
||||
&& <div className="mermaid" style={style}>
|
||||
{svgCode && <img src={svgCode} style={{ width: '100%', height: 'auto' }} alt="Mermaid chart" />}
|
||||
</div>
|
||||
svgCode
|
||||
&& <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' />
|
||||
|
||||
{errMsg}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
)
|
||||
})
|
||||
|
||||
@@ -8,14 +8,18 @@ import s from './style.module.css'
|
||||
import cn from '@/utils/classnames'
|
||||
import GridMask from '@/app/components/base/grid-mask'
|
||||
|
||||
const AppsFull: FC<{ loc: string }> = ({
|
||||
const AppsFull: FC<{ loc: string; className?: string }> = ({
|
||||
loc,
|
||||
className,
|
||||
}) => {
|
||||
const { t } = useTranslation()
|
||||
|
||||
return (
|
||||
<GridMask wrapperClassName='rounded-lg' canvasClassName='rounded-lg' gradientClassName='rounded-lg'>
|
||||
<div className='mt-6 px-3.5 py-4 border-2 border-solid border-transparent rounded-lg shadow-md flex flex-col transition-all duration-200 ease-in-out cursor-pointer'>
|
||||
<div className={cn(
|
||||
'mt-6 px-3.5 py-4 border-2 border-solid border-transparent rounded-lg shadow-md flex flex-col transition-all duration-200 ease-in-out cursor-pointer',
|
||||
className,
|
||||
)}>
|
||||
<div className='flex justify-between items-center'>
|
||||
<div className={cn(s.textGradient, 'leading-[24px] text-base font-semibold')}>
|
||||
<div>{t('billing.apps.fullTipLine1')}</div>
|
||||
|
||||
@@ -213,7 +213,7 @@ Workflow applications offers non-session support and is ideal for translation, a
|
||||
---
|
||||
|
||||
<Heading
|
||||
url='/workflows/:task_id/stop'
|
||||
url='/workflows/tasks/: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/: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"}'`}>
|
||||
<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"}'`}>
|
||||
```bash {{ title: 'cURL' }}
|
||||
curl -X POST '${props.appDetail.api_base_url}/workflows/:task_id/stop' \
|
||||
curl -X POST '${props.appDetail.api_base_url}/workflows/tasks/:task_id/stop' \
|
||||
-H 'Authorization: Bearer {api_key}' \
|
||||
-H 'Content-Type: application/json' \
|
||||
--data-raw '{
|
||||
|
||||
@@ -209,7 +209,7 @@ Workflow 应用无会话支持,适合用于翻译/文章写作/总结 AI 等
|
||||
---
|
||||
|
||||
<Heading
|
||||
url='/workflows/:task_id/stop'
|
||||
url='/workflows/tasks/: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/: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"}'`}>
|
||||
<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"}'`}>
|
||||
```bash {{ title: 'cURL' }}
|
||||
curl -X POST '${props.appDetail.api_base_url}/workflows/:task_id/stop' \
|
||||
curl -X POST '${props.appDetail.api_base_url}/workflows/tasks/:task_id/stop' \
|
||||
-H 'Authorization: Bearer {api_key}' \
|
||||
-H 'Content-Type: application/json' \
|
||||
--data-raw '{
|
||||
|
||||
+9
-4
@@ -35,20 +35,25 @@ const ProviderCard: FC<ProviderCardProps> = ({
|
||||
|
||||
return (
|
||||
<div
|
||||
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'
|
||||
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'
|
||||
style={{ background: provider.background || DEFAULT_BACKGROUND_COLOR }}
|
||||
>
|
||||
<div>
|
||||
<div className='grow h-0'>
|
||||
<div className='py-0.5'>
|
||||
<ProviderIcon provider={provider} />
|
||||
</div>
|
||||
{
|
||||
provider.description && (
|
||||
<div className='mt-1 leading-4 text-xs text-black/[48]'>{provider.description[language] || provider.description.en_US}</div>
|
||||
<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>
|
||||
<div>
|
||||
<div className='shrink-0'>
|
||||
<div className={'flex flex-wrap group-hover:hidden gap-0.5'}>
|
||||
{
|
||||
provider.supported_model_types.map(modelType => (
|
||||
|
||||
@@ -13,6 +13,10 @@ const translation = {
|
||||
exportFailed: 'Export DSL failed.',
|
||||
importDSL: 'Import DSL file',
|
||||
createFromConfigFile: 'Create from DSL file',
|
||||
importFromDSL: 'Import from DSL',
|
||||
importFromDSLFile: 'From DSL file',
|
||||
importFromDSLUrl: 'From URL',
|
||||
importFromDSLUrlPlaceholder: 'Paste DSL link here',
|
||||
deleteAppConfirmTitle: 'Delete this app?',
|
||||
deleteAppConfirmContent:
|
||||
'Deleting the app is irreversible. Users will no longer be able to access your app, and all prompt configurations and logs will be permanently deleted.',
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
const translation = {
|
||||
title: 'Annotazioni',
|
||||
name: 'Risposta Annotazione',
|
||||
editBy: 'Risposta modificata da {{author}}',
|
||||
noData: {
|
||||
title: 'Nessuna annotazione',
|
||||
description:
|
||||
'Puoi modificare le annotazioni durante il debug dell\'app o importare annotazioni in blocco qui per una risposta di alta qualità.',
|
||||
},
|
||||
table: {
|
||||
header: {
|
||||
question: 'domanda',
|
||||
answer: 'risposta',
|
||||
createdAt: 'creato il',
|
||||
hits: 'hit',
|
||||
actions: 'azioni',
|
||||
addAnnotation: 'Aggiungi Annotazione',
|
||||
bulkImport: 'Importazione Bulk',
|
||||
bulkExport: 'Esportazione Bulk',
|
||||
clearAll: 'Cancella Tutte le Annotazioni',
|
||||
},
|
||||
},
|
||||
editModal: {
|
||||
title: 'Modifica Risposta Annotazione',
|
||||
queryName: 'Query Utente',
|
||||
answerName: 'Bot Narratore',
|
||||
yourAnswer: 'La tua Risposta',
|
||||
answerPlaceholder: 'Scrivi qui la tua risposta',
|
||||
yourQuery: 'La tua Query',
|
||||
queryPlaceholder: 'Scrivi qui la tua query',
|
||||
removeThisCache: 'Rimuovi questa Annotazione',
|
||||
createdAt: 'Creato il',
|
||||
},
|
||||
addModal: {
|
||||
title: 'Aggiungi Risposta Annotazione',
|
||||
queryName: 'Domanda',
|
||||
answerName: 'Risposta',
|
||||
answerPlaceholder: 'Scrivi qui la risposta',
|
||||
queryPlaceholder: 'Scrivi qui la query',
|
||||
createNext: 'Aggiungi un\'altra risposta annotata',
|
||||
},
|
||||
batchModal: {
|
||||
title: 'Importazione Bulk',
|
||||
csvUploadTitle: 'Trascina e rilascia il tuo file CSV qui, oppure ',
|
||||
browse: 'sfoglia',
|
||||
tip: 'Il file CSV deve conformarsi alla seguente struttura:',
|
||||
question: 'domanda',
|
||||
answer: 'risposta',
|
||||
contentTitle: 'contenuto chunk',
|
||||
content: 'contenuto',
|
||||
template: 'Scarica il modello qui',
|
||||
cancel: 'Annulla',
|
||||
run: 'Esegui Batch',
|
||||
runError: 'Errore nell\'esecuzione del batch',
|
||||
processing: 'Elaborazione batch in corso',
|
||||
completed: 'Importazione completata',
|
||||
error: 'Errore di Importazione',
|
||||
ok: 'OK',
|
||||
},
|
||||
errorMessage: {
|
||||
answerRequired: 'La risposta è obbligatoria',
|
||||
queryRequired: 'La domanda è obbligatoria',
|
||||
},
|
||||
viewModal: {
|
||||
annotatedResponse: 'Risposta Annotazione',
|
||||
hitHistory: 'Storico Hit',
|
||||
hit: 'Hit',
|
||||
hits: 'Hit',
|
||||
noHitHistory: 'Nessuno storico hit',
|
||||
},
|
||||
hitHistoryTable: {
|
||||
query: 'Query',
|
||||
match: 'Corrispondenza',
|
||||
response: 'Risposta',
|
||||
source: 'Fonte',
|
||||
score: 'Punteggio',
|
||||
time: 'Ora',
|
||||
},
|
||||
initSetup: {
|
||||
title: 'Configurazione Iniziale Risposta Annotazione',
|
||||
configTitle: 'Configurazione Risposta Annotazione',
|
||||
confirmBtn: 'Salva & Abilita',
|
||||
configConfirmBtn: 'Salva',
|
||||
},
|
||||
embeddingModelSwitchTip:
|
||||
'Modello di vettorizzazione del testo di annotazione, il cambio di modello comporterà una nuova integrazione, comportando costi aggiuntivi.',
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,104 @@
|
||||
const translation = {
|
||||
apiServer: 'Server API',
|
||||
apiKey: 'Chiave API',
|
||||
status: 'Stato',
|
||||
disabled: 'Disabilitato',
|
||||
ok: 'In Servizio',
|
||||
copy: 'Copia',
|
||||
copied: 'Copiato',
|
||||
play: 'Riproduci',
|
||||
pause: 'Pausa',
|
||||
playing: 'In Riproduzione',
|
||||
loading: 'Caricamento',
|
||||
merMaind: {
|
||||
rerender: 'Rifare il rendering',
|
||||
},
|
||||
never: 'Mai',
|
||||
apiKeyModal: {
|
||||
apiSecretKey: 'Chiave segreta API',
|
||||
apiSecretKeyTips:
|
||||
'Per prevenire l\'abuso dell\'API, proteggi la tua chiave API. Evita di usarla come testo semplice nel codice front-end. :)',
|
||||
createNewSecretKey: 'Crea nuova chiave segreta',
|
||||
secretKey: 'Chiave Segreta',
|
||||
created: 'CREATA',
|
||||
lastUsed: 'ULTIMO UTILIZZO',
|
||||
generateTips: 'Conserva questa chiave in un luogo sicuro e accessibile.',
|
||||
},
|
||||
actionMsg: {
|
||||
deleteConfirmTitle: 'Eliminare questa chiave segreta?',
|
||||
deleteConfirmTips: 'Questa azione non può essere annullata.',
|
||||
ok: 'OK',
|
||||
},
|
||||
completionMode: {
|
||||
title: 'API dell\'App di Completamento',
|
||||
info: 'Per una generazione di testo di alta qualità, come articoli, riassunti e traduzioni, utilizza l\'API completion-messages con l\'input dell\'utente. La generazione del testo si basa sui parametri del modello e sui modelli di prompt impostati in Dify Prompt Engineering.',
|
||||
createCompletionApi: 'Crea Messaggio di Completamento',
|
||||
createCompletionApiTip:
|
||||
'Crea un Messaggio di Completamento per supportare la modalità domanda e risposta.',
|
||||
inputsTips:
|
||||
'(Opzionale) Fornisci campi di input utente come coppie chiave-valore, corrispondenti alle variabili in Prompt Eng. La chiave è il nome della variabile, il Valore è il valore del parametro. Se il tipo di campo è Select, il Valore inviato deve essere una delle scelte preimpostate.',
|
||||
queryTips: 'Contenuto del testo di input dell\'utente.',
|
||||
blocking:
|
||||
'Tipo bloccante, in attesa che l\'esecuzione sia completata e restituisca i risultati. (Le richieste possono essere interrotte se il processo è lungo)',
|
||||
streaming:
|
||||
'restituzioni in streaming. Implementazione della restituzione in streaming basata su SSE (Server-Sent Events).',
|
||||
messageFeedbackApi: 'Feedback sul messaggio (mi piace)',
|
||||
messageFeedbackApiTip:
|
||||
'Valuta i messaggi ricevuti per conto degli utenti finali con mi piace o non mi piace. Questi dati sono visibili nella pagina Log & Annotazioni e utilizzati per futuri affinamenti del modello.',
|
||||
messageIDTip: 'ID del Messaggio',
|
||||
ratingTip: 'mi piace o non mi piace, null è annulla',
|
||||
parametersApi: 'Ottenere informazioni sui parametri dell\'applicazione',
|
||||
parametersApiTip:
|
||||
'Recupera i parametri di input configurati, inclusi nomi delle variabili, nomi dei campi, tipi e valori predefiniti. Tipicamente utilizzato per visualizzare questi campi in un modulo o per riempire i valori predefiniti dopo il caricamento del client.',
|
||||
},
|
||||
chatMode: {
|
||||
title: 'API dell\'App di Chat',
|
||||
info: 'Per app conversazionali versatili utilizzando un formato Q&A, chiama l\'API chat-messages per avviare il dialogo. Mantieni conversazioni in corso passando l\'conversation_id restituito. I parametri di risposta e i modelli dipendono dalle impostazioni di Dify Prompt Eng.',
|
||||
createChatApi: 'Crea messaggio di chat',
|
||||
createChatApiTip:
|
||||
'Crea un nuovo messaggio di conversazione o continua un dialogo esistente.',
|
||||
inputsTips:
|
||||
'(Opzionale) Fornisci campi di input utente come coppie chiave-valore, corrispondenti alle variabili in Prompt Eng. La chiave è il nome della variabile, il Valore è il valore del parametro. Se il tipo di campo è Select, il Valore inviato deve essere una delle scelte preimpostate.',
|
||||
queryTips: 'Contenuto della domanda di input dell\'utente',
|
||||
blocking:
|
||||
'Tipo bloccante, in attesa che l\'esecuzione sia completata e restituisca i risultati. (Le richieste possono essere interrotte se il processo è lungo)',
|
||||
streaming:
|
||||
'restituzioni in streaming. Implementazione della restituzione in streaming basata su SSE (Server-Sent Events).',
|
||||
conversationIdTip:
|
||||
'(Opzionale) ID della Conversazione: lasciare vuoto per la prima conversazione; passare l\'conversation_id dal contesto per continuare il dialogo.',
|
||||
messageFeedbackApi:
|
||||
'Feedback terminale del messaggio dell\'utente, mi piace',
|
||||
messageFeedbackApiTip:
|
||||
'Valuta i messaggi ricevuti per conto degli utenti finali con mi piace o non mi piace. Questi dati sono visibili nella pagina Log & Annotazioni e utilizzati per futuri affinamenti del modello.',
|
||||
messageIDTip: 'ID del Messaggio',
|
||||
ratingTip: 'mi piace o non mi piace, null è annulla',
|
||||
chatMsgHistoryApi: 'Ottieni la cronologia dei messaggi della chat',
|
||||
chatMsgHistoryApiTip:
|
||||
'La prima pagina restituisce l\'ultimo `limite` barra, che è in ordine inverso.',
|
||||
chatMsgHistoryConversationIdTip: 'ID della Conversazione',
|
||||
chatMsgHistoryFirstId:
|
||||
'ID del primo record di chat nella pagina corrente. L\'impostazione predefinita è nessuna.',
|
||||
chatMsgHistoryLimit: 'Quante chat vengono restituite in una richiesta',
|
||||
conversationsListApi: 'Ottieni l\'elenco delle conversazioni',
|
||||
conversationsListApiTip:
|
||||
'Ottiene l\'elenco delle sessioni dell\'utente corrente. Per impostazione predefinita, vengono restituite le ultime 20 sessioni.',
|
||||
conversationsListFirstIdTip:
|
||||
'ID dell\'ultimo record nella pagina corrente, predefinito nessuno.',
|
||||
conversationsListLimitTip:
|
||||
'Quante chat vengono restituite in una richiesta',
|
||||
conversationRenamingApi: 'Rinomina conversazione',
|
||||
conversationRenamingApiTip:
|
||||
'Rinomina conversazioni; il nome viene visualizzato nelle interfacce client multi-sessione.',
|
||||
conversationRenamingNameTip: 'Nuovo nome',
|
||||
parametersApi: 'Ottenere informazioni sui parametri dell\'applicazione',
|
||||
parametersApiTip:
|
||||
'Recupera i parametri di input configurati, inclusi nomi delle variabili, nomi dei campi, tipi e valori predefiniti. Tipicamente utilizzato per visualizzare questi campi in un modulo o per riempire i valori predefiniti dopo il caricamento del client.',
|
||||
},
|
||||
develop: {
|
||||
requestBody: 'Corpo della Richiesta',
|
||||
pathParams: 'Parametri del Percorso',
|
||||
query: 'Query',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,471 @@
|
||||
const translation = {
|
||||
pageTitle: {
|
||||
line1: 'PROMPT',
|
||||
line2: 'Engineering',
|
||||
},
|
||||
orchestrate: 'Orchestra',
|
||||
promptMode: {
|
||||
simple: 'Passa alla modalità esperto per modificare tutto il PROMPT',
|
||||
advanced: 'Modalità esperto',
|
||||
switchBack: 'Torna indietro',
|
||||
advancedWarning: {
|
||||
title:
|
||||
'Sei passato alla modalità esperto e una volta modificato il PROMPT, NON potrai tornare alla modalità base.',
|
||||
description: 'In modalità esperto, puoi modificare tutto il PROMPT.',
|
||||
learnMore: 'Scopri di più',
|
||||
ok: 'OK',
|
||||
},
|
||||
operation: {
|
||||
addMessage: 'Aggiungi messaggio',
|
||||
},
|
||||
contextMissing:
|
||||
'Componente del contesto mancante, l\'efficacia del prompt potrebbe non essere buona.',
|
||||
},
|
||||
operation: {
|
||||
applyConfig: 'Pubblica',
|
||||
resetConfig: 'Ripristina',
|
||||
debugConfig: 'Debug',
|
||||
addFeature: 'Aggiungi funzione',
|
||||
automatic: 'Automatico',
|
||||
stopResponding: 'Interrompi la risposta',
|
||||
agree: 'mi piace',
|
||||
disagree: 'non mi piace',
|
||||
cancelAgree: 'Annulla mi piace',
|
||||
cancelDisagree: 'Annulla non mi piace',
|
||||
userAction: 'Azione utente',
|
||||
},
|
||||
notSetAPIKey: {
|
||||
title: 'La chiave del provider LLM non è stata impostata',
|
||||
trailFinished: 'Periodo di prova terminato',
|
||||
description:
|
||||
'La chiave del provider LLM non è stata impostata e deve essere impostata prima del debug.',
|
||||
settingBtn: 'Vai alle impostazioni',
|
||||
},
|
||||
trailUseGPT4Info: {
|
||||
title: 'Non supporta gpt-4 adesso',
|
||||
description: 'Per utilizzare gpt-4, per favore imposta la chiave API.',
|
||||
},
|
||||
feature: {
|
||||
groupChat: {
|
||||
title: 'Migliora chat',
|
||||
description:
|
||||
'Aggiungere impostazioni pre-conversazione per le app può migliorare l\'esperienza utente.',
|
||||
},
|
||||
groupExperience: {
|
||||
title: 'Migliora esperienza',
|
||||
},
|
||||
conversationOpener: {
|
||||
title: 'Iniziatore di conversazione',
|
||||
description:
|
||||
'In un\'app di chat, la prima frase che l\'IA pronuncia attivamente all\'utente viene solitamente usata come benvenuto.',
|
||||
},
|
||||
suggestedQuestionsAfterAnswer: {
|
||||
title: 'Follow-up',
|
||||
description:
|
||||
'Impostare suggerimenti per le prossime domande può offrire agli utenti una chat migliore.',
|
||||
resDes: '3 suggerimenti per la prossima domanda dell\'utente.',
|
||||
tryToAsk: 'Prova a chiedere',
|
||||
},
|
||||
moreLikeThis: {
|
||||
title: 'Altri simili',
|
||||
description:
|
||||
'Genera più testi contemporaneamente, poi modifica e continua a generare',
|
||||
generateNumTip: 'Numero di ogni generazione',
|
||||
tip: 'L\'utilizzo di questa funzione comporterà un costo aggiuntivo di token',
|
||||
},
|
||||
speechToText: {
|
||||
title: 'Da voce a testo',
|
||||
description: 'Una volta abilitato, puoi usare l\'input vocale.',
|
||||
resDes: 'L\'input vocale è abilitato',
|
||||
},
|
||||
textToSpeech: {
|
||||
title: 'Da testo a voce',
|
||||
description:
|
||||
'Una volta abilitato, il testo può essere convertito in voce.',
|
||||
resDes: 'Il testo in audio è abilitato',
|
||||
},
|
||||
citation: {
|
||||
title: 'Citazioni e attribuzioni',
|
||||
description:
|
||||
'Una volta abilitato, mostra il documento sorgente e la sezione attribuita del contenuto generato.',
|
||||
resDes: 'Citazioni e attribuzioni sono abilitate',
|
||||
},
|
||||
annotation: {
|
||||
title: 'Risposta annotata',
|
||||
description:
|
||||
'Puoi aggiungere manualmente una risposta di alta qualità alla cache per una corrispondenza prioritaria con domande utente simili.',
|
||||
resDes: 'Risposta annotata è abilitata',
|
||||
scoreThreshold: {
|
||||
title: 'Soglia di punteggio',
|
||||
description:
|
||||
'Utilizzata per impostare la soglia di somiglianza per la risposta annotata.',
|
||||
easyMatch: 'Corrispondenza facile',
|
||||
accurateMatch: 'Corrispondenza accurata',
|
||||
},
|
||||
matchVariable: {
|
||||
title: 'Variabile di corrispondenza',
|
||||
choosePlaceholder: 'Scegli la variabile di corrispondenza',
|
||||
},
|
||||
cacheManagement: 'Annotazioni',
|
||||
cached: 'Annotato',
|
||||
remove: 'Rimuovi',
|
||||
removeConfirm: 'Eliminare questa annotazione?',
|
||||
add: 'Aggiungi annotazione',
|
||||
edit: 'Modifica annotazione',
|
||||
},
|
||||
dataSet: {
|
||||
title: 'Contesto',
|
||||
noData: 'Puoi importare Conoscenza come contesto',
|
||||
words: 'Parole',
|
||||
textBlocks: 'Blocchi di testo',
|
||||
selectTitle: 'Seleziona Conoscenza di riferimento',
|
||||
selected: 'Conoscenza selezionata',
|
||||
noDataSet: 'Nessuna Conoscenza trovata',
|
||||
toCreate: 'Vai a creare',
|
||||
notSupportSelectMulti: 'Attualmente supporta solo una Conoscenza',
|
||||
queryVariable: {
|
||||
title: 'Variabile di query',
|
||||
tip: 'Questa variabile verrà utilizzata come input di query per il recupero del contesto, ottenendo informazioni contestuali relative all\'input di questa variabile.',
|
||||
choosePlaceholder: 'Scegli la variabile di query',
|
||||
noVar: 'Nessuna variabile',
|
||||
noVarTip: 'per favore crea una variabile nella sezione Variabili',
|
||||
unableToQueryDataSet: 'Impossibile interrogare la Conoscenza',
|
||||
unableToQueryDataSetTip:
|
||||
'Impossibile interrogare la Conoscenza correttamente, per favore scegli una variabile di query nel contesto.',
|
||||
ok: 'OK',
|
||||
contextVarNotEmpty:
|
||||
'La variabile di query del contesto non può essere vuota',
|
||||
deleteContextVarTitle: 'Eliminare la variabile “{{varName}}”?',
|
||||
deleteContextVarTip:
|
||||
'Questa variabile è stata impostata come variabile di query del contesto, rimuoverla influenzerà l\'uso normale della Conoscenza. Se hai ancora bisogno di eliminarla, per favore riselezionala nella sezione del contesto.',
|
||||
},
|
||||
},
|
||||
tools: {
|
||||
title: 'Strumenti',
|
||||
tips: 'Gli strumenti forniscono un metodo di chiamata API standard, prendendo input dell\'utente o variabili come parametri di richiesta per interrogare dati esterni come contesto.',
|
||||
toolsInUse: '{{count}} strumenti in uso',
|
||||
modal: {
|
||||
title: 'Strumento',
|
||||
toolType: {
|
||||
title: 'Tipo di strumento',
|
||||
placeholder: 'Per favore seleziona il tipo di strumento',
|
||||
},
|
||||
name: {
|
||||
title: 'Nome',
|
||||
placeholder: 'Per favore inserisci il nome',
|
||||
},
|
||||
variableName: {
|
||||
title: 'Nome della variabile',
|
||||
placeholder: 'Per favore inserisci il nome della variabile',
|
||||
},
|
||||
},
|
||||
},
|
||||
conversationHistory: {
|
||||
title: 'Cronologia della conversazione',
|
||||
description: 'Imposta i nomi di prefisso per i ruoli di conversazione',
|
||||
tip: 'La Cronologia della Conversazione non è abilitata, per favore aggiungi <histories> nel prompt sopra.',
|
||||
learnMore: 'Scopri di più',
|
||||
editModal: {
|
||||
title: 'Modifica i nomi dei ruoli della conversazione',
|
||||
userPrefix: 'Prefisso utente',
|
||||
assistantPrefix: 'Prefisso assistente',
|
||||
},
|
||||
},
|
||||
toolbox: {
|
||||
title: 'CASSETTA DEGLI ATTREZZI',
|
||||
},
|
||||
moderation: {
|
||||
title: 'Moderazione del contenuto',
|
||||
description:
|
||||
'Proteggi l\'output del modello utilizzando l\'API di moderazione o mantenendo un elenco di parole sensibili.',
|
||||
allEnabled: 'Contenuto INPUT/OUTPUT abilitato',
|
||||
inputEnabled: 'Contenuto INPUT abilitato',
|
||||
outputEnabled: 'Contenuto OUTPUT abilitato',
|
||||
modal: {
|
||||
title: 'Impostazioni di moderazione del contenuto',
|
||||
provider: {
|
||||
title: 'Provider',
|
||||
openai: 'Moderazione OpenAI',
|
||||
openaiTip: {
|
||||
prefix:
|
||||
'La moderazione OpenAI richiede una chiave API OpenAI configurata nel',
|
||||
suffix: '.',
|
||||
},
|
||||
keywords: 'Parole chiave',
|
||||
},
|
||||
keywords: {
|
||||
tip: 'Una per linea, separate da interruzioni di linea. Fino a 100 caratteri per linea.',
|
||||
placeholder: 'Una per linea, separate da interruzioni di linea',
|
||||
line: 'Linea',
|
||||
},
|
||||
content: {
|
||||
input: 'Modera contenuto INPUT',
|
||||
output: 'Modera contenuto OUTPUT',
|
||||
preset: 'Risposte preimpostate',
|
||||
placeholder: 'Contenuto delle risposte preimpostate qui',
|
||||
condition:
|
||||
'Moderazione contenuto INPUT e OUTPUT abilitato almeno uno',
|
||||
fromApi: 'Le risposte preimpostate sono restituite dall\'API',
|
||||
errorMessage: 'Le risposte preimpostate non possono essere vuote',
|
||||
supportMarkdown: 'Markdown supportato',
|
||||
},
|
||||
openaiNotConfig: {
|
||||
before:
|
||||
'La moderazione OpenAI richiede una chiave API OpenAI configurata nel',
|
||||
after: '',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
automatic: {
|
||||
title: 'Orchestrazione automatizzata delle applicazioni',
|
||||
description:
|
||||
'Descrivi il tuo scenario, Dify orchestrerà un\'applicazione per te.',
|
||||
intendedAudience: 'Chi è il pubblico di destinazione?',
|
||||
intendedAudiencePlaceHolder: 'es. Studente',
|
||||
solveProblem: 'Quali problemi sperano che l\'IA possa risolvere per loro?',
|
||||
solveProblemPlaceHolder:
|
||||
'es. Estrarre approfondimenti e riassumere informazioni da lunghi rapporti e articoli',
|
||||
generate: 'Genera',
|
||||
audiencesRequired: 'Pubblico richiesto',
|
||||
problemRequired: 'Problema richiesto',
|
||||
resTitle: 'Abbiamo orchestrato la seguente applicazione per te.',
|
||||
apply: 'Applica questa orchestrazione',
|
||||
noData:
|
||||
'Descrivi il tuo caso d\'uso a sinistra, l\'anteprima dell\'orchestrazione verrà mostrata qui.',
|
||||
loading: 'Orchestrazione dell\'applicazione per te...',
|
||||
overwriteTitle: 'Sovrascrivere la configurazione esistente?',
|
||||
overwriteMessage:
|
||||
'Applicando questa orchestrazione sovrascriverai la configurazione esistente.',
|
||||
},
|
||||
resetConfig: {
|
||||
title: 'Confermare il ripristino?',
|
||||
message:
|
||||
'Il ripristino scarta le modifiche, ripristinando l\'ultima configurazione pubblicata.',
|
||||
},
|
||||
errorMessage: {
|
||||
nameOfKeyRequired: 'nome della chiave: {{key}} richiesto',
|
||||
valueOfVarRequired: 'il valore di {{key}} non può essere vuoto',
|
||||
queryRequired: 'Il testo della richiesta è richiesto.',
|
||||
waitForResponse:
|
||||
'Per favore attendi che la risposta al messaggio precedente sia completata.',
|
||||
waitForBatchResponse:
|
||||
'Per favore attendi che la risposta all\'attività batch sia completata.',
|
||||
notSelectModel: 'Per favore scegli un modello',
|
||||
waitForImgUpload: 'Per favore attendi il caricamento dell\'immagine',
|
||||
},
|
||||
chatSubTitle: 'Istruzioni',
|
||||
completionSubTitle: 'Prompt di prefisso',
|
||||
promptTip:
|
||||
'I prompt guidano le risposte dell\'IA con istruzioni e vincoli. Inserisci variabili come {{input}}. Questo prompt non sarà visibile agli utenti.',
|
||||
formattingChangedTitle: 'Formato modificato',
|
||||
formattingChangedText:
|
||||
'Modificare il formato resetterà l\'area di debug, sei sicuro?',
|
||||
variableTitle: 'Variabili',
|
||||
variableTip:
|
||||
'Gli utenti riempiono le variabili in un modulo, sostituendo automaticamente le variabili nel prompt.',
|
||||
notSetVar:
|
||||
'Le variabili consentono agli utenti di introdurre parole del prompt o osservazioni di apertura quando compilano i moduli. Puoi provare a inserire `{{input}}` nelle parole del prompt.',
|
||||
autoAddVar:
|
||||
'Le variabili non definite riferite nel pre-prompt, vuoi aggiungerle nel modulo di input dell\'utente?',
|
||||
variableTable: {
|
||||
key: 'Chiave Variabile',
|
||||
name: 'Nome Campo Input Utente',
|
||||
optional: 'Opzionale',
|
||||
type: 'Tipo di Input',
|
||||
action: 'Azioni',
|
||||
typeString: 'Stringa',
|
||||
typeSelect: 'Seleziona',
|
||||
},
|
||||
varKeyError: {
|
||||
canNoBeEmpty: 'La chiave della variabile non può essere vuota',
|
||||
tooLong:
|
||||
'La chiave della variabile: {{key}} è troppo lunga. Non può essere più lunga di 30 caratteri',
|
||||
notValid:
|
||||
'La chiave della variabile: {{key}} non è valida. Può contenere solo lettere, numeri e underscore',
|
||||
notStartWithNumber:
|
||||
'La chiave della variabile: {{key}} non può iniziare con un numero',
|
||||
keyAlreadyExists: 'La chiave della variabile: {{key}} esiste già',
|
||||
},
|
||||
otherError: {
|
||||
promptNoBeEmpty: 'Il prompt non può essere vuoto',
|
||||
historyNoBeEmpty:
|
||||
'La cronologia delle conversazioni deve essere impostata nel prompt',
|
||||
queryNoBeEmpty: 'La query deve essere impostata nel prompt',
|
||||
},
|
||||
variableConig: {
|
||||
'addModalTitle': 'Aggiungi Campo Input',
|
||||
'editModalTitle': 'Modifica Campo Input',
|
||||
'description': 'Impostazione per la variabile {{varName}}',
|
||||
'fieldType': 'Tipo di campo',
|
||||
'string': 'Testo breve',
|
||||
'text-input': 'Testo breve',
|
||||
'paragraph': 'Paragrafo',
|
||||
'select': 'Seleziona',
|
||||
'number': 'Numero',
|
||||
'notSet': 'Non impostato, prova a scrivere {{input}} nel prompt di prefisso',
|
||||
'stringTitle': 'Opzioni della casella di testo del modulo',
|
||||
'maxLength': 'Lunghezza massima',
|
||||
'options': 'Opzioni',
|
||||
'addOption': 'Aggiungi opzione',
|
||||
'apiBasedVar': 'Variabile basata su API',
|
||||
'varName': 'Nome Variabile',
|
||||
'labelName': 'Nome Etichetta',
|
||||
'inputPlaceholder': 'Per favore inserisci',
|
||||
'content': 'Contenuto',
|
||||
'required': 'Richiesto',
|
||||
'errorMsg': {
|
||||
varNameRequired: 'Il nome della variabile è richiesto',
|
||||
labelNameRequired: 'Il nome dell\'etichetta è richiesto',
|
||||
varNameCanBeRepeat: 'Il nome della variabile non può essere ripetuto',
|
||||
atLeastOneOption: 'È richiesta almeno un\'opzione',
|
||||
optionRepeat: 'Ci sono opzioni ripetute',
|
||||
},
|
||||
},
|
||||
vision: {
|
||||
name: 'Visione',
|
||||
description:
|
||||
'Abilitare la visione permetterà al modello di prendere immagini e rispondere a domande su di esse.',
|
||||
settings: 'Impostazioni',
|
||||
visionSettings: {
|
||||
title: 'Impostazioni di visione',
|
||||
resolution: 'Risoluzione',
|
||||
resolutionTooltip: `La bassa risoluzione permetterà al modello di ricevere una versione a bassa risoluzione 512 x 512 dell\\'immagine e di rappresentare l\\'immagine con un budget di 65 token. Questo permette all\\'API di restituire risposte più veloci e di consumare meno token di input per casi d\\'uso che non richiedono alta definizione.
|
||||
\n
|
||||
L\\'alta risoluzione permetterà al modello di vedere prima l\\'immagine a bassa risoluzione e poi di creare ritagli dettagliati delle immagini di input come quadrati 512px basati sulla dimensione dell\\'immagine di input. Ciascuno dei ritagli dettagliati utilizza il doppio del budget dei token per un totale di 129 token.`,
|
||||
high: 'Alta',
|
||||
low: 'Bassa',
|
||||
uploadMethod: 'Metodo di caricamento',
|
||||
both: 'Entrambi',
|
||||
localUpload: 'Caricamento locale',
|
||||
url: 'URL',
|
||||
uploadLimit: 'Limite di caricamento',
|
||||
},
|
||||
},
|
||||
voice: {
|
||||
name: 'Voce',
|
||||
defaultDisplay: 'Voce predefinita',
|
||||
description: 'Impostazioni della voce da testo a voce',
|
||||
settings: 'Impostazioni',
|
||||
voiceSettings: {
|
||||
title: 'Impostazioni della voce',
|
||||
language: 'Lingua',
|
||||
resolutionTooltip: 'Supporto per la lingua della voce da testo a voce.',
|
||||
voice: 'Voce',
|
||||
autoPlay: 'Riproduzione automatica',
|
||||
autoPlayEnabled: 'Acceso',
|
||||
autoPlayDisabled: 'Spento',
|
||||
},
|
||||
},
|
||||
openingStatement: {
|
||||
title: 'Iniziatore di conversazione',
|
||||
add: 'Aggiungi',
|
||||
writeOpener: 'Scrivi introduzione',
|
||||
placeholder:
|
||||
'Scrivi qui il tuo messaggio introduttivo, puoi usare variabili, prova a scrivere {{variable}}.',
|
||||
openingQuestion: 'Domande iniziali',
|
||||
noDataPlaceHolder:
|
||||
'Iniziare la conversazione con l\'utente può aiutare l\'IA a stabilire un legame più stretto con loro nelle applicazioni conversazionali.',
|
||||
varTip: 'Puoi usare variabili, prova a scrivere {{variable}}',
|
||||
tooShort:
|
||||
'Sono richieste almeno 20 parole di prompt iniziale per generare un\'introduzione alla conversazione.',
|
||||
notIncludeKey:
|
||||
'Il prompt iniziale non include la variabile: {{key}}. Per favore aggiungila al prompt iniziale.',
|
||||
},
|
||||
modelConfig: {
|
||||
model: 'Modello',
|
||||
setTone: 'Imposta tono delle risposte',
|
||||
title: 'Modello e Parametri',
|
||||
modeType: {
|
||||
chat: 'Chat',
|
||||
completion: 'Completamento',
|
||||
},
|
||||
},
|
||||
inputs: {
|
||||
title: 'Debug e Anteprima',
|
||||
noPrompt: 'Prova a scrivere qualche prompt nell\'input pre-prompt',
|
||||
userInputField: 'Campo Input Utente',
|
||||
noVar:
|
||||
'Compila il valore della variabile, che verrà automaticamente sostituito nel prompt ogni volta che inizia una nuova sessione.',
|
||||
chatVarTip:
|
||||
'Compila il valore della variabile, che verrà automaticamente sostituito nel prompt ogni volta che inizia una nuova sessione',
|
||||
completionVarTip:
|
||||
'Compila il valore della variabile, che verrà automaticamente sostituito nelle parole del prompt ogni volta che viene inviata una domanda.',
|
||||
previewTitle: 'Anteprima prompt',
|
||||
queryTitle: 'Contenuto query',
|
||||
queryPlaceholder: 'Per favore inserisci il testo della richiesta.',
|
||||
run: 'ESEGUI',
|
||||
},
|
||||
result: 'Testo di output',
|
||||
datasetConfig: {
|
||||
settingTitle: 'Impostazioni di recupero',
|
||||
knowledgeTip: 'Clicca sul pulsante “+” per aggiungere conoscenza',
|
||||
retrieveOneWay: {
|
||||
title: 'Recupero N-a-1',
|
||||
description:
|
||||
'Basato sull\'intento dell\'utente e le descrizioni della Conoscenza, l\'Agente seleziona autonomamente la migliore Conoscenza per la query. Ideale per applicazioni con Conoscenze distinte e limitate.',
|
||||
},
|
||||
retrieveMultiWay: {
|
||||
title: 'Recupero multipath',
|
||||
description:
|
||||
'Basato sull\'intento dell\'utente, esegue query su tutte le Conoscenze, recupera testo rilevante da più fonti e seleziona i migliori risultati corrispondenti alla query dell\'utente dopo il reranking. È richiesta la configurazione dell\'API del modello di reranking.',
|
||||
},
|
||||
rerankModelRequired: 'Il modello di reranking è richiesto',
|
||||
params: 'Parametri',
|
||||
top_k: 'Top K',
|
||||
top_kTip:
|
||||
'Usato per filtrare i chunk più simili alle domande degli utenti. Il sistema regolerà anche dinamicamente il valore di Top K, in base ai max_tokens del modello selezionato.',
|
||||
score_threshold: 'Soglia di punteggio',
|
||||
score_thresholdTip:
|
||||
'Usato per impostare la soglia di somiglianza per il filtraggio dei chunk.',
|
||||
retrieveChangeTip:
|
||||
'Modificare la modalità di indicizzazione e la modalità di recupero può influenzare le applicazioni associate a questa Conoscenza.',
|
||||
},
|
||||
debugAsSingleModel: 'Debug come modello singolo',
|
||||
debugAsMultipleModel: 'Debug come modelli multipli',
|
||||
duplicateModel: 'Duplica',
|
||||
publishAs: 'Pubblica come',
|
||||
assistantType: {
|
||||
name: 'Tipo di assistente',
|
||||
chatAssistant: {
|
||||
name: 'Assistente base',
|
||||
description:
|
||||
'Costruisci un assistente basato su chat utilizzando un grande modello linguistico',
|
||||
},
|
||||
agentAssistant: {
|
||||
name: 'Assistente Agente',
|
||||
description:
|
||||
'Costruisci un Agente intelligente che può scegliere autonomamente strumenti per completare i compiti',
|
||||
},
|
||||
},
|
||||
agent: {
|
||||
agentMode: 'Modalità Agente',
|
||||
agentModeDes: 'Imposta il tipo di modalità di inferenza per l\'agente',
|
||||
agentModeType: {
|
||||
ReACT: 'ReAct',
|
||||
functionCall: 'Chiamata di Funzione',
|
||||
},
|
||||
setting: {
|
||||
name: 'Impostazioni Agente',
|
||||
description:
|
||||
'Le impostazioni dell\'Assistente Agente permettono di impostare la modalità agente e funzionalità avanzate come prompt integrati, disponibili solo nel tipo Agente.',
|
||||
maximumIterations: {
|
||||
name: 'Iterazioni massime',
|
||||
description:
|
||||
'Limita il numero di iterazioni che un assistente agente può eseguire',
|
||||
},
|
||||
},
|
||||
buildInPrompt: 'Prompt Integrato',
|
||||
firstPrompt: 'Primo Prompt',
|
||||
nextIteration: 'Prossima Iterazione',
|
||||
promptPlaceholder: 'Scrivi qui il tuo prompt',
|
||||
tools: {
|
||||
name: 'Strumenti',
|
||||
description:
|
||||
'L\'utilizzo degli strumenti può estendere le capacità del LLM, come cercare su internet o eseguire calcoli scientifici',
|
||||
enabled: 'Abilitato',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,95 @@
|
||||
const translation = {
|
||||
title: 'Registri',
|
||||
description:
|
||||
'I registri registrano lo stato di esecuzione dell\'applicazione, inclusi input degli utenti e risposte AI.',
|
||||
dateTimeFormat: 'MM/DD/YYYY hh:mm A',
|
||||
table: {
|
||||
header: {
|
||||
time: 'Ora',
|
||||
endUser: 'Utente Finale',
|
||||
input: 'Input',
|
||||
output: 'Output',
|
||||
summary: 'Titolo',
|
||||
messageCount: 'Conteggio Messaggi',
|
||||
userRate: 'Valutazione Utente',
|
||||
adminRate: 'Valutazione Op.',
|
||||
startTime: 'ORA INIZIO',
|
||||
status: 'STATO',
|
||||
runtime: 'TEMPO DI ESECUZIONE',
|
||||
tokens: 'TOKEN',
|
||||
user: 'UTENTE FINALE',
|
||||
version: 'VERSIONE',
|
||||
},
|
||||
pagination: {
|
||||
previous: 'Prec',
|
||||
next: 'Succ',
|
||||
},
|
||||
empty: {
|
||||
noChat: 'Nessuna conversazione ancora',
|
||||
noOutput: 'Nessun output',
|
||||
element: {
|
||||
title: 'C\'è qualcuno?',
|
||||
content:
|
||||
'Osserva e annota le interazioni tra gli utenti finali e le applicazioni AI qui per migliorare continuamente l\'accuratezza dell\'AI. Puoi provare a <shareLink>condividere</shareLink> o a <testLink>testare</testLink> l\'app Web tu stesso, quindi tornare a questa pagina.',
|
||||
},
|
||||
},
|
||||
},
|
||||
detail: {
|
||||
time: 'Ora',
|
||||
conversationId: 'ID Conversazione',
|
||||
promptTemplate: 'Template Prompt',
|
||||
promptTemplateBeforeChat:
|
||||
'Template Prompt Prima della Chat · Come Messaggio di Sistema',
|
||||
annotationTip: 'Miglioramenti Segnalati da {{user}}',
|
||||
timeConsuming: 'Tempo Trascorso',
|
||||
second: 's',
|
||||
tokenCost: 'Token spesi',
|
||||
loading: 'caricamento',
|
||||
operation: {
|
||||
like: 'mi piace',
|
||||
dislike: 'non mi piace',
|
||||
addAnnotation: 'Aggiungi Miglioramento',
|
||||
editAnnotation: 'Modifica Miglioramento',
|
||||
annotationPlaceholder:
|
||||
'Inserisci la risposta prevista che desideri che l\'AI dia, che può essere utilizzata per il perfezionamento del modello e il miglioramento continuo della qualità della generazione di testo in futuro.',
|
||||
},
|
||||
variables: 'Variabili',
|
||||
uploadImages: 'Immagini Caricate',
|
||||
},
|
||||
filter: {
|
||||
period: {
|
||||
today: 'Oggi',
|
||||
last7days: 'Ultimi 7 Giorni',
|
||||
last4weeks: 'Ultime 4 settimane',
|
||||
last3months: 'Ultimi 3 mesi',
|
||||
last12months: 'Ultimi 12 mesi',
|
||||
monthToDate: 'Mese corrente',
|
||||
quarterToDate: 'Trimestre corrente',
|
||||
yearToDate: 'Anno corrente',
|
||||
allTime: 'Tutto il tempo',
|
||||
},
|
||||
annotation: {
|
||||
all: 'Tutti',
|
||||
annotated: 'Miglioramenti Annotati ({{count}} elementi)',
|
||||
not_annotated: 'Non Annotati',
|
||||
},
|
||||
},
|
||||
workflowTitle: 'Registri del Workflow',
|
||||
workflowSubtitle: 'Il registro ha registrato il funzionamento di Automate.',
|
||||
runDetail: {
|
||||
title: 'Registro Conversazione',
|
||||
workflowTitle: 'Dettagli Registro',
|
||||
},
|
||||
promptLog: 'Registro Prompt',
|
||||
agentLog: 'Registro Agente',
|
||||
viewLog: 'Visualizza Registro',
|
||||
agentLogDetail: {
|
||||
agentMode: 'Modalità Agente',
|
||||
toolUsed: 'Strumento Usato',
|
||||
iterations: 'Iterazioni',
|
||||
iteration: 'Iterazione',
|
||||
finalProcessing: 'Elaborazione Finale',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,177 @@
|
||||
const translation = {
|
||||
welcome: {
|
||||
firstStepTip: 'Per iniziare,',
|
||||
enterKeyTip: 'inserisci la tua OpenAI API Key qui sotto',
|
||||
getKeyTip: 'Ottieni la tua API Key dalla dashboard di OpenAI',
|
||||
placeholder: 'La tua OpenAI API Key(es. sk-xxxx)',
|
||||
},
|
||||
apiKeyInfo: {
|
||||
cloud: {
|
||||
trial: {
|
||||
title: 'Stai usando la quota di prova di {{providerName}}.',
|
||||
description:
|
||||
'La quota di prova è fornita per il tuo utilizzo di test. Prima che le chiamate della quota di prova siano esaurite, configura il tuo fornitore di modelli o acquista una quota aggiuntiva.',
|
||||
},
|
||||
exhausted: {
|
||||
title:
|
||||
'La tua quota di prova è stata utilizzata, configura la tua APIKey.',
|
||||
description:
|
||||
'La tua quota di prova è stata esaurita. Configura il tuo fornitore di modelli o acquista una quota aggiuntiva.',
|
||||
},
|
||||
},
|
||||
selfHost: {
|
||||
title: {
|
||||
row1: 'Per iniziare,',
|
||||
row2: 'configura prima il tuo fornitore di modelli.',
|
||||
},
|
||||
},
|
||||
callTimes: 'Numero di chiamate',
|
||||
usedToken: 'Token utilizzati',
|
||||
setAPIBtn: 'Vai a configurare il fornitore di modelli',
|
||||
tryCloud: 'O prova la versione cloud di Dify con quota gratuita',
|
||||
},
|
||||
overview: {
|
||||
title: 'Panoramica',
|
||||
appInfo: {
|
||||
explanation: 'AI WebApp pronta all\'uso',
|
||||
accessibleAddress: 'URL Pubblico',
|
||||
preview: 'Anteprima',
|
||||
regenerate: 'Rigenera',
|
||||
regenerateNotice: 'Vuoi rigenerare l\'URL pubblico?',
|
||||
preUseReminder: 'Attiva WebApp prima di continuare.',
|
||||
settings: {
|
||||
entry: 'Impostazioni',
|
||||
title: 'Impostazioni WebApp',
|
||||
webName: 'Nome WebApp',
|
||||
webDesc: 'Descrizione WebApp',
|
||||
webDescTip:
|
||||
'Questo testo verrà visualizzato sul lato client, fornendo una guida di base su come utilizzare l\'applicazione',
|
||||
webDescPlaceholder: 'Inserisci la descrizione della WebApp',
|
||||
language: 'Lingua',
|
||||
workflow: {
|
||||
title: 'Fasi del Workflow',
|
||||
show: 'Mostra',
|
||||
hide: 'Nascondi',
|
||||
},
|
||||
chatColorTheme: 'Tema colore chat',
|
||||
chatColorThemeDesc: 'Imposta il tema colore del chatbot',
|
||||
chatColorThemeInverted: 'Inverso',
|
||||
invalidHexMessage: 'Valore esadecimale non valido',
|
||||
more: {
|
||||
entry: 'Mostra più impostazioni',
|
||||
copyright: 'Copyright',
|
||||
copyRightPlaceholder:
|
||||
'Inserisci il nome dell\'autore o dell\'organizzazione',
|
||||
privacyPolicy: 'Privacy Policy',
|
||||
privacyPolicyPlaceholder: 'Inserisci il link alla privacy policy',
|
||||
privacyPolicyTip:
|
||||
'Aiuta i visitatori a capire i dati raccolti dall\'applicazione, vedi la <privacyPolicyLink>Privacy Policy</privacyPolicyLink> di Dify.',
|
||||
customDisclaimer: 'Disclaimer Personalizzato',
|
||||
customDisclaimerPlaceholder:
|
||||
'Inserisci il testo del disclaimer personalizzato',
|
||||
customDisclaimerTip:
|
||||
'Il testo del disclaimer personalizzato verrà visualizzato sul lato client, fornendo informazioni aggiuntive sull\'applicazione',
|
||||
},
|
||||
},
|
||||
embedded: {
|
||||
entry: 'Incorporato',
|
||||
title: 'Incorpora sul sito web',
|
||||
explanation: 'Scegli come incorporare l\'app chat nel tuo sito web',
|
||||
iframe:
|
||||
'Per aggiungere l\'app chat ovunque sul tuo sito web, aggiungi questo iframe al tuo codice HTML.',
|
||||
scripts:
|
||||
'Per aggiungere un\'app chat in basso a destra del tuo sito web, aggiungi questo codice al tuo HTML.',
|
||||
chromePlugin: 'Installa l\'estensione Chrome di Dify Chatbot',
|
||||
copied: 'Copiato',
|
||||
copy: 'Copia',
|
||||
},
|
||||
qrcode: {
|
||||
title: 'Codice QR per condividere',
|
||||
scan: 'Scansiona Condividi Applicazione',
|
||||
download: 'Scarica Codice QR',
|
||||
},
|
||||
customize: {
|
||||
way: 'modo',
|
||||
entry: 'Personalizza',
|
||||
title: 'Personalizza AI WebApp',
|
||||
explanation:
|
||||
'Puoi personalizzare il frontend della Web App per adattarla alle tue esigenze di scenario e stile.',
|
||||
way1: {
|
||||
name: 'Fork il codice client, modificalo e distribuiscilo su Vercel (consigliato)',
|
||||
step1: 'Fork il codice client e modificalo',
|
||||
step1Tip:
|
||||
'Clicca qui per fork il codice sorgente nel tuo account GitHub e modifica il codice',
|
||||
step1Operation: 'Dify-WebClient',
|
||||
step2: 'Distribuisci su Vercel',
|
||||
step2Tip:
|
||||
'Clicca qui per importare il repository su Vercel e distribuisci',
|
||||
step2Operation: 'Importa repository',
|
||||
step3: 'Configura le variabili di ambiente',
|
||||
step3Tip: 'Aggiungi le seguenti variabili di ambiente su Vercel',
|
||||
},
|
||||
way2: {
|
||||
name: 'Scrivi codice lato client per chiamare l\'API e distribuiscilo su un server',
|
||||
operation: 'Documentazione',
|
||||
},
|
||||
},
|
||||
},
|
||||
apiInfo: {
|
||||
title: 'API del servizio backend',
|
||||
explanation: 'Facilmente integrabile nella tua applicazione',
|
||||
accessibleAddress: 'Endpoint del servizio API',
|
||||
doc: 'Riferimento API',
|
||||
},
|
||||
status: {
|
||||
running: 'In servizio',
|
||||
disable: 'Disabilita',
|
||||
},
|
||||
},
|
||||
analysis: {
|
||||
title: 'Analisi',
|
||||
ms: 'ms',
|
||||
tokenPS: 'Token/s',
|
||||
totalMessages: {
|
||||
title: 'Totale Messaggi',
|
||||
explanation:
|
||||
'Conteggio delle interazioni giornaliere con l\'AI; ingegneria dei prompt/debug esclusi.',
|
||||
},
|
||||
activeUsers: {
|
||||
title: 'Utenti Attivi',
|
||||
explanation:
|
||||
'Utenti unici che interagiscono in Q&A con l\'AI; ingegneria dei prompt/debug esclusi.',
|
||||
},
|
||||
tokenUsage: {
|
||||
title: 'Uso dei Token',
|
||||
explanation:
|
||||
'Riflette l\'uso giornaliero dei token del modello linguistico per l\'applicazione, utile per il controllo dei costi.',
|
||||
consumed: 'Consumati',
|
||||
},
|
||||
avgSessionInteractions: {
|
||||
title: 'Interazioni Medie per Sessione',
|
||||
explanation:
|
||||
'Conteggio continuo delle comunicazioni utente-AI; per applicazioni basate su conversazione.',
|
||||
},
|
||||
avgUserInteractions: {
|
||||
title: 'Interazioni Medie per Utente',
|
||||
explanation:
|
||||
'Riflette la frequenza giornaliera di utilizzo degli utenti. Questo parametro riflette la fedeltà degli utenti.',
|
||||
},
|
||||
userSatisfactionRate: {
|
||||
title: 'Tasso di Soddisfazione degli Utenti',
|
||||
explanation:
|
||||
'Il numero di mi piace per 1.000 messaggi. Indica la proporzione di risposte con cui gli utenti sono molto soddisfatti.',
|
||||
},
|
||||
avgResponseTime: {
|
||||
title: 'Tempo Medio di Risposta',
|
||||
explanation:
|
||||
'Tempo (ms) per l\'AI per elaborare/rispondere; per applicazioni basate su testo.',
|
||||
},
|
||||
tps: {
|
||||
title: 'Velocità di Output dei Token',
|
||||
explanation:
|
||||
'Misura le prestazioni del LLM. Conta la velocità di output dei token del LLM dall\'inizio della richiesta al completamento dell\'output.',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,138 @@
|
||||
const translation = {
|
||||
createApp: 'CREA APP',
|
||||
types: {
|
||||
all: 'Tutti',
|
||||
chatbot: 'Chatbot',
|
||||
agent: 'Agente',
|
||||
workflow: 'Flusso di lavoro',
|
||||
completion: 'Completamento',
|
||||
},
|
||||
duplicate: 'Duplica',
|
||||
duplicateTitle: 'Duplica App',
|
||||
export: 'Esporta DSL',
|
||||
exportFailed: 'Esportazione DSL fallita.',
|
||||
importDSL: 'Importa file DSL',
|
||||
createFromConfigFile: 'Crea da file DSL',
|
||||
deleteAppConfirmTitle: 'Eliminare questa app?',
|
||||
deleteAppConfirmContent:
|
||||
'Eliminare l\'app è irreversibile. Gli utenti non potranno più accedere alla tua app e tutte le configurazioni e i log dei prompt verranno eliminati permanentemente.',
|
||||
appDeleted: 'App eliminata',
|
||||
appDeleteFailed: 'Eliminazione dell\'app fallita',
|
||||
join: 'Unisciti alla comunità',
|
||||
communityIntro:
|
||||
'Discuta con membri del team, collaboratori e sviluppatori su diversi canali.',
|
||||
roadmap: 'Vedi la nostra roadmap',
|
||||
newApp: {
|
||||
startFromBlank: 'Crea da zero',
|
||||
startFromTemplate: 'Crea da modello',
|
||||
captionAppType: 'Che tipo di app vuoi creare?',
|
||||
chatbotDescription:
|
||||
'Crea un\'applicazione basata sulla chat. Questa app utilizza un formato domanda-e-risposta, consentendo più round di conversazione continua.',
|
||||
completionDescription:
|
||||
'Crea un\'applicazione che genera testo di alta qualità basato sui prompt, come articoli, riassunti, traduzioni e altro.',
|
||||
completionWarning: 'Questo tipo di app non sarà più supportato.',
|
||||
agentDescription:
|
||||
'Crea un Agente intelligente che può scegliere autonomamente gli strumenti per completare i compiti',
|
||||
workflowDescription:
|
||||
'Crea un\'applicazione che genera testo di alta qualità basato su flussi di lavoro orchestrati con un alto grado di personalizzazione. È adatto per utenti esperti.',
|
||||
workflowWarning: 'Attualmente in beta',
|
||||
chatbotType: 'Metodo di orchestrazione Chatbot',
|
||||
basic: 'Base',
|
||||
basicTip: 'Per principianti, può passare a Chatflow in seguito',
|
||||
basicFor: 'PER PRINCIPIANTI',
|
||||
basicDescription:
|
||||
'L\'Orchestrazione di base consente l\'orchestrazione di un\'app Chatbot utilizzando impostazioni semplici, senza la possibilità di modificare i prompt integrati. È adatta per principianti.',
|
||||
advanced: 'Chatflow',
|
||||
advancedFor: 'Per utenti avanzati',
|
||||
advancedDescription:
|
||||
'L\'Orchestrazione del flusso di lavoro orchestra i Chatbot sotto forma di flussi di lavoro, offrendo un alto grado di personalizzazione, inclusa la possibilità di modificare i prompt integrati. È adatta per utenti esperti.',
|
||||
captionName: 'Icona e nome dell\'app',
|
||||
appNamePlaceholder: 'Dai un nome alla tua app',
|
||||
captionDescription: 'Descrizione',
|
||||
appDescriptionPlaceholder: 'Inserisci la descrizione dell\'app',
|
||||
useTemplate: 'Usa questo modello',
|
||||
previewDemo: 'Anteprima demo',
|
||||
chatApp: 'Assistente',
|
||||
chatAppIntro:
|
||||
'Voglio creare un\'applicazione basata sulla chat. Questa app utilizza un formato domanda-e-risposta, consentendo più round di conversazione continua.',
|
||||
agentAssistant: 'Nuovo Agente Assistente',
|
||||
completeApp: 'Generatore di Testi',
|
||||
completeAppIntro:
|
||||
'Voglio creare un\'applicazione che genera testo di alta qualità basato sui prompt, come articoli, riassunti, traduzioni e altro.',
|
||||
showTemplates: 'Voglio scegliere da un modello',
|
||||
hideTemplates: 'Torna alla selezione della modalità',
|
||||
Create: 'Crea',
|
||||
Cancel: 'Annulla',
|
||||
nameNotEmpty: 'Il nome non può essere vuoto',
|
||||
appTemplateNotSelected: 'Seleziona un modello',
|
||||
appTypeRequired: 'Seleziona un tipo di app',
|
||||
appCreated: 'App creata',
|
||||
appCreateFailed: 'Creazione dell\'app fallita',
|
||||
},
|
||||
editApp: 'Modifica Info',
|
||||
editAppTitle: 'Modifica Info App',
|
||||
editDone: 'Info app aggiornata',
|
||||
editFailed: 'Aggiornamento delle info dell\'app fallito',
|
||||
emoji: {
|
||||
ok: 'OK',
|
||||
cancel: 'Annulla',
|
||||
},
|
||||
switch: 'Passa a Orchestrazione del flusso di lavoro',
|
||||
switchTipStart:
|
||||
'Verrà creata una nuova copia dell\'app per te, e la nuova copia passerà a Orchestrazione del flusso di lavoro. La nuova copia ',
|
||||
switchTip: 'non permetterà',
|
||||
switchTipEnd: ' di tornare a Orchestrazione di base.',
|
||||
switchLabel: 'La copia dell\'app da creare',
|
||||
removeOriginal: 'Elimina l\'app originale',
|
||||
switchStart: 'Inizia il passaggio',
|
||||
typeSelector: {
|
||||
all: 'TUTTI I Tipi',
|
||||
chatbot: 'Chatbot',
|
||||
agent: 'Agente',
|
||||
workflow: 'Flusso di lavoro',
|
||||
completion: 'Completamento',
|
||||
},
|
||||
tracing: {
|
||||
title: 'Tracciamento delle prestazioni dell\'app',
|
||||
description:
|
||||
'Configurazione di un provider LLMOps di terze parti e tracciamento delle prestazioni dell\'app.',
|
||||
config: 'Config',
|
||||
collapse: 'Comprimi',
|
||||
expand: 'Espandi',
|
||||
tracing: 'Tracciamento',
|
||||
disabled: 'Disabilitato',
|
||||
disabledTip: 'Configura prima il provider',
|
||||
enabled: 'In servizio',
|
||||
tracingDescription:
|
||||
'Cattura il contesto completo dell\'esecuzione dell\'app, incluse chiamate LLM, contesto, prompt, richieste HTTP e altro, su una piattaforma di tracciamento di terze parti.',
|
||||
configProviderTitle: {
|
||||
configured: 'Configurato',
|
||||
notConfigured: 'Configura il provider per abilitare il tracciamento',
|
||||
moreProvider: 'Altri Provider',
|
||||
},
|
||||
langsmith: {
|
||||
title: 'LangSmith',
|
||||
description:
|
||||
'Una piattaforma all-in-one per sviluppatori per ogni fase del ciclo di vita delle applicazioni alimentate da LLM.',
|
||||
},
|
||||
langfuse: {
|
||||
title: 'Langfuse',
|
||||
description:
|
||||
'Tracce, valutazioni, gestione dei prompt e metriche per debug e miglioramento della tua applicazione LLM.',
|
||||
},
|
||||
inUse: 'In uso',
|
||||
configProvider: {
|
||||
title: 'Config ',
|
||||
placeholder: 'Inserisci il tuo {{key}}',
|
||||
project: 'Progetto',
|
||||
publicKey: 'Chiave pubblica',
|
||||
secretKey: 'Chiave segreta',
|
||||
viewDocsLink: 'Visualizza documenti di {{key}}',
|
||||
removeConfirmTitle: 'Rimuovere la configurazione di {{key}}?',
|
||||
removeConfirmContent:
|
||||
'La configurazione attuale è in uso, rimuovendola disattiverà la funzione di Tracciamento.',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,131 @@
|
||||
const translation = {
|
||||
currentPlan: 'Piano Attuale',
|
||||
upgradeBtn: {
|
||||
plain: 'Aggiorna Piano',
|
||||
encourage: 'Aggiorna Ora',
|
||||
encourageShort: 'Aggiorna',
|
||||
},
|
||||
viewBilling: 'Gestisci fatturazione e abbonamenti',
|
||||
buyPermissionDeniedTip:
|
||||
'Contatta l\'amministratore della tua azienda per abbonarti',
|
||||
plansCommon: {
|
||||
title: 'Scegli un piano adatto a te',
|
||||
yearlyTip: 'Ottieni 2 mesi gratis abbonandoti annualmente!',
|
||||
mostPopular: 'Più Popolare',
|
||||
planRange: {
|
||||
monthly: 'Mensile',
|
||||
yearly: 'Annuale',
|
||||
},
|
||||
month: 'mese',
|
||||
year: 'anno',
|
||||
save: 'Risparmia ',
|
||||
free: 'Gratuito',
|
||||
currentPlan: 'Piano Attuale',
|
||||
contractSales: 'Contatta vendite',
|
||||
contractOwner: 'Contatta il responsabile del team',
|
||||
startForFree: 'Inizia gratis',
|
||||
getStartedWith: 'Inizia con ',
|
||||
contactSales: 'Contatta le vendite',
|
||||
talkToSales: 'Parla con le vendite',
|
||||
modelProviders: 'Fornitori di Modelli',
|
||||
teamMembers: 'Membri del Team',
|
||||
annotationQuota: 'Quota di Annotazione',
|
||||
buildApps: 'Crea App',
|
||||
vectorSpace: 'Spazio Vettoriale',
|
||||
vectorSpaceBillingTooltip:
|
||||
'Ogni 1MB può memorizzare circa 1,2 milioni di caratteri di dati vettoriali (stimato utilizzando OpenAI Embeddings, varia tra i modelli).',
|
||||
vectorSpaceTooltip:
|
||||
'Lo Spazio Vettoriale è il sistema di memoria a lungo termine necessario per permettere agli LLM di comprendere i tuoi dati.',
|
||||
documentsUploadQuota: 'Quota di Caricamento Documenti',
|
||||
documentProcessingPriority: 'Priorità di Elaborazione Documenti',
|
||||
documentProcessingPriorityTip:
|
||||
'Per una maggiore priorità di elaborazione dei documenti, aggiorna il tuo piano.',
|
||||
documentProcessingPriorityUpgrade:
|
||||
'Elabora più dati con maggiore precisione a velocità più elevate.',
|
||||
priority: {
|
||||
'standard': 'Standard',
|
||||
'priority': 'Priorità',
|
||||
'top-priority': 'Massima Priorità',
|
||||
},
|
||||
logsHistory: 'Storico dei Log',
|
||||
customTools: 'Strumenti Personalizzati',
|
||||
unavailable: 'Non Disponibile',
|
||||
days: 'giorni',
|
||||
unlimited: 'Illimitato',
|
||||
support: 'Supporto',
|
||||
supportItems: {
|
||||
communityForums: 'Forum della comunità',
|
||||
emailSupport: 'Supporto via email',
|
||||
priorityEmail: 'Supporto via email e chat prioritario',
|
||||
logoChange: 'Cambia logo',
|
||||
SSOAuthentication: 'Autenticazione SSO',
|
||||
personalizedSupport: 'Supporto personalizzato',
|
||||
dedicatedAPISupport: 'Supporto API dedicato',
|
||||
customIntegration: 'Integrazione e supporto personalizzato',
|
||||
ragAPIRequest: 'Richieste API RAG',
|
||||
bulkUpload: 'Caricamento massivo di documenti',
|
||||
agentMode: 'Modalità Agente',
|
||||
workflow: 'Flusso di Lavoro',
|
||||
llmLoadingBalancing: 'Bilanciamento del Carico LLM',
|
||||
llmLoadingBalancingTooltip:
|
||||
'Aggiungi più chiavi API ai modelli, bypassando efficacemente i limiti di velocità dell\'API.',
|
||||
},
|
||||
comingSoon: 'In arrivo',
|
||||
member: 'Membro',
|
||||
memberAfter: 'Membro',
|
||||
messageRequest: {
|
||||
title: 'Crediti Messaggi',
|
||||
tooltip:
|
||||
'Quote di invocazione dei messaggi per vari piani utilizzando i modelli OpenAI (eccetto gpt4). I messaggi oltre il limite utilizzeranno la tua chiave API OpenAI.',
|
||||
},
|
||||
annotatedResponse: {
|
||||
title: 'Limiti di Quota di Annotazione',
|
||||
tooltip:
|
||||
'La modifica manuale e l\'annotazione delle risposte forniscono capacità di risposta a domande personalizzabili di alta qualità per le app. (Applicabile solo nelle app di chat)',
|
||||
},
|
||||
ragAPIRequestTooltip:
|
||||
'Si riferisce al numero di chiamate API che invocano solo le capacità di elaborazione della base di conoscenza di Dify.',
|
||||
receiptInfo:
|
||||
'Solo il proprietario del team e l\'amministratore del team possono abbonarsi e visualizzare le informazioni di fatturazione',
|
||||
},
|
||||
plans: {
|
||||
sandbox: {
|
||||
name: 'Sandbox',
|
||||
description: '200 prove gratuite di GPT',
|
||||
includesTitle: 'Include:',
|
||||
},
|
||||
professional: {
|
||||
name: 'Professional',
|
||||
description:
|
||||
'Per individui e piccoli team per sbloccare più potenza a prezzi accessibili.',
|
||||
includesTitle: 'Tutto nel piano gratuito, più:',
|
||||
},
|
||||
team: {
|
||||
name: 'Team',
|
||||
description:
|
||||
'Collabora senza limiti e goditi prestazioni di alto livello.',
|
||||
includesTitle: 'Tutto nel piano Professional, più:',
|
||||
},
|
||||
enterprise: {
|
||||
name: 'Enterprise',
|
||||
description:
|
||||
'Ottieni tutte le capacità e il supporto per sistemi mission-critical su larga scala.',
|
||||
includesTitle: 'Tutto nel piano Team, più:',
|
||||
},
|
||||
},
|
||||
vectorSpace: {
|
||||
fullTip: 'Lo Spazio Vettoriale è pieno.',
|
||||
fullSolution: 'Aggiorna il tuo piano per ottenere più spazio.',
|
||||
},
|
||||
apps: {
|
||||
fullTipLine1: 'Aggiorna il tuo piano per',
|
||||
fullTipLine2: 'creare più app.',
|
||||
},
|
||||
annotatedResponse: {
|
||||
fullTipLine1: 'Aggiorna il tuo piano per',
|
||||
fullTipLine2: 'annotare più conversazioni.',
|
||||
quotaTitle: 'Quota di Risposta Annotata',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,602 @@
|
||||
const translation = {
|
||||
api: {
|
||||
success: 'Successo',
|
||||
actionSuccess: 'Azione riuscita',
|
||||
saved: 'Salvato',
|
||||
create: 'Creato',
|
||||
remove: 'Rimosso',
|
||||
},
|
||||
operation: {
|
||||
create: 'Crea',
|
||||
confirm: 'Conferma',
|
||||
cancel: 'Annulla',
|
||||
clear: 'Cancella',
|
||||
save: 'Salva',
|
||||
saveAndEnable: 'Salva & Abilita',
|
||||
edit: 'Modifica',
|
||||
add: 'Aggiungi',
|
||||
added: 'Aggiunto',
|
||||
refresh: 'Riavvia',
|
||||
reset: 'Reimposta',
|
||||
search: 'Cerca',
|
||||
change: 'Cambia',
|
||||
remove: 'Rimuovi',
|
||||
send: 'Invia',
|
||||
copy: 'Copia',
|
||||
lineBreak: 'A capo',
|
||||
sure: 'Sono sicuro',
|
||||
download: 'Scarica',
|
||||
delete: 'Elimina',
|
||||
settings: 'Impostazioni',
|
||||
setup: 'Configurazione',
|
||||
getForFree: 'Ottieni gratuitamente',
|
||||
reload: 'Ricarica',
|
||||
ok: 'OK',
|
||||
log: 'Log',
|
||||
learnMore: 'Scopri di più',
|
||||
params: 'Parametri',
|
||||
duplicate: 'Duplica',
|
||||
rename: 'Rinomina',
|
||||
},
|
||||
errorMsg: {
|
||||
fieldRequired: '{{field}} è obbligatorio',
|
||||
urlError: 'L\'URL deve iniziare con http:// o https://',
|
||||
},
|
||||
placeholder: {
|
||||
input: 'Per favore inserisci',
|
||||
select: 'Per favore seleziona',
|
||||
},
|
||||
voice: {
|
||||
language: {
|
||||
zhHans: 'Cinese',
|
||||
zhHant: 'Cinese Tradizionale',
|
||||
enUS: 'Inglese',
|
||||
deDE: 'Tedesco',
|
||||
frFR: 'Francese',
|
||||
esES: 'Spagnolo',
|
||||
itIT: 'Italiano',
|
||||
thTH: 'Thailandese',
|
||||
idID: 'Indonesiano',
|
||||
jaJP: 'Giapponese',
|
||||
koKR: 'Coreano',
|
||||
ptBR: 'Portoghese',
|
||||
ruRU: 'Russo',
|
||||
ukUA: 'Ucraino',
|
||||
viVN: 'Vietnamita',
|
||||
plPL: 'Polacco',
|
||||
},
|
||||
},
|
||||
unit: {
|
||||
char: 'caratteri',
|
||||
},
|
||||
actionMsg: {
|
||||
noModification: 'Nessuna modifica al momento.',
|
||||
modifiedSuccessfully: 'Modificato con successo',
|
||||
modifiedUnsuccessfully: 'Modifica non riuscita',
|
||||
copySuccessfully: 'Copiato con successo',
|
||||
paySucceeded: 'Pagamento riuscito',
|
||||
payCancelled: 'Pagamento annullato',
|
||||
generatedSuccessfully: 'Generato con successo',
|
||||
generatedUnsuccessfully: 'Generazione non riuscita',
|
||||
},
|
||||
model: {
|
||||
params: {
|
||||
temperature: 'Temperatura',
|
||||
temperatureTip:
|
||||
'Controlla la casualità: Abbassando si ottengono completamenti meno casuali. Man mano che la temperatura si avvicina a zero, il modello diventa deterministico e ripetitivo.',
|
||||
top_p: 'Top P',
|
||||
top_pTip:
|
||||
'Controlla la diversità tramite campionamento nucleare: 0.5 significa che vengono considerati la metà di tutte le opzioni ponderate per probabilità.',
|
||||
presence_penalty: 'Penalità di presenza',
|
||||
presence_penaltyTip:
|
||||
'Quanto penalizzare i nuovi token in base alla loro presenza nel testo finora. Aumenta la probabilità che il modello parli di nuovi argomenti.',
|
||||
frequency_penalty: 'Penalità di frequenza',
|
||||
frequency_penaltyTip:
|
||||
'Quanto penalizzare i nuovi token in base alla loro frequenza esistente nel testo finora. Diminuisce la probabilità che il modello ripeta la stessa riga alla lettera.',
|
||||
max_tokens: 'Token massimo',
|
||||
max_tokensTip:
|
||||
'Utilizzato per limitare la lunghezza massima della risposta, in token. Valori maggiori possono limitare lo spazio lasciato per le parole del prompt, i log della chat e la Conoscenza. Si consiglia di impostarlo al di sotto dei due terzi\ngpt-4-1106-preview, gpt-4-vision-preview max token (input 128k output 4k)',
|
||||
maxTokenSettingTip:
|
||||
'La tua impostazione di token massimo è alta, potenzialmente limitando lo spazio per prompt, query e dati. Considera di impostarlo al di sotto dei 2/3.',
|
||||
setToCurrentModelMaxTokenTip:
|
||||
'Il token massimo è aggiornato all\'80% del token massimo del modello corrente {{maxToken}}.',
|
||||
stop_sequences: 'Sequenze di stop',
|
||||
stop_sequencesTip:
|
||||
'Fino a quattro sequenze in cui l\'API smetterà di generare ulteriori token. Il testo restituito non conterrà la sequenza di stop.',
|
||||
stop_sequencesPlaceholder: 'Inserisci la sequenza e premi Tab',
|
||||
},
|
||||
tone: {
|
||||
Creative: 'Creativo',
|
||||
Balanced: 'Bilanciato',
|
||||
Precise: 'Preciso',
|
||||
Custom: 'Personalizzato',
|
||||
},
|
||||
addMoreModel: 'Vai alle impostazioni per aggiungere altri modelli',
|
||||
},
|
||||
menus: {
|
||||
status: 'beta',
|
||||
explore: 'Esplora',
|
||||
apps: 'Studio',
|
||||
plugins: 'Plugin',
|
||||
pluginsTips:
|
||||
'Integra plugin di terze parti o crea plugin AI compatibili con ChatGPT.',
|
||||
datasets: 'Conoscenza',
|
||||
datasetsTips:
|
||||
'PROSSIMAMENTE: Importa i tuoi dati testuali o scrivi dati in tempo reale tramite Webhook per migliorare il contesto LLM.',
|
||||
newApp: 'Nuova App',
|
||||
newDataset: 'Crea Conoscenza',
|
||||
tools: 'Strumenti',
|
||||
},
|
||||
userProfile: {
|
||||
settings: 'Impostazioni',
|
||||
workspace: 'Workspace',
|
||||
createWorkspace: 'Crea Workspace',
|
||||
helpCenter: 'Aiuto',
|
||||
roadmapAndFeedback: 'Feedback',
|
||||
community: 'Comunità',
|
||||
about: 'Informazioni',
|
||||
logout: 'Esci',
|
||||
},
|
||||
settings: {
|
||||
accountGroup: 'ACCOUNT',
|
||||
workplaceGroup: 'WORKSPACE',
|
||||
account: 'Il mio account',
|
||||
members: 'Membri',
|
||||
billing: 'Fatturazione',
|
||||
integrations: 'Integrazioni',
|
||||
language: 'Lingua',
|
||||
provider: 'Fornitore di Modelli',
|
||||
dataSource: 'Fonte Dati',
|
||||
plugin: 'Plugin',
|
||||
apiBasedExtension: 'Estensione API',
|
||||
},
|
||||
account: {
|
||||
avatar: 'Avatar',
|
||||
name: 'Nome',
|
||||
email: 'Email',
|
||||
password: 'Password',
|
||||
passwordTip:
|
||||
'Puoi impostare una password permanente se non vuoi utilizzare codici di accesso temporanei',
|
||||
setPassword: 'Imposta una password',
|
||||
resetPassword: 'Reimposta password',
|
||||
currentPassword: 'Password attuale',
|
||||
newPassword: 'Nuova password',
|
||||
confirmPassword: 'Conferma password',
|
||||
notEqual: 'Le due password sono diverse.',
|
||||
langGeniusAccount: 'Account Dify',
|
||||
langGeniusAccountTip: 'Il tuo account Dify e i dati utente associati.',
|
||||
editName: 'Modifica Nome',
|
||||
showAppLength: 'Mostra {{length}} app',
|
||||
delete: 'Elimina Account',
|
||||
deleteTip:
|
||||
'Eliminando il tuo account cancellerai permanentemente tutti i tuoi dati e non sarà possibile recuperarli.',
|
||||
deleteConfirmTip:
|
||||
'Per confermare, invia il seguente messaggio dalla tua email registrata a ',
|
||||
},
|
||||
members: {
|
||||
team: 'Team',
|
||||
invite: 'Aggiungi',
|
||||
name: 'NOME',
|
||||
lastActive: 'ULTIMA ATTIVITÀ',
|
||||
role: 'RUOLI',
|
||||
pending: 'In attesa...',
|
||||
owner: 'Proprietario',
|
||||
admin: 'Admin',
|
||||
adminTip: 'Può creare app e gestire le impostazioni del team',
|
||||
normal: 'Normale',
|
||||
normalTip: 'Può solo usare le app, non può crearle',
|
||||
builder: 'Builder',
|
||||
builderTip: 'Può creare e modificare le proprie app',
|
||||
editor: 'Editor',
|
||||
editorTip: 'Può creare e modificare app',
|
||||
datasetOperator: 'Admin della Conoscenza',
|
||||
datasetOperatorTip: 'Può solo gestire la base di conoscenza',
|
||||
inviteTeamMember: 'Aggiungi membro del team',
|
||||
inviteTeamMemberTip:
|
||||
'Potranno accedere ai dati del tuo team direttamente dopo aver effettuato l\'accesso.',
|
||||
email: 'Email',
|
||||
emailInvalid: 'Formato Email non valido',
|
||||
emailPlaceholder: 'Per favore inserisci le email',
|
||||
sendInvite: 'Invia Invito',
|
||||
invitedAsRole: 'Invitato come utente {{role}}',
|
||||
invitationSent: 'Invito inviato',
|
||||
invitationSentTip:
|
||||
'Invito inviato, e possono accedere a Dify per accedere ai dati del tuo team.',
|
||||
invitationLink: 'Link di Invito',
|
||||
failedinvitationEmails:
|
||||
'Gli utenti seguenti non sono stati invitati con successo',
|
||||
ok: 'OK',
|
||||
removeFromTeam: 'Rimuovi dal team',
|
||||
removeFromTeamTip: 'Rimuoverà l\'accesso al team',
|
||||
setAdmin: 'Imposta come amministratore',
|
||||
setMember: 'Imposta come membro ordinario',
|
||||
setBuilder: 'Imposta come builder',
|
||||
setEditor: 'Imposta come editor',
|
||||
disinvite: 'Annulla l\'invito',
|
||||
deleteMember: 'Elimina Membro',
|
||||
you: '(Tu)',
|
||||
},
|
||||
integrations: {
|
||||
connected: 'Connesso',
|
||||
google: 'Google',
|
||||
googleAccount: 'Accedi con l\'account Google',
|
||||
github: 'GitHub',
|
||||
githubAccount: 'Accedi con l\'account GitHub',
|
||||
connect: 'Connetti',
|
||||
},
|
||||
language: {
|
||||
displayLanguage: 'Lingua di visualizzazione',
|
||||
timezone: 'Fuso orario',
|
||||
},
|
||||
provider: {
|
||||
apiKey: 'API Key',
|
||||
enterYourKey: 'Inserisci qui la tua API key',
|
||||
invalidKey: 'Chiave API OpenAI non valida',
|
||||
validatedError: 'Convalida fallita: ',
|
||||
validating: 'Convalida chiave in corso...',
|
||||
saveFailed: 'Salvataggio della chiave API fallito',
|
||||
apiKeyExceedBill:
|
||||
'Questa API KEY non ha più quota disponibile, per favore leggi',
|
||||
addKey: 'Aggiungi Chiave',
|
||||
comingSoon: 'Prossimamente',
|
||||
editKey: 'Modifica',
|
||||
invalidApiKey: 'Chiave API non valida',
|
||||
azure: {
|
||||
apiBase: 'Base API',
|
||||
apiBasePlaceholder: 'L\'URL Base API del tuo Endpoint Azure OpenAI.',
|
||||
apiKey: 'API Key',
|
||||
apiKeyPlaceholder: 'Inserisci qui la tua API key',
|
||||
helpTip: 'Scopri di più su Azure OpenAI Service',
|
||||
},
|
||||
openaiHosted: {
|
||||
openaiHosted: 'OpenAI Ospitato',
|
||||
onTrial: 'IN PROVA',
|
||||
exhausted: 'QUOTA ESAURITA',
|
||||
desc: 'Il servizio di hosting OpenAI fornito da Dify ti consente di utilizzare modelli come GPT-3.5. Prima che la tua quota di prova sia esaurita, devi configurare altri fornitori di modelli.',
|
||||
callTimes: 'Numero di chiamate',
|
||||
usedUp: 'Quota di prova esaurita. Aggiungi il tuo fornitore di modelli.',
|
||||
useYourModel: 'Attualmente utilizzando il proprio fornitore di modelli.',
|
||||
close: 'Chiudi',
|
||||
},
|
||||
anthropicHosted: {
|
||||
anthropicHosted: 'Anthropic Claude',
|
||||
onTrial: 'IN PROVA',
|
||||
exhausted: 'QUOTA ESAURITA',
|
||||
desc: 'Modello potente, eccelle in una vasta gamma di compiti dal dialogo sofisticato alla generazione di contenuti creativi fino alle istruzioni dettagliate.',
|
||||
callTimes: 'Numero di chiamate',
|
||||
usedUp: 'Quota di prova esaurita. Aggiungi il tuo fornitore di modelli.',
|
||||
useYourModel: 'Attualmente utilizzando il proprio fornitore di modelli.',
|
||||
close: 'Chiudi',
|
||||
},
|
||||
anthropic: {
|
||||
using: 'La capacità di embedding è in uso',
|
||||
enableTip:
|
||||
'Per abilitare il modello Anthropic, devi prima collegarti a OpenAI o Azure OpenAI Service.',
|
||||
notEnabled: 'Non abilitato',
|
||||
keyFrom: 'Ottieni la tua API key da Anthropic',
|
||||
},
|
||||
encrypted: {
|
||||
front:
|
||||
'La tua API KEY sarà crittografata e archiviata utilizzando la tecnologia',
|
||||
back: '.',
|
||||
},
|
||||
},
|
||||
modelProvider: {
|
||||
notConfigured:
|
||||
'Il modello di sistema non è ancora stato completamente configurato e alcune funzioni potrebbero non essere disponibili.',
|
||||
systemModelSettings: 'Impostazioni Modello di Sistema',
|
||||
systemModelSettingsLink:
|
||||
'Perché è necessario configurare un modello di sistema?',
|
||||
selectModel: 'Seleziona il tuo modello',
|
||||
setupModelFirst: 'Per favore, configura prima il tuo modello',
|
||||
systemReasoningModel: {
|
||||
key: 'Modello di Ragionamento di Sistema',
|
||||
tip: 'Imposta il modello di inferenza predefinito da utilizzare per creare applicazioni, così come funzionalità come la generazione del nome del dialogo e il suggerimento della domanda successiva utilizzeranno anche il modello di inferenza predefinito.',
|
||||
},
|
||||
embeddingModel: {
|
||||
key: 'Modello di Embedding',
|
||||
tip: 'Imposta il modello predefinito per l\'elaborazione degli embedding dei documenti della Conoscenza, sia il recupero che l\'importazione della Conoscenza utilizzano questo modello di Embedding per il processo di vettorizzazione. Il cambio causerà l\'incoerenza della dimensione del vettore tra la Conoscenza importata e la domanda, causando un fallimento nel recupero. Per evitare fallimenti nel recupero, non cambiare questo modello a piacimento.',
|
||||
required: 'Il Modello di Embedding è obbligatorio',
|
||||
},
|
||||
speechToTextModel: {
|
||||
key: 'Modello da Voce a Testo',
|
||||
tip: 'Imposta il modello predefinito per l\'input da voce a testo nella conversazione.',
|
||||
},
|
||||
ttsModel: {
|
||||
key: 'Modello da Testo a Voce',
|
||||
tip: 'Imposta il modello predefinito per l\'input da testo a voce nella conversazione.',
|
||||
},
|
||||
rerankModel: {
|
||||
key: 'Modello di Rerank',
|
||||
tip: 'Il modello di rerank riordinerà la lista dei documenti candidati basandosi sulla corrispondenza semantica con la query dell\'utente, migliorando i risultati del ranking semantico',
|
||||
},
|
||||
apiKey: 'API-KEY',
|
||||
quota: 'Quota',
|
||||
searchModel: 'Modello di ricerca',
|
||||
noModelFound: 'Nessun modello trovato per {{model}}',
|
||||
models: 'Modelli',
|
||||
showMoreModelProvider: 'Mostra più fornitori di modelli',
|
||||
selector: {
|
||||
tip: 'Questo modello è stato rimosso. Per favore aggiungi un modello o seleziona un altro modello.',
|
||||
emptyTip: 'Nessun modello disponibile',
|
||||
emptySetting: 'Per favore vai alle impostazioni per configurare',
|
||||
rerankTip: 'Per favore, configura il modello di Rerank',
|
||||
},
|
||||
card: {
|
||||
quota: 'QUOTA',
|
||||
onTrial: 'In Prova',
|
||||
paid: 'Pagato',
|
||||
quotaExhausted: 'Quota esaurita',
|
||||
callTimes: 'Numero di chiamate',
|
||||
tokens: 'Token',
|
||||
buyQuota: 'Acquista Quota',
|
||||
priorityUse: 'Uso prioritario',
|
||||
removeKey: 'Rimuovi API Key',
|
||||
tip: 'Verrà data priorità alla quota pagata. La quota di prova sarà utilizzata dopo l\'esaurimento della quota pagata.',
|
||||
},
|
||||
item: {
|
||||
deleteDesc:
|
||||
'{{modelName}} è utilizzato come modello di ragionamento di sistema. Alcune funzioni non saranno disponibili dopo la rimozione. Si prega di confermare.',
|
||||
freeQuota: 'QUOTA GRATUITA',
|
||||
},
|
||||
addApiKey: 'Aggiungi la tua API key',
|
||||
invalidApiKey: 'API key non valida',
|
||||
encrypted: {
|
||||
front:
|
||||
'La tua API KEY sarà crittografata e archiviata utilizzando la tecnologia',
|
||||
back: '.',
|
||||
},
|
||||
freeQuota: {
|
||||
howToEarn: 'Come guadagnare',
|
||||
},
|
||||
addMoreModelProvider: 'AGGIUNGI PIÙ FORNITORI DI MODELLI',
|
||||
addModel: 'Aggiungi Modello',
|
||||
modelsNum: '{{num}} Modelli',
|
||||
showModels: 'Mostra Modelli',
|
||||
showModelsNum: 'Mostra {{num}} Modelli',
|
||||
collapse: 'Comprimi',
|
||||
config: 'Configura',
|
||||
modelAndParameters: 'Modello e Parametri',
|
||||
model: 'Modello',
|
||||
featureSupported: '{{feature}} supportato',
|
||||
callTimes: 'Numero di chiamate',
|
||||
credits: 'Crediti Messaggi',
|
||||
buyQuota: 'Acquista Quota',
|
||||
getFreeTokens: 'Ottieni Token gratuiti',
|
||||
priorityUsing: 'Utilizzo prioritario',
|
||||
deprecated: 'Deprecato',
|
||||
confirmDelete: 'confermare l\'eliminazione?',
|
||||
quotaTip: 'Token gratuiti rimanenti disponibili',
|
||||
loadPresets: 'Carica Preset',
|
||||
parameters: 'PARAMETRI',
|
||||
loadBalancing: 'Bilanciamento del Carico',
|
||||
loadBalancingDescription: 'Riduci la pressione con più set di credenziali.',
|
||||
loadBalancingHeadline: 'Bilanciamento del Carico',
|
||||
configLoadBalancing: 'Configura Bilanciamento del Carico',
|
||||
modelHasBeenDeprecated: 'Questo modello è stato deprecato',
|
||||
providerManaged: 'Gestito dal fornitore',
|
||||
providerManagedDescription:
|
||||
'Usa il singolo set di credenziali fornito dal fornitore del modello.',
|
||||
defaultConfig: 'Config predefinito',
|
||||
apiKeyStatusNormal: 'Stato APIKey normale',
|
||||
apiKeyRateLimit:
|
||||
'Il limite di velocità è stato raggiunto, disponibile dopo {{seconds}}s',
|
||||
addConfig: 'Aggiungi Configurazione',
|
||||
editConfig: 'Modifica Configurazione',
|
||||
loadBalancingLeastKeyWarning:
|
||||
'Per abilitare il bilanciamento del carico devono essere abilitate almeno 2 chiavi.',
|
||||
loadBalancingInfo:
|
||||
'Per impostazione predefinita, il bilanciamento del carico utilizza la strategia Round-robin. Se viene attivato il rate limiting, verrà applicato un periodo di cooldown di 1 minuto.',
|
||||
upgradeForLoadBalancing:
|
||||
'Aggiorna il tuo piano per abilitare il Bilanciamento del Carico.',
|
||||
},
|
||||
dataSource: {
|
||||
add: 'Aggiungi una fonte di dati',
|
||||
connect: 'Connetti',
|
||||
configure: 'Configura',
|
||||
notion: {
|
||||
title: 'Notion',
|
||||
description: 'Usa Notion come fonte di dati per la Conoscenza.',
|
||||
connectedWorkspace: 'Workspace connesso',
|
||||
addWorkspace: 'Aggiungi workspace',
|
||||
connected: 'Connesso',
|
||||
disconnected: 'Disconnesso',
|
||||
changeAuthorizedPages: 'Cambia pagine autorizzate',
|
||||
pagesAuthorized: 'Pagine autorizzate',
|
||||
sync: 'Sincronizza',
|
||||
remove: 'Rimuovi',
|
||||
selector: {
|
||||
pageSelected: 'Pagine selezionate',
|
||||
searchPages: 'Cerca pagine...',
|
||||
noSearchResult: 'Nessun risultato di ricerca',
|
||||
addPages: 'Aggiungi pagine',
|
||||
preview: 'ANTEPRIMA',
|
||||
},
|
||||
},
|
||||
website: {
|
||||
title: 'Sito web',
|
||||
description: 'Importa contenuti dai siti web utilizzando il web crawler.',
|
||||
with: 'Con',
|
||||
configuredCrawlers: 'Crawler configurati',
|
||||
active: 'Attivo',
|
||||
inactive: 'Inattivo',
|
||||
},
|
||||
},
|
||||
plugin: {
|
||||
serpapi: {
|
||||
apiKey: 'API Key',
|
||||
apiKeyPlaceholder: 'Inserisci la tua API key',
|
||||
keyFrom: 'Ottieni la tua API key dalla pagina dell\'account SerpAPI',
|
||||
},
|
||||
},
|
||||
apiBasedExtension: {
|
||||
title:
|
||||
'Le estensioni API forniscono una gestione centralizzata delle API, semplificando la configurazione per un facile utilizzo nelle applicazioni di Dify.',
|
||||
link: 'Scopri come sviluppare la tua estensione API.',
|
||||
linkUrl: 'https://docs.dify.ai/features/extension/api_based_extension',
|
||||
add: 'Aggiungi Estensione API',
|
||||
selector: {
|
||||
title: 'Estensione API',
|
||||
placeholder: 'Per favore seleziona l\'estensione API',
|
||||
manage: 'Gestisci Estensione API',
|
||||
},
|
||||
modal: {
|
||||
title: 'Aggiungi Estensione API',
|
||||
editTitle: 'Modifica Estensione API',
|
||||
name: {
|
||||
title: 'Nome',
|
||||
placeholder: 'Per favore inserisci il nome',
|
||||
},
|
||||
apiEndpoint: {
|
||||
title: 'Endpoint API',
|
||||
placeholder: 'Per favore inserisci l\'endpoint API',
|
||||
},
|
||||
apiKey: {
|
||||
title: 'API-key',
|
||||
placeholder: 'Per favore inserisci l\'API-key',
|
||||
lengthError:
|
||||
'La lunghezza della chiave API non può essere inferiore a 5 caratteri',
|
||||
},
|
||||
},
|
||||
type: 'Tipo',
|
||||
},
|
||||
about: {
|
||||
changeLog: 'Registro delle modifiche',
|
||||
updateNow: 'Aggiorna ora',
|
||||
nowAvailable: 'Dify {{version}} è ora disponibile.',
|
||||
latestAvailable: 'Dify {{version}} è l\'ultima versione disponibile.',
|
||||
},
|
||||
appMenus: {
|
||||
overview: 'Monitoraggio',
|
||||
promptEng: 'Orchestrazione',
|
||||
apiAccess: 'Accesso API',
|
||||
logAndAnn: 'Log & Ann.',
|
||||
logs: 'Log',
|
||||
},
|
||||
environment: {
|
||||
testing: 'TEST',
|
||||
development: 'SVILUPPO',
|
||||
},
|
||||
appModes: {
|
||||
completionApp: 'Generatore di Testi',
|
||||
chatApp: 'App di Chat',
|
||||
},
|
||||
datasetMenus: {
|
||||
documents: 'Documenti',
|
||||
hitTesting: 'Test di Recupero',
|
||||
settings: 'Impostazioni',
|
||||
emptyTip:
|
||||
'La Conoscenza non è stata associata, per favore vai all\'applicazione o al plug-in per completare l\'associazione.',
|
||||
viewDoc: 'Visualizza documentazione',
|
||||
relatedApp: 'app collegate',
|
||||
},
|
||||
voiceInput: {
|
||||
speaking: 'Parla ora...',
|
||||
converting: 'Conversione in testo...',
|
||||
notAllow: 'microfono non autorizzato',
|
||||
},
|
||||
modelName: {
|
||||
'gpt-3.5-turbo': 'GPT-3.5-Turbo',
|
||||
'gpt-3.5-turbo-16k': 'GPT-3.5-Turbo-16K',
|
||||
'gpt-4': 'GPT-4',
|
||||
'gpt-4-32k': 'GPT-4-32K',
|
||||
'text-davinci-003': 'Text-Davinci-003',
|
||||
'text-embedding-ada-002': 'Text-Embedding-Ada-002',
|
||||
'whisper-1': 'Whisper-1',
|
||||
'claude-instant-1': 'Claude-Instant',
|
||||
'claude-2': 'Claude-2',
|
||||
},
|
||||
chat: {
|
||||
renameConversation: 'Rinomina Conversazione',
|
||||
conversationName: 'Nome della conversazione',
|
||||
conversationNamePlaceholder:
|
||||
'Per favore inserisci il nome della conversazione',
|
||||
conversationNameCanNotEmpty: 'Nome della conversazione obbligatorio',
|
||||
citation: {
|
||||
title: 'CITAZIONI',
|
||||
linkToDataset: 'Collegamento alla Conoscenza',
|
||||
characters: 'Caratteri:',
|
||||
hitCount: 'Conteggio dei recuperi:',
|
||||
vectorHash: 'Hash del vettore:',
|
||||
hitScore: 'Punteggio di recupero:',
|
||||
},
|
||||
},
|
||||
promptEditor: {
|
||||
placeholder:
|
||||
'Scrivi qui il tuo prompt, inserisci \'{\' per inserire una variabile, inserisci \'/\' per inserire un blocco di contenuto del prompt',
|
||||
context: {
|
||||
item: {
|
||||
title: 'Contesto',
|
||||
desc: 'Inserisci modello di contesto',
|
||||
},
|
||||
modal: {
|
||||
title: '{{num}} Conoscenza nel Contesto',
|
||||
add: 'Aggiungi Contesto ',
|
||||
footer: 'Puoi gestire i contesti nella sezione Contesto qui sotto.',
|
||||
},
|
||||
},
|
||||
history: {
|
||||
item: {
|
||||
title: 'Cronologia della Conversazione',
|
||||
desc: 'Inserisci modello di messaggio storico',
|
||||
},
|
||||
modal: {
|
||||
title: 'ESEMPIO',
|
||||
user: 'Ciao',
|
||||
assistant: 'Ciao! Come posso aiutarti oggi?',
|
||||
edit: 'Modifica i Nomi dei Ruoli della Conversazione',
|
||||
},
|
||||
},
|
||||
variable: {
|
||||
item: {
|
||||
title: 'Variabili & Strumenti Esterni',
|
||||
desc: 'Inserisci Variabili & Strumenti Esterni',
|
||||
},
|
||||
outputToolDisabledItem: {
|
||||
title: 'Variabili',
|
||||
desc: 'Inserisci Variabili',
|
||||
},
|
||||
modal: {
|
||||
add: 'Nuova variabile',
|
||||
addTool: 'Nuovo strumento',
|
||||
},
|
||||
},
|
||||
query: {
|
||||
item: {
|
||||
title: 'Query',
|
||||
desc: 'Inserisci modello di query dell\'utente',
|
||||
},
|
||||
},
|
||||
existed: 'Esiste già nel prompt',
|
||||
},
|
||||
imageUploader: {
|
||||
uploadFromComputer: 'Carica dal Computer',
|
||||
uploadFromComputerReadError:
|
||||
'Lettura dell\'immagine fallita, per favore riprova.',
|
||||
uploadFromComputerUploadError:
|
||||
'Caricamento dell\'immagine fallito, per favore ricarica.',
|
||||
uploadFromComputerLimit:
|
||||
'Le immagini caricate non possono superare i {{size}} MB',
|
||||
pasteImageLink: 'Incolla link immagine',
|
||||
pasteImageLinkInputPlaceholder: 'Incolla qui il link immagine',
|
||||
pasteImageLinkInvalid: 'Link immagine non valido',
|
||||
imageUpload: 'Caricamento Immagine',
|
||||
},
|
||||
tag: {
|
||||
placeholder: 'Tutti i Tag',
|
||||
addNew: 'Aggiungi nuovo tag',
|
||||
noTag: 'Nessun tag',
|
||||
noTagYet: 'Nessun tag ancora',
|
||||
addTag: 'Aggiungi tag',
|
||||
editTag: 'Modifica tag',
|
||||
manageTags: 'Gestisci Tag',
|
||||
selectorPlaceholder: 'Scrivi per cercare o creare',
|
||||
create: 'Crea',
|
||||
delete: 'Elimina tag',
|
||||
deleteTip: 'Il tag è in uso, eliminarlo?',
|
||||
created: 'Tag creato con successo',
|
||||
failed: 'Creazione del tag fallita',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,31 @@
|
||||
const translation = {
|
||||
custom: 'Personalizzazione',
|
||||
upgradeTip: {
|
||||
prefix: 'Aggiorna il tuo piano per',
|
||||
suffix: 'personalizzare il tuo marchio.',
|
||||
},
|
||||
webapp: {
|
||||
title: 'Personalizza il marchio WebApp',
|
||||
removeBrand: 'Rimuovi Powered by Dify',
|
||||
changeLogo: 'Cambia immagine del marchio Powered by',
|
||||
changeLogoTip: 'Formato SVG o PNG con una dimensione minima di 40x40px',
|
||||
},
|
||||
app: {
|
||||
title: 'Personalizza l\'intestazione del marchio dell\'app',
|
||||
changeLogoTip: 'Formato SVG o PNG con una dimensione minima di 80x80px',
|
||||
},
|
||||
upload: 'Carica',
|
||||
uploading: 'Caricamento in corso',
|
||||
uploadedFail: 'Caricamento dell\'immagine fallito, per favore ricarica.',
|
||||
change: 'Cambia',
|
||||
apply: 'Applica',
|
||||
restore: 'Ripristina Impostazioni Predefinite',
|
||||
customize: {
|
||||
contactUs: ' contattaci ',
|
||||
prefix:
|
||||
'Per personalizzare il logo del marchio all\'interno dell\'app, per favore',
|
||||
suffix: 'per aggiornare alla versione Enterprise.',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,184 @@
|
||||
const translation = {
|
||||
steps: {
|
||||
header: {
|
||||
creation: 'Crea Conoscenza',
|
||||
update: 'Aggiungi dati',
|
||||
},
|
||||
one: 'Scegli fonte dati',
|
||||
two: 'Preprocessamento e Pulizia del Testo',
|
||||
three: 'Esegui e termina',
|
||||
},
|
||||
error: {
|
||||
unavailable: 'Questa Conoscenza non è disponibile',
|
||||
},
|
||||
firecrawl: {
|
||||
configFirecrawl: 'Configura 🔥Firecrawl',
|
||||
apiKeyPlaceholder: 'Chiave API da firecrawl.dev',
|
||||
getApiKeyLinkText: 'Ottieni la tua chiave API da firecrawl.dev',
|
||||
},
|
||||
stepOne: {
|
||||
filePreview: 'Anteprima del File',
|
||||
pagePreview: 'Anteprima della Pagina',
|
||||
dataSourceType: {
|
||||
file: 'Importa da file',
|
||||
notion: 'Sincronizza da Notion',
|
||||
web: 'Sincronizza da sito web',
|
||||
},
|
||||
uploader: {
|
||||
title: 'Carica file',
|
||||
button: 'Trascina e rilascia il file, o',
|
||||
browse: 'Sfoglia',
|
||||
tip: 'Supporta {{supportTypes}}. Max {{size}}MB ciascuno.',
|
||||
validation: {
|
||||
typeError: 'Tipo di file non supportato',
|
||||
size: 'File troppo grande. Il massimo è {{size}}MB',
|
||||
count: 'Più file non supportati',
|
||||
filesNumber:
|
||||
'Hai raggiunto il limite di caricamento batch di {{filesNumber}}.',
|
||||
},
|
||||
cancel: 'Annulla',
|
||||
change: 'Cambia',
|
||||
failed: 'Caricamento fallito',
|
||||
},
|
||||
notionSyncTitle: 'Notion non è connesso',
|
||||
notionSyncTip:
|
||||
'Per sincronizzare con Notion, deve essere stabilita prima la connessione a Notion.',
|
||||
connect: 'Vai a connettere',
|
||||
button: 'Avanti',
|
||||
emptyDatasetCreation: 'Voglio creare una Conoscenza vuota',
|
||||
modal: {
|
||||
title: 'Crea una Conoscenza vuota',
|
||||
tip: 'Una Conoscenza vuota non conterrà documenti, e potrai caricare documenti in qualsiasi momento.',
|
||||
input: 'Nome della Conoscenza',
|
||||
placeholder: 'Per favore inserisci',
|
||||
nameNotEmpty: 'Il nome non può essere vuoto',
|
||||
nameLengthInvaild: 'Il nome deve essere tra 1 e 40 caratteri',
|
||||
cancelButton: 'Annulla',
|
||||
confirmButton: 'Crea',
|
||||
failed: 'Creazione fallita',
|
||||
},
|
||||
website: {
|
||||
fireCrawlNotConfigured: 'Firecrawl non è configurato',
|
||||
fireCrawlNotConfiguredDescription:
|
||||
'Configura Firecrawl con la chiave API per usarlo.',
|
||||
configure: 'Configura',
|
||||
run: 'Esegui',
|
||||
firecrawlTitle: 'Estrai contenuti web con 🔥Firecrawl',
|
||||
firecrawlDoc: 'Documenti Firecrawl',
|
||||
firecrawlDocLink:
|
||||
'https://docs.dify.ai/guides/knowledge-base/sync_from_website',
|
||||
options: 'Opzioni',
|
||||
crawlSubPage: 'Crawl sotto-pagine',
|
||||
limit: 'Limite',
|
||||
maxDepth: 'Profondità massima',
|
||||
excludePaths: 'Escludi percorsi',
|
||||
includeOnlyPaths: 'Includi solo percorsi',
|
||||
extractOnlyMainContent:
|
||||
'Estrai solo il contenuto principale (senza intestazioni, nav, piè di pagina, ecc.)',
|
||||
exceptionErrorTitle:
|
||||
'Si è verificata un\'eccezione durante l\'esecuzione del lavoro Firecrawl:',
|
||||
unknownError: 'Errore sconosciuto',
|
||||
totalPageScraped: 'Pagine totali estratte:',
|
||||
selectAll: 'Seleziona tutto',
|
||||
resetAll: 'Reimposta tutto',
|
||||
scrapTimeInfo: 'Estratte {{total}} pagine in totale in {{time}}s',
|
||||
preview: 'Anteprima',
|
||||
maxDepthTooltip:
|
||||
'Profondità massima da eseguire rispetto all\'URL inserito. La profondità 0 estrae solo la pagina dell\'URL inserito, la profondità 1 estrae l\'URL e tutto ciò che segue l\'URL inserito + uno /, e così via.',
|
||||
},
|
||||
},
|
||||
stepTwo: {
|
||||
segmentation: 'Impostazioni dei blocchi',
|
||||
auto: 'Automatico',
|
||||
autoDescription:
|
||||
'Imposta automaticamente le regole dei blocchi e del preprocessamento. Gli utenti non familiari sono consigliati di selezionare questo.',
|
||||
custom: 'Personalizzato',
|
||||
customDescription:
|
||||
'Personalizza le regole dei blocchi, la lunghezza dei blocchi e le regole di preprocessamento, ecc.',
|
||||
separator: 'Identificatore di segmento',
|
||||
separatorPlaceholder:
|
||||
'Ad esempio, nuova linea (\\\\n) o separatore speciale (come `***`)',
|
||||
maxLength: 'Lunghezza massima del blocco',
|
||||
overlap: 'Sovrapposizione del blocco',
|
||||
overlapTip:
|
||||
'Impostare la sovrapposizione del blocco può mantenere la rilevanza semantica tra di loro, migliorando l\'effetto di recupero. Si consiglia di impostare il 10%-25% della dimensione massima del blocco.',
|
||||
overlapCheck:
|
||||
'la sovrapposizione del blocco non dovrebbe essere maggiore della lunghezza massima del blocco',
|
||||
rules: 'Regole di preprocessamento del testo',
|
||||
removeExtraSpaces: 'Sostituisci spazi, nuove linee e tab consecutivi',
|
||||
removeUrlEmails: 'Elimina tutti gli URL e gli indirizzi email',
|
||||
removeStopwords: 'Rimuovi parole vuote come `a`, `an`, `the`',
|
||||
preview: 'Conferma & Anteprima',
|
||||
reset: 'Reimposta',
|
||||
indexMode: 'Modalità indice',
|
||||
qualified: 'Alta Qualità',
|
||||
recommend: 'Consigliato',
|
||||
qualifiedTip:
|
||||
'Chiama l\'interfaccia di embedding di sistema predefinita per l\'elaborazione per fornire maggiore accuratezza quando gli utenti fanno query.',
|
||||
warning:
|
||||
'Per favore configura prima la chiave API del fornitore del modello.',
|
||||
click: 'Vai alle impostazioni',
|
||||
economical: 'Economico',
|
||||
economicalTip:
|
||||
'Usa motori vettoriali offline, indici di parole chiave, ecc. per ridurre l\'accuratezza senza spendere token',
|
||||
QATitle: 'Segmentazione in formato Domanda & Risposta',
|
||||
QATip: 'Abilitare questa opzione consumerà più token',
|
||||
QALanguage: 'Segmenta usando',
|
||||
emstimateCost: 'Stima',
|
||||
emstimateSegment: 'Blocchi stimati',
|
||||
segmentCount: 'blocchi',
|
||||
calculating: 'Calcolo in corso...',
|
||||
fileSource: 'Preprocessa documenti',
|
||||
notionSource: 'Preprocessa pagine',
|
||||
websiteSource: 'Preprocessa sito web',
|
||||
other: 'e altri ',
|
||||
fileUnit: ' file',
|
||||
notionUnit: ' pagine',
|
||||
webpageUnit: ' pagine',
|
||||
previousStep: 'Passo precedente',
|
||||
nextStep: 'Salva & Elabora',
|
||||
save: 'Salva & Elabora',
|
||||
cancel: 'Annulla',
|
||||
sideTipTitle: 'Perché segmentare e preprocessare?',
|
||||
sideTipP1:
|
||||
'Quando si elabora dati testuali, la segmentazione e la pulizia sono due passaggi di preprocessamento importanti.',
|
||||
sideTipP2:
|
||||
'La segmentazione divide il testo lungo in paragrafi così i modelli possono comprendere meglio. Questo migliora la qualità e la rilevanza dei risultati del modello.',
|
||||
sideTipP3:
|
||||
'La pulizia rimuove caratteri e formati non necessari, rendendo la Conoscenza più pulita e facile da analizzare.',
|
||||
sideTipP4:
|
||||
'Una corretta segmentazione e pulizia migliorano le prestazioni del modello, fornendo risultati più accurati e preziosi.',
|
||||
previewTitle: 'Anteprima',
|
||||
previewTitleButton: 'Anteprima',
|
||||
previewButton: 'Passaggio al formato Domanda & Risposta',
|
||||
previewSwitchTipStart:
|
||||
'L\'anteprima del blocco corrente è in formato testo, il passaggio a un\'anteprima in formato domanda e risposta',
|
||||
previewSwitchTipEnd: ' consumerà token aggiuntivi',
|
||||
characters: 'caratteri',
|
||||
indexSettedTip: 'Per cambiare il metodo di indicizzazione, vai alle ',
|
||||
retrivalSettedTip: 'Per cambiare il metodo di indicizzazione, vai alle ',
|
||||
datasetSettingLink: 'impostazioni della Conoscenza.',
|
||||
},
|
||||
stepThree: {
|
||||
creationTitle: '🎉 Conoscenza creata',
|
||||
creationContent:
|
||||
'Abbiamo automaticamente nominato la Conoscenza, puoi modificarla in qualsiasi momento',
|
||||
label: 'Nome della Conoscenza',
|
||||
additionTitle: '🎉 Documento caricato',
|
||||
additionP1: 'Il documento è stato caricato nella Conoscenza',
|
||||
additionP2: ', puoi trovarlo nella lista dei documenti della Conoscenza.',
|
||||
stop: 'Ferma l\'elaborazione',
|
||||
resume: 'Riprendi l\'elaborazione',
|
||||
navTo: 'Vai al documento',
|
||||
sideTipTitle: 'Cosa succede dopo',
|
||||
sideTipContent:
|
||||
'Dopo che il documento ha terminato l\'indicizzazione, la Conoscenza può essere integrata nell\'applicazione come contesto, puoi trovare l\'impostazione del contesto nella pagina di orchestrazione del prompt. Puoi anche crearla come un plugin di indicizzazione indipendente di ChatGPT per la pubblicazione.',
|
||||
modelTitle: 'Sei sicuro di fermare l\'embedding?',
|
||||
modelContent:
|
||||
'Se hai bisogno di riprendere l\'elaborazione in seguito, continuerai da dove hai interrotto.',
|
||||
modelButtonConfirm: 'Conferma',
|
||||
modelButtonCancel: 'Annulla',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,354 @@
|
||||
const translation = {
|
||||
list: {
|
||||
title: 'Documenti',
|
||||
desc: 'Tutti i file della Conoscenza sono mostrati qui, e l\'intera Conoscenza può essere collegata alle citazioni di Dify o indicizzata tramite il plugin di Chat.',
|
||||
addFile: 'Aggiungi file',
|
||||
addPages: 'Aggiungi Pagine',
|
||||
addUrl: 'Aggiungi URL',
|
||||
table: {
|
||||
header: {
|
||||
fileName: 'NOME FILE',
|
||||
words: 'PAROLE',
|
||||
hitCount: 'CONTEGGIO RECUPERI',
|
||||
uploadTime: 'ORA DI CARICAMENTO',
|
||||
status: 'STATO',
|
||||
action: 'AZIONE',
|
||||
},
|
||||
rename: 'Rinomina',
|
||||
name: 'Nome',
|
||||
},
|
||||
action: {
|
||||
uploadFile: 'Carica nuovo file',
|
||||
settings: 'Impostazioni segmenti',
|
||||
addButton: 'Aggiungi blocco',
|
||||
add: 'Aggiungi un blocco',
|
||||
batchAdd: 'Aggiungi in batch',
|
||||
archive: 'Archivia',
|
||||
unarchive: 'Disarchivia',
|
||||
delete: 'Elimina',
|
||||
enableWarning: 'Il file archiviato non può essere abilitato',
|
||||
sync: 'Sincronizza',
|
||||
},
|
||||
index: {
|
||||
enable: 'Abilita',
|
||||
disable: 'Disabilita',
|
||||
all: 'Tutti',
|
||||
enableTip: 'Il file può essere indicizzato',
|
||||
disableTip: 'Il file non può essere indicizzato',
|
||||
},
|
||||
status: {
|
||||
queuing: 'In coda',
|
||||
indexing: 'Indicizzazione',
|
||||
paused: 'In pausa',
|
||||
error: 'Errore',
|
||||
available: 'Disponibile',
|
||||
enabled: 'Abilitato',
|
||||
disabled: 'Disabilitato',
|
||||
archived: 'Archiviato',
|
||||
},
|
||||
empty: {
|
||||
title: 'Non ci sono ancora documenti',
|
||||
upload: {
|
||||
tip: 'Puoi caricare file, sincronizzare dal sito web o da app web come Notion, GitHub, ecc.',
|
||||
},
|
||||
sync: {
|
||||
tip: 'Dify scaricherà periodicamente i file dal tuo Notion e completerà l\'elaborazione.',
|
||||
},
|
||||
},
|
||||
delete: {
|
||||
title: 'Sei sicuro di voler eliminare?',
|
||||
content:
|
||||
'Se hai bisogno di riprendere l\'elaborazione in seguito, continuerai da dove hai interrotto',
|
||||
},
|
||||
batchModal: {
|
||||
title: 'Aggiungi blocchi in batch',
|
||||
csvUploadTitle: 'Trascina e rilascia il tuo file CSV qui, o ',
|
||||
browse: 'sfoglia',
|
||||
tip: 'Il file CSV deve rispettare la seguente struttura:',
|
||||
question: 'domanda',
|
||||
answer: 'risposta',
|
||||
contentTitle: 'contenuto del blocco',
|
||||
content: 'contenuto',
|
||||
template: 'Scarica qui il modello',
|
||||
cancel: 'Annulla',
|
||||
run: 'Esegui Batch',
|
||||
runError: 'Esecuzione batch fallita',
|
||||
processing: 'Elaborazione batch in corso',
|
||||
completed: 'Importazione completata',
|
||||
error: 'Errore di importazione',
|
||||
ok: 'OK',
|
||||
},
|
||||
},
|
||||
metadata: {
|
||||
title: 'Metadati',
|
||||
desc: 'L\'etichettatura dei metadati per i documenti consente all\'IA di accedervi in modo tempestivo ed espone la fonte delle referenze per gli utenti.',
|
||||
dateTimeFormat: 'MMMM D, YYYY hh:mm A',
|
||||
docTypeSelectTitle: 'Per favore seleziona un tipo di documento',
|
||||
docTypeChangeTitle: 'Cambia tipo di documento',
|
||||
docTypeSelectWarning:
|
||||
'Se il tipo di documento viene cambiato, i metadati attualmente compilati non saranno più conservati',
|
||||
firstMetaAction: 'Andiamo',
|
||||
placeholder: {
|
||||
add: 'Aggiungi ',
|
||||
select: 'Seleziona ',
|
||||
},
|
||||
source: {
|
||||
upload_file: 'Carica File',
|
||||
notion: 'Sincronizza da Notion',
|
||||
github: 'Sincronizza da Github',
|
||||
},
|
||||
type: {
|
||||
book: 'Libro',
|
||||
webPage: 'Pagina Web',
|
||||
paper: 'Documento',
|
||||
socialMediaPost: 'Post sui Social Media',
|
||||
personalDocument: 'Documento Personale',
|
||||
businessDocument: 'Documento Aziendale',
|
||||
IMChat: 'Chat IM',
|
||||
wikipediaEntry: 'Voce Wikipedia',
|
||||
notion: 'Sincronizza da Notion',
|
||||
github: 'Sincronizza da Github',
|
||||
technicalParameters: 'Parametri Tecnici',
|
||||
},
|
||||
field: {
|
||||
processRule: {
|
||||
processDoc: 'Elabora Documento',
|
||||
segmentRule: 'Regola di Segmentazione',
|
||||
segmentLength: 'Lunghezza dei Segmenti',
|
||||
processClean: 'Pulizia del Testo',
|
||||
},
|
||||
book: {
|
||||
title: 'Titolo',
|
||||
language: 'Lingua',
|
||||
author: 'Autore',
|
||||
publisher: 'Editore',
|
||||
publicationDate: 'Data di Pubblicazione',
|
||||
ISBN: 'ISBN',
|
||||
category: 'Categoria',
|
||||
},
|
||||
webPage: {
|
||||
title: 'Titolo',
|
||||
url: 'URL',
|
||||
language: 'Lingua',
|
||||
authorPublisher: 'Autore/Editore',
|
||||
publishDate: 'Data di Pubblicazione',
|
||||
topicsKeywords: 'Argomenti/Parole Chiave',
|
||||
description: 'Descrizione',
|
||||
},
|
||||
paper: {
|
||||
title: 'Titolo',
|
||||
language: 'Lingua',
|
||||
author: 'Autore',
|
||||
publishDate: 'Data di Pubblicazione',
|
||||
journalConferenceName: 'Nome del Journal/Conferenza',
|
||||
volumeIssuePage: 'Volume/Numero/Pagina',
|
||||
DOI: 'DOI',
|
||||
topicsKeywords: 'Argomenti/Parole Chiave',
|
||||
abstract: 'Abstract',
|
||||
},
|
||||
socialMediaPost: {
|
||||
platform: 'Piattaforma',
|
||||
authorUsername: 'Autore/Username',
|
||||
publishDate: 'Data di Pubblicazione',
|
||||
postURL: 'URL del Post',
|
||||
topicsTags: 'Argomenti/Tag',
|
||||
},
|
||||
personalDocument: {
|
||||
title: 'Titolo',
|
||||
author: 'Autore',
|
||||
creationDate: 'Data di Creazione',
|
||||
lastModifiedDate: 'Data di Ultima Modifica',
|
||||
documentType: 'Tipo di Documento',
|
||||
tagsCategory: 'Tag/Categoria',
|
||||
},
|
||||
businessDocument: {
|
||||
title: 'Titolo',
|
||||
author: 'Autore',
|
||||
creationDate: 'Data di Creazione',
|
||||
lastModifiedDate: 'Data di Ultima Modifica',
|
||||
documentType: 'Tipo di Documento',
|
||||
departmentTeam: 'Dipartimento/Team',
|
||||
},
|
||||
IMChat: {
|
||||
chatPlatform: 'Piattaforma di Chat',
|
||||
chatPartiesGroupName: 'Parti della Chat/Nome del Gruppo',
|
||||
participants: 'Partecipanti',
|
||||
startDate: 'Data di Inizio',
|
||||
endDate: 'Data di Fine',
|
||||
topicsKeywords: 'Argomenti/Parole Chiave',
|
||||
fileType: 'Tipo di File',
|
||||
},
|
||||
wikipediaEntry: {
|
||||
title: 'Titolo',
|
||||
language: 'Lingua',
|
||||
webpageURL: 'URL della Pagina Web',
|
||||
editorContributor: 'Editore/Contributore',
|
||||
lastEditDate: 'Data di Ultima Modifica',
|
||||
summaryIntroduction: 'Sommario/Introduzione',
|
||||
},
|
||||
notion: {
|
||||
title: 'Titolo',
|
||||
language: 'Lingua',
|
||||
author: 'Autore',
|
||||
createdTime: 'Ora di Creazione',
|
||||
lastModifiedTime: 'Ora di Ultima Modifica',
|
||||
url: 'URL',
|
||||
tag: 'Tag',
|
||||
description: 'Descrizione',
|
||||
},
|
||||
github: {
|
||||
repoName: 'Nome del Repo',
|
||||
repoDesc: 'Descrizione del Repo',
|
||||
repoOwner: 'Proprietario del Repo',
|
||||
fileName: 'Nome del File',
|
||||
filePath: 'Percorso del File',
|
||||
programmingLang: 'Linguaggio di Programmazione',
|
||||
url: 'URL',
|
||||
license: 'Licenza',
|
||||
lastCommitTime: 'Ora dell\'Ultimo Commit',
|
||||
lastCommitAuthor: 'Autore dell\'Ultimo Commit',
|
||||
},
|
||||
originInfo: {
|
||||
originalFilename: 'Nome file originale',
|
||||
originalFileSize: 'Dimensione file originale',
|
||||
uploadDate: 'Data di caricamento',
|
||||
lastUpdateDate: 'Data di ultimo aggiornamento',
|
||||
source: 'Fonte',
|
||||
},
|
||||
technicalParameters: {
|
||||
segmentSpecification: 'Specifiche dei segmenti',
|
||||
segmentLength: 'Lunghezza dei segmenti',
|
||||
avgParagraphLength: 'Lunghezza media del paragrafo',
|
||||
paragraphs: 'Paragrafi',
|
||||
hitCount: 'Conteggio recuperi',
|
||||
embeddingTime: 'Tempo di embedding',
|
||||
embeddedSpend: 'Spesa di embedding',
|
||||
},
|
||||
},
|
||||
languageMap: {
|
||||
zh: 'Cinese',
|
||||
en: 'Inglese',
|
||||
es: 'Spagnolo',
|
||||
fr: 'Francese',
|
||||
de: 'Tedesco',
|
||||
ja: 'Giapponese',
|
||||
ko: 'Coreano',
|
||||
ru: 'Russo',
|
||||
ar: 'Arabo',
|
||||
pt: 'Portoghese',
|
||||
it: 'Italiano',
|
||||
nl: 'Olandese',
|
||||
pl: 'Polacco',
|
||||
sv: 'Svedese',
|
||||
tr: 'Turco',
|
||||
he: 'Ebraico',
|
||||
hi: 'Hindi',
|
||||
da: 'Danese',
|
||||
fi: 'Finlandese',
|
||||
no: 'Norvegese',
|
||||
hu: 'Ungherese',
|
||||
el: 'Greco',
|
||||
cs: 'Ceco',
|
||||
th: 'Thailandese',
|
||||
id: 'Indonesiano',
|
||||
},
|
||||
categoryMap: {
|
||||
book: {
|
||||
fiction: 'Narrativa',
|
||||
biography: 'Biografia',
|
||||
history: 'Storia',
|
||||
science: 'Scienza',
|
||||
technology: 'Tecnologia',
|
||||
education: 'Educazione',
|
||||
philosophy: 'Filosofia',
|
||||
religion: 'Religione',
|
||||
socialSciences: 'Scienze Sociali',
|
||||
art: 'Arte',
|
||||
travel: 'Viaggio',
|
||||
health: 'Salute',
|
||||
selfHelp: 'Auto-aiuto',
|
||||
businessEconomics: 'Economia Aziendale',
|
||||
cooking: 'Cucina',
|
||||
childrenYoungAdults: 'Bambini e Giovani Adulti',
|
||||
comicsGraphicNovels: 'Fumetti e Graphic Novels',
|
||||
poetry: 'Poesia',
|
||||
drama: 'Teatro',
|
||||
other: 'Altro',
|
||||
},
|
||||
personalDoc: {
|
||||
notes: 'Note',
|
||||
blogDraft: 'Bozza di Blog',
|
||||
diary: 'Diario',
|
||||
researchReport: 'Rapporto di Ricerca',
|
||||
bookExcerpt: 'Estratto di Libro',
|
||||
schedule: 'Pianificazione',
|
||||
list: 'Lista',
|
||||
projectOverview: 'Panoramica del Progetto',
|
||||
photoCollection: 'Collezione Fotografica',
|
||||
creativeWriting: 'Scrittura Creativa',
|
||||
codeSnippet: 'Frammento di Codice',
|
||||
designDraft: 'Bozza di Design',
|
||||
personalResume: 'Curriculum Vitae',
|
||||
other: 'Altro',
|
||||
},
|
||||
businessDoc: {
|
||||
meetingMinutes: 'Verbale della Riunione',
|
||||
researchReport: 'Rapporto di Ricerca',
|
||||
proposal: 'Proposta',
|
||||
employeeHandbook: 'Manuale del Dipendente',
|
||||
trainingMaterials: 'Materiali di Formazione',
|
||||
requirementsDocument: 'Documento di Requisiti',
|
||||
designDocument: 'Documento di Design',
|
||||
productSpecification: 'Specifiche del Prodotto',
|
||||
financialReport: 'Rapporto Finanziario',
|
||||
marketAnalysis: 'Analisi di Mercato',
|
||||
projectPlan: 'Piano di Progetto',
|
||||
teamStructure: 'Struttura del Team',
|
||||
policiesProcedures: 'Politiche e Procedure',
|
||||
contractsAgreements: 'Contratti e Accordi',
|
||||
emailCorrespondence: 'Corrispondenza Email',
|
||||
other: 'Altro',
|
||||
},
|
||||
},
|
||||
},
|
||||
embedding: {
|
||||
processing: 'Elaborazione embedding...',
|
||||
paused: 'Embedding in pausa',
|
||||
completed: 'Embedding completato',
|
||||
error: 'Errore embedding',
|
||||
docName: 'Elaborazione documento',
|
||||
mode: 'Regola di segmentazione',
|
||||
segmentLength: 'Lunghezza dei segmenti',
|
||||
textCleaning: 'Pre-definizione e pulizia del testo',
|
||||
segments: 'Paragrafi',
|
||||
highQuality: 'Modalità alta qualità',
|
||||
economy: 'Modalità economica',
|
||||
estimate: 'Consumo stimato',
|
||||
stop: 'Ferma elaborazione',
|
||||
resume: 'Riprendi elaborazione',
|
||||
automatic: 'Automatico',
|
||||
custom: 'Personalizzato',
|
||||
previewTip:
|
||||
'L\'anteprima del paragrafo sarà disponibile dopo il completamento dell\'embedding',
|
||||
},
|
||||
segment: {
|
||||
paragraphs: 'Paragrafi',
|
||||
keywords: 'Parole Chiave',
|
||||
addKeyWord: 'Aggiungi parola chiave',
|
||||
keywordError: 'La lunghezza massima della parola chiave è 20',
|
||||
characters: 'caratteri',
|
||||
hitCount: 'Conteggio recuperi',
|
||||
vectorHash: 'Hash del vettore: ',
|
||||
questionPlaceholder: 'aggiungi domanda qui',
|
||||
questionEmpty: 'La domanda non può essere vuota',
|
||||
answerPlaceholder: 'aggiungi risposta qui',
|
||||
answerEmpty: 'La risposta non può essere vuota',
|
||||
contentPlaceholder: 'aggiungi contenuto qui',
|
||||
contentEmpty: 'Il contenuto non può essere vuoto',
|
||||
newTextSegment: 'Nuovo Segmento di Testo',
|
||||
newQaSegment: 'Nuovo Segmento di Domanda & Risposta',
|
||||
delete: 'Eliminare questo blocco?',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,29 @@
|
||||
const translation = {
|
||||
title: 'Test di Recupero',
|
||||
desc: 'Testa l\'effetto di recupero della Conoscenza basato sul testo di query fornito.',
|
||||
dateTimeFormat: 'MM/DD/YYYY hh:mm A',
|
||||
recents: 'Recenti',
|
||||
table: {
|
||||
header: {
|
||||
source: 'Fonte',
|
||||
text: 'Testo',
|
||||
time: 'Ora',
|
||||
},
|
||||
},
|
||||
input: {
|
||||
title: 'Testo di origine',
|
||||
placeholder:
|
||||
'Per favore inserisci un testo, si consiglia una frase dichiarativa breve.',
|
||||
countWarning: 'Fino a 200 caratteri.',
|
||||
indexWarning: 'Solo Conoscenza di alta qualità.',
|
||||
testing: 'Test in corso',
|
||||
},
|
||||
hit: {
|
||||
title: 'PARAGRAFI RECUPERATI',
|
||||
emptyTip: 'I risultati del Test di Recupero verranno mostrati qui',
|
||||
},
|
||||
noRecentTip: 'Nessun risultato di query recente qui',
|
||||
viewChart: 'Visualizza GRAFICO VETTORIALE',
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,40 @@
|
||||
const translation = {
|
||||
title: 'Impostazioni della Conoscenza',
|
||||
desc: 'Qui puoi modificare le proprietà e i metodi di funzionamento della Conoscenza.',
|
||||
form: {
|
||||
name: 'Nome della Conoscenza',
|
||||
namePlaceholder: 'Per favore inserisci il nome della Conoscenza',
|
||||
nameError: 'Il nome non può essere vuoto',
|
||||
desc: 'Descrizione della Conoscenza',
|
||||
descInfo:
|
||||
'Per favore scrivi una descrizione chiara per delineare il contenuto della Conoscenza. Questa descrizione sarà utilizzata come base per la corrispondenza quando si seleziona tra più Conoscenze per l\'inferenza.',
|
||||
descPlaceholder:
|
||||
'Descrivi cosa c\'è in questa Conoscenza. Una descrizione dettagliata permette all\'IA di accedere al contenuto della Conoscenza in modo tempestivo. Se vuota, Dify utilizzerà la strategia di recupero predefinita.',
|
||||
descWrite: 'Scopri come scrivere una buona descrizione della Conoscenza.',
|
||||
permissions: 'Permessi',
|
||||
permissionsOnlyMe: 'Solo io',
|
||||
permissionsAllMember: 'Tutti i membri del team',
|
||||
permissionsInvitedMembers: 'Membri del team parziali',
|
||||
me: '(Tu)',
|
||||
indexMethod: 'Metodo di Indicizzazione',
|
||||
indexMethodHighQuality: 'Alta Qualità',
|
||||
indexMethodHighQualityTip:
|
||||
'Chiama il modello di Embedding per l\'elaborazione per fornire maggiore accuratezza quando gli utenti fanno query.',
|
||||
indexMethodEconomy: 'Economico',
|
||||
indexMethodEconomyTip:
|
||||
'Usa motori vettoriali offline, indici di parole chiave, ecc. per ridurre l\'accuratezza senza spendere token',
|
||||
embeddingModel: 'Modello di Embedding',
|
||||
embeddingModelTip: 'Per cambiare il modello di embedding, vai alle ',
|
||||
embeddingModelTipLink: 'Impostazioni',
|
||||
retrievalSetting: {
|
||||
title: 'Impostazione di Recupero',
|
||||
learnMore: 'Scopri di più',
|
||||
description: ' sul metodo di recupero.',
|
||||
longDescription:
|
||||
' sul metodo di recupero, puoi cambiare questo in qualsiasi momento nelle impostazioni della Conoscenza.',
|
||||
},
|
||||
save: 'Salva',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,57 @@
|
||||
const translation = {
|
||||
knowledge: 'Conoscenza',
|
||||
documentCount: ' documenti',
|
||||
wordCount: ' k parole',
|
||||
appCount: ' app collegate',
|
||||
createDataset: 'Crea Conoscenza',
|
||||
createDatasetIntro:
|
||||
'Importa i tuoi dati testuali o scrivi dati in tempo reale tramite Webhook per migliorare il contesto LLM.',
|
||||
deleteDatasetConfirmTitle: 'Eliminare questa Conoscenza?',
|
||||
deleteDatasetConfirmContent:
|
||||
'L\'eliminazione della Conoscenza è irreversibile. Gli utenti non potranno più accedere alla tua Conoscenza e tutte le configurazioni dei prompt e i log verranno eliminati permanentemente.',
|
||||
datasetUsedByApp:
|
||||
'La Conoscenza è utilizzata da alcune app. Le app non potranno più utilizzare questa Conoscenza e tutte le configurazioni dei prompt e i log verranno eliminati permanentemente.',
|
||||
datasetDeleted: 'Conoscenza eliminata',
|
||||
datasetDeleteFailed: 'Eliminazione della Conoscenza fallita',
|
||||
didYouKnow: 'Lo sapevi?',
|
||||
intro1: 'La Conoscenza può essere integrata nell\'applicazione Dify ',
|
||||
intro2: 'come un contesto',
|
||||
intro3: ',',
|
||||
intro4: 'oppure ',
|
||||
intro5: 'può essere creata',
|
||||
intro6: ' come un plug-in di indicizzazione ChatGPT autonomo da pubblicare',
|
||||
unavailable: 'Non disponibile',
|
||||
unavailableTip:
|
||||
'Il modello di embedding non è disponibile, è necessario configurare il modello di embedding predefinito',
|
||||
datasets: 'CONOSCENZA',
|
||||
datasetsApi: 'ACCESSO API',
|
||||
retrieval: {
|
||||
semantic_search: {
|
||||
title: 'Ricerca Vettoriale',
|
||||
description:
|
||||
'Genera embedding delle query e cerca il blocco di testo più simile alla sua rappresentazione vettoriale.',
|
||||
},
|
||||
full_text_search: {
|
||||
title: 'Ricerca Full-Text',
|
||||
description:
|
||||
'Indicizza tutti i termini nel documento, consentendo agli utenti di cercare qualsiasi termine e recuperare il blocco di testo rilevante contenente quei termini.',
|
||||
},
|
||||
hybrid_search: {
|
||||
title: 'Ricerca Ibrida',
|
||||
description:
|
||||
'Esegui contemporaneamente la ricerca full-text e la ricerca vettoriale, riordina per selezionare la migliore corrispondenza per la query dell\'utente. È necessaria la configurazione delle API del modello Rerank.',
|
||||
recommend: 'Consigliato',
|
||||
},
|
||||
invertedIndex: {
|
||||
title: 'Indice Invertito',
|
||||
description:
|
||||
'L\'Indice Invertito è una struttura utilizzata per il recupero efficiente. Organizzato per termini, ogni termine punta ai documenti o alle pagine web che lo contengono.',
|
||||
},
|
||||
change: 'Cambia',
|
||||
changeRetrievalMethod: 'Cambia metodo di recupero',
|
||||
},
|
||||
docsFailedNotice: 'documenti non riusciti a essere indicizzati',
|
||||
retry: 'Riprova',
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,42 @@
|
||||
const translation = {
|
||||
title: 'Esplora',
|
||||
sidebar: {
|
||||
discovery: 'Scoperta',
|
||||
chat: 'Chat',
|
||||
workspace: 'Workspace',
|
||||
action: {
|
||||
pin: 'Fissa',
|
||||
unpin: 'Sblocca',
|
||||
rename: 'Rinomina',
|
||||
delete: 'Elimina',
|
||||
},
|
||||
delete: {
|
||||
title: 'Elimina app',
|
||||
content: 'Sei sicuro di voler eliminare questa app?',
|
||||
},
|
||||
},
|
||||
apps: {
|
||||
title: 'Esplora App di Dify',
|
||||
description:
|
||||
'Usa queste app modello istantaneamente o personalizza le tue app basate sui modelli.',
|
||||
allCategories: 'Consigliato',
|
||||
},
|
||||
appCard: {
|
||||
addToWorkspace: 'Aggiungi a Workspace',
|
||||
customize: 'Personalizza',
|
||||
},
|
||||
appCustomize: {
|
||||
title: 'Crea app da {{name}}',
|
||||
subTitle: 'Icona & nome dell\'app',
|
||||
nameRequired: 'Il nome dell\'app è obbligatorio',
|
||||
},
|
||||
category: {
|
||||
Assistant: 'Assistente',
|
||||
Writing: 'Scrittura',
|
||||
Translate: 'Traduzione',
|
||||
Programming: 'Programmazione',
|
||||
HR: 'Risorse Umane',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,4 @@
|
||||
const translation = {
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,85 @@
|
||||
const translation = {
|
||||
pageTitle: 'Ehi, iniziamo!👋',
|
||||
welcome: 'Benvenuto su Dify, per favore accedi per continuare.',
|
||||
email: 'Indirizzo email',
|
||||
emailPlaceholder: 'La tua email',
|
||||
password: 'Password',
|
||||
passwordPlaceholder: 'La tua password',
|
||||
name: 'Nome utente',
|
||||
namePlaceholder: 'Il tuo nome utente',
|
||||
forget: 'Hai dimenticato la password?',
|
||||
signBtn: 'Accedi',
|
||||
sso: 'Continua con SSO',
|
||||
installBtn: 'Configura',
|
||||
setAdminAccount: 'Impostazione di un account amministratore',
|
||||
setAdminAccountDesc:
|
||||
'Privilegi massimi per l\'account amministratore, che può essere utilizzato per creare applicazioni e gestire i fornitori di LLM, ecc.',
|
||||
createAndSignIn: 'Crea e accedi',
|
||||
oneMoreStep: 'Un altro passo',
|
||||
createSample:
|
||||
'In base a queste informazioni, creeremo un\'applicazione di esempio per te',
|
||||
invitationCode: 'Codice di invito',
|
||||
invitationCodePlaceholder: 'Il tuo codice di invito',
|
||||
interfaceLanguage: 'Lingua dell\'interfaccia',
|
||||
timezone: 'Fuso orario',
|
||||
go: 'Vai a Dify',
|
||||
sendUsMail:
|
||||
'Inviaci una email con la tua presentazione e gestiremo la richiesta di invito.',
|
||||
acceptPP: 'Ho letto e accetto l\'informativa sulla privacy',
|
||||
reset:
|
||||
'Per favore esegui il seguente comando per reimpostare la tua password',
|
||||
withGitHub: 'Continua con GitHub',
|
||||
withGoogle: 'Continua con Google',
|
||||
rightTitle: 'Sblocca tutto il potenziale di LLM',
|
||||
rightDesc:
|
||||
'Costruisci senza sforzo applicazioni AI visivamente accattivanti, operabili e migliorabili.',
|
||||
tos: 'Termini di servizio',
|
||||
pp: 'Informativa sulla privacy',
|
||||
tosDesc: 'Iscrivendoti, accetti i nostri',
|
||||
goToInit:
|
||||
'Se non hai inizializzato l\'account, vai alla pagina di inizializzazione',
|
||||
donthave: 'Non hai?',
|
||||
invalidInvitationCode: 'Codice di invito non valido',
|
||||
accountAlreadyInited: 'Account già inizializzato',
|
||||
forgotPassword: 'Hai dimenticato la password?',
|
||||
resetLinkSent: 'Link per il reset inviato',
|
||||
sendResetLink: 'Invia link per il reset',
|
||||
backToSignIn: 'Torna al login',
|
||||
forgotPasswordDesc:
|
||||
'Per favore inserisci il tuo indirizzo email per reimpostare la tua password. Ti invieremo una email con le istruzioni su come reimpostare la tua password.',
|
||||
checkEmailForResetLink:
|
||||
'Per favore controlla la tua email per un link per reimpostare la password. Se non compare entro pochi minuti, assicurati di controllare la cartella spam.',
|
||||
passwordChanged: 'Accedi ora',
|
||||
changePassword: 'Cambia Password',
|
||||
changePasswordTip:
|
||||
'Per favore inserisci una nuova password per il tuo account',
|
||||
invalidToken: 'Token non valido o scaduto',
|
||||
confirmPassword: 'Conferma Password',
|
||||
confirmPasswordPlaceholder: 'Conferma la tua nuova password',
|
||||
passwordChangedTip: 'La tua password è stata cambiata con successo',
|
||||
error: {
|
||||
emailEmpty: 'L\'indirizzo email è obbligatorio',
|
||||
emailInValid: 'Per favore inserisci un indirizzo email valido',
|
||||
nameEmpty: 'Il nome è obbligatorio',
|
||||
passwordEmpty: 'La password è obbligatoria',
|
||||
passwordLengthInValid: 'La password deve essere di almeno 8 caratteri',
|
||||
passwordInvalid:
|
||||
'La password deve contenere lettere e numeri, e la lunghezza deve essere maggiore di 8',
|
||||
},
|
||||
license: {
|
||||
tip: 'Prima di avviare Dify Community Edition, leggi su GitHub',
|
||||
link: 'Licenza open-source',
|
||||
},
|
||||
join: 'Unisciti',
|
||||
joinTipStart: 'Invitato a unirti al',
|
||||
joinTipEnd: 'team su Dify',
|
||||
invalid: 'Il link è scaduto',
|
||||
explore: 'Esplora Dify',
|
||||
activatedTipStart: 'Sei entrato nel team',
|
||||
activatedTipEnd: '',
|
||||
activated: 'Accedi ora',
|
||||
adminInitPassword: 'Password di inizializzazione amministratore',
|
||||
validate: 'Convalida',
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,4 @@
|
||||
const translation = {
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,29 @@
|
||||
const translation = {
|
||||
input: 'INPUT',
|
||||
result: 'RISULTATO',
|
||||
detail: 'DETTAGLIO',
|
||||
tracing: 'TRACCIAMENTO',
|
||||
resultPanel: {
|
||||
status: 'STATO',
|
||||
time: 'TEMPO TRASCORSO',
|
||||
tokens: 'TOKEN TOTALI',
|
||||
},
|
||||
meta: {
|
||||
title: 'METADATI',
|
||||
status: 'Stato',
|
||||
version: 'Versione',
|
||||
executor: 'Esecutore',
|
||||
startTime: 'Ora di Inizio',
|
||||
time: 'Tempo Trascorso',
|
||||
tokens: 'Token Totali',
|
||||
steps: 'Fasi Eseguite',
|
||||
},
|
||||
resultEmpty: {
|
||||
title: 'Questa esecuzione ha prodotto solo output in formato JSON,',
|
||||
tipLeft: 'per favore vai al ',
|
||||
link: 'pannello dei dettagli',
|
||||
tipRight: ' per visualizzarlo.',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,76 @@
|
||||
const translation = {
|
||||
common: {
|
||||
welcome: '',
|
||||
appUnavailable: 'L\'app non è disponibile',
|
||||
appUnkonwError: 'L\'app non è disponibile',
|
||||
},
|
||||
chat: {
|
||||
newChat: 'Nuova chat',
|
||||
pinnedTitle: 'Fissati',
|
||||
unpinnedTitle: 'Chat',
|
||||
newChatDefaultName: 'Nuova conversazione',
|
||||
resetChat: 'Reimposta conversazione',
|
||||
powerBy: 'Powered by',
|
||||
prompt: 'Prompt',
|
||||
privatePromptConfigTitle: 'Impostazioni conversazione',
|
||||
publicPromptConfigTitle: 'Prompt iniziale',
|
||||
configStatusDes:
|
||||
'Prima di iniziare, puoi modificare le impostazioni della conversazione',
|
||||
configDisabled:
|
||||
'Le impostazioni della sessione precedente sono state utilizzate per questa sessione.',
|
||||
startChat: 'Inizia Chat',
|
||||
privacyPolicyLeft: 'Per favore leggi la ',
|
||||
privacyPolicyMiddle: 'politica sulla privacy',
|
||||
privacyPolicyRight: ' fornita dallo sviluppatore dell\'app.',
|
||||
deleteConversation: {
|
||||
title: 'Elimina conversazione',
|
||||
content: 'Sei sicuro di voler eliminare questa conversazione?',
|
||||
},
|
||||
tryToSolve: 'Prova a risolvere',
|
||||
temporarySystemIssue: 'Spiacente, problema temporaneo del sistema.',
|
||||
},
|
||||
generation: {
|
||||
tabs: {
|
||||
create: 'Esegui una volta',
|
||||
batch: 'Esegui batch',
|
||||
saved: 'Salvato',
|
||||
},
|
||||
savedNoData: {
|
||||
title: 'Non hai ancora salvato un risultato!',
|
||||
description:
|
||||
'Inizia a generare contenuti e trova i tuoi risultati salvati qui.',
|
||||
startCreateContent: 'Inizia a creare contenuti',
|
||||
},
|
||||
title: 'Completamento AI',
|
||||
queryTitle: 'Contenuto della query',
|
||||
completionResult: 'Risultato del completamento',
|
||||
queryPlaceholder: 'Scrivi il contenuto della tua query...',
|
||||
run: 'Esegui',
|
||||
copy: 'Copia',
|
||||
resultTitle: 'Completamento AI',
|
||||
noData: 'L\'AI ti darà ciò che desideri qui.',
|
||||
csvUploadTitle: 'Trascina e rilascia il tuo file CSV qui, oppure ',
|
||||
browse: 'sfoglia',
|
||||
csvStructureTitle: 'Il file CSV deve rispettare la seguente struttura:',
|
||||
downloadTemplate: 'Scarica qui il modello',
|
||||
field: 'Campo',
|
||||
batchFailed: {
|
||||
info: '{{num}} esecuzioni fallite',
|
||||
retry: 'Riprova',
|
||||
outputPlaceholder: 'Nessun contenuto di output',
|
||||
},
|
||||
errorMsg: {
|
||||
empty: 'Per favore inserisci contenuto nel file caricato.',
|
||||
fileStructNotMatch:
|
||||
'Il file CSV caricato non corrisponde alla struttura.',
|
||||
emptyLine: 'Riga {{rowIndex}} è vuota',
|
||||
invalidLine:
|
||||
'Riga {{rowIndex}}: il valore di {{varName}} non può essere vuoto',
|
||||
moreThanMaxLengthLine:
|
||||
'Riga {{rowIndex}}: il valore di {{varName}} non può essere superiore a {{maxLength}} caratteri',
|
||||
atLeastOne: 'Per favore inserisci almeno una riga nel file caricato.',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,163 @@
|
||||
const translation = {
|
||||
title: 'Strumenti',
|
||||
createCustomTool: 'Crea Strumento Personalizzato',
|
||||
customToolTip: 'Scopri di più sugli strumenti personalizzati di Dify',
|
||||
type: {
|
||||
all: 'Tutti',
|
||||
builtIn: 'Integrato',
|
||||
custom: 'Personalizzato',
|
||||
workflow: 'Flusso di lavoro',
|
||||
},
|
||||
contribute: {
|
||||
line1: 'Sono interessato a ',
|
||||
line2: 'contribuire con strumenti a Dify.',
|
||||
viewGuide: 'Visualizza la guida',
|
||||
},
|
||||
author: 'Di',
|
||||
auth: {
|
||||
unauthorized: 'Per Autorizzare',
|
||||
authorized: 'Autorizzato',
|
||||
setup: 'Configura l\'autorizzazione per utilizzare',
|
||||
setupModalTitle: 'Configura Autorizzazione',
|
||||
setupModalTitleDescription:
|
||||
'Dopo aver configurato le credenziali, tutti i membri all\'interno del workspace possono utilizzare questo strumento durante l\'orchestrazione delle applicazioni.',
|
||||
},
|
||||
includeToolNum: '{{num}} strumenti inclusi',
|
||||
addTool: 'Aggiungi Strumento',
|
||||
addToolModal: {
|
||||
type: 'tipo',
|
||||
category: 'categoria',
|
||||
add: 'aggiungi',
|
||||
added: 'aggiunto',
|
||||
manageInTools: 'Gestisci in Strumenti',
|
||||
emptyTitle: 'Nessun strumento di flusso di lavoro disponibile',
|
||||
emptyTip: 'Vai a `Flusso di lavoro -> Pubblica come Strumento`',
|
||||
},
|
||||
createTool: {
|
||||
title: 'Crea Strumento Personalizzato',
|
||||
editAction: 'Configura',
|
||||
editTitle: 'Modifica Strumento Personalizzato',
|
||||
name: 'Nome',
|
||||
toolNamePlaceHolder: 'Inserisci il nome dello strumento',
|
||||
nameForToolCall: 'Nome chiamata strumento',
|
||||
nameForToolCallPlaceHolder:
|
||||
'Usato per il riconoscimento della macchina, ad esempio getCurrentWeather, list_pets',
|
||||
nameForToolCallTip: 'Supporta solo numeri, lettere e underscore.',
|
||||
description: 'Descrizione',
|
||||
descriptionPlaceholder:
|
||||
'Breve descrizione dello scopo dello strumento, ad esempio, ottenere la temperatura per una posizione specifica.',
|
||||
schema: 'Schema',
|
||||
schemaPlaceHolder: 'Inserisci qui il tuo schema OpenAPI',
|
||||
viewSchemaSpec: 'Visualizza la Specifica OpenAPI-Swagger',
|
||||
importFromUrl: 'Importa da URL',
|
||||
importFromUrlPlaceHolder: 'https://...',
|
||||
urlError: 'Per favore inserisci un URL valido',
|
||||
examples: 'Esempi',
|
||||
exampleOptions: {
|
||||
json: 'Weather(JSON)',
|
||||
yaml: 'Pet Store(YAML)',
|
||||
blankTemplate: 'Modello Vuoto',
|
||||
},
|
||||
availableTools: {
|
||||
title: 'Strumenti Disponibili',
|
||||
name: 'Nome',
|
||||
description: 'Descrizione',
|
||||
method: 'Metodo',
|
||||
path: 'Percorso',
|
||||
action: 'Azioni',
|
||||
test: 'Test',
|
||||
},
|
||||
authMethod: {
|
||||
title: 'Metodo di autorizzazione',
|
||||
type: 'Tipo di autorizzazione',
|
||||
keyTooltip:
|
||||
'Http Header Key, Puoi lasciarlo come `Authorization` se non sai cos\'è o impostarlo su un valore personalizzato',
|
||||
types: {
|
||||
none: 'Nessuno',
|
||||
api_key: 'API Key',
|
||||
apiKeyPlaceholder: 'Nome dell\'intestazione HTTP per API Key',
|
||||
apiValuePlaceholder: 'Inserisci API Key',
|
||||
},
|
||||
key: 'Chiave',
|
||||
value: 'Valore',
|
||||
},
|
||||
authHeaderPrefix: {
|
||||
title: 'Tipo di Auth',
|
||||
types: {
|
||||
basic: 'Basic',
|
||||
bearer: 'Bearer',
|
||||
custom: 'Custom',
|
||||
},
|
||||
},
|
||||
privacyPolicy: 'Informativa sulla privacy',
|
||||
privacyPolicyPlaceholder:
|
||||
'Per favore inserisci l\'informativa sulla privacy',
|
||||
toolInput: {
|
||||
title: 'Input Strumento',
|
||||
name: 'Nome',
|
||||
required: 'Richiesto',
|
||||
method: 'Metodo',
|
||||
methodSetting: 'Impostazione',
|
||||
methodSettingTip: 'L\'utente compila la configurazione dello strumento',
|
||||
methodParameter: 'Parametro',
|
||||
methodParameterTip: 'LLM compila durante l\'inferenza',
|
||||
label: 'Tag',
|
||||
labelPlaceholder: 'Scegli tag (opzionale)',
|
||||
description: 'Descrizione',
|
||||
descriptionPlaceholder: 'Descrizione del significato del parametro',
|
||||
},
|
||||
customDisclaimer: 'Disclaimer personalizzato',
|
||||
customDisclaimerPlaceholder:
|
||||
'Per favore inserisci disclaimer personalizzato',
|
||||
confirmTitle: 'Confermare per salvare?',
|
||||
confirmTip: 'Le app che utilizzano questo strumento saranno influenzate',
|
||||
deleteToolConfirmTitle: 'Eliminare questo Strumento?',
|
||||
deleteToolConfirmContent:
|
||||
'L\'eliminazione dello Strumento è irreversibile. Gli utenti non potranno più accedere al tuo Strumento.',
|
||||
},
|
||||
test: {
|
||||
title: 'Test',
|
||||
parametersValue: 'Parametri & Valore',
|
||||
parameters: 'Parametri',
|
||||
value: 'Valore',
|
||||
testResult: 'Risultati del Test',
|
||||
testResultPlaceholder: 'I risultati del test verranno mostrati qui',
|
||||
},
|
||||
thought: {
|
||||
using: 'Utilizzando',
|
||||
used: 'Usato',
|
||||
requestTitle: 'Richiesta a',
|
||||
responseTitle: 'Risposta da',
|
||||
},
|
||||
setBuiltInTools: {
|
||||
info: 'Info',
|
||||
setting: 'Impostazione',
|
||||
toolDescription: 'Descrizione dello strumento',
|
||||
parameters: 'parametri',
|
||||
string: 'stringa',
|
||||
number: 'numero',
|
||||
required: 'Richiesto',
|
||||
infoAndSetting: 'Info & Impostazioni',
|
||||
},
|
||||
noCustomTool: {
|
||||
title: 'Nessun strumento personalizzato!',
|
||||
content:
|
||||
'Aggiungi e gestisci i tuoi strumenti personalizzati qui per costruire app AI.',
|
||||
createTool: 'Crea Strumento',
|
||||
},
|
||||
noSearchRes: {
|
||||
title: 'Spiacenti, nessun risultato!',
|
||||
content:
|
||||
'Non abbiamo trovato strumenti che corrispondono alla tua ricerca.',
|
||||
reset: 'Reimposta Ricerca',
|
||||
},
|
||||
builtInPromptTitle: 'Prompt',
|
||||
toolRemoved: 'Strumento rimosso',
|
||||
notAuthorized: 'Strumento non autorizzato',
|
||||
howToGet: 'Come ottenere',
|
||||
openInStudio: 'Apri in Studio',
|
||||
toolNameUsageTip:
|
||||
'Nome chiamata strumento per il ragionamento e il prompting dell\'agente',
|
||||
}
|
||||
|
||||
export default translation
|
||||
@@ -0,0 +1,504 @@
|
||||
const translation = {
|
||||
common: {
|
||||
undo: 'Annulla',
|
||||
redo: 'Ripeti',
|
||||
editing: 'Modifica in corso',
|
||||
autoSaved: 'Salvataggio automatico',
|
||||
unpublished: 'Non pubblicato',
|
||||
published: 'Pubblicato',
|
||||
publish: 'Pubblica',
|
||||
update: 'Aggiorna',
|
||||
run: 'Esegui',
|
||||
running: 'In esecuzione',
|
||||
inRunMode: 'In modalità di esecuzione',
|
||||
inPreview: 'In anteprima',
|
||||
inPreviewMode: 'In modalità anteprima',
|
||||
preview: 'Anteprima',
|
||||
viewRunHistory: 'Visualizza cronologia esecuzioni',
|
||||
runHistory: 'Cronologia esecuzioni',
|
||||
goBackToEdit: 'Torna all\'editor',
|
||||
conversationLog: 'Registro conversazioni',
|
||||
features: 'Caratteristiche',
|
||||
debugAndPreview: 'Debug e Anteprima',
|
||||
restart: 'Riavvia',
|
||||
currentDraft: 'Bozza corrente',
|
||||
currentDraftUnpublished: 'Bozza corrente non pubblicata',
|
||||
latestPublished: 'Ultimo pubblicato',
|
||||
publishedAt: 'Pubblicato',
|
||||
restore: 'Ripristina',
|
||||
runApp: 'Esegui App',
|
||||
batchRunApp: 'Esegui App in Batch',
|
||||
accessAPIReference: 'Accedi alla Riferimento API',
|
||||
embedIntoSite: 'Incorpora nel Sito',
|
||||
addTitle: 'Aggiungi titolo...',
|
||||
addDescription: 'Aggiungi descrizione...',
|
||||
noVar: 'Nessuna variabile',
|
||||
searchVar: 'Cerca variabile',
|
||||
variableNamePlaceholder: 'Nome variabile',
|
||||
setVarValuePlaceholder: 'Imposta variabile',
|
||||
needConnecttip: 'Questo passaggio non è collegato a nulla',
|
||||
maxTreeDepth: 'Limite massimo di {{depth}} nodi per ramo',
|
||||
needEndNode: 'Deve essere aggiunto il blocco di Fine',
|
||||
needAnswerNode: 'Deve essere aggiunto il blocco di Risposta',
|
||||
workflowProcess: 'Processo di flusso di lavoro',
|
||||
notRunning: 'Non ancora in esecuzione',
|
||||
previewPlaceholder:
|
||||
'Inserisci contenuto nella casella sottostante per avviare il debug del Chatbot',
|
||||
effectVarConfirm: {
|
||||
title: 'Rimuovi Variabile',
|
||||
content:
|
||||
'La variabile è utilizzata in altri nodi. Vuoi comunque rimuoverla?',
|
||||
},
|
||||
insertVarTip: 'Premi il tasto \'/\' per inserire rapidamente',
|
||||
processData: 'Elabora Dati',
|
||||
input: 'Input',
|
||||
output: 'Output',
|
||||
jinjaEditorPlaceholder: 'Digita \'/\' o \'{\' per inserire variabile',
|
||||
viewOnly: 'Solo visualizzazione',
|
||||
showRunHistory: 'Mostra cronologia esecuzioni',
|
||||
enableJinja: 'Abilita supporto template Jinja',
|
||||
learnMore: 'Scopri di più',
|
||||
copy: 'Copia',
|
||||
duplicate: 'Duplica',
|
||||
addBlock: 'Aggiungi Blocco',
|
||||
pasteHere: 'Incolla Qui',
|
||||
pointerMode: 'Modalità Puntatore',
|
||||
handMode: 'Modalità Mano',
|
||||
model: 'Modello',
|
||||
workflowAsTool: 'Flusso di lavoro come Strumento',
|
||||
configureRequired: 'Configurazione Richiesta',
|
||||
configure: 'Configura',
|
||||
manageInTools: 'Gestisci in Strumenti',
|
||||
workflowAsToolTip:
|
||||
'È richiesta una nuova configurazione dello strumento dopo l\'aggiornamento del flusso di lavoro.',
|
||||
viewDetailInTracingPanel: 'Visualizza dettagli',
|
||||
syncingData: 'Sincronizzazione dei dati in corso, solo pochi secondi.',
|
||||
importDSL: 'Importa DSL',
|
||||
importDSLTip:
|
||||
'La bozza corrente verrà sovrascritta. Esporta il flusso di lavoro come backup prima di importare.',
|
||||
backupCurrentDraft: 'Backup Bozza Corrente',
|
||||
chooseDSL: 'Scegli file DSL(yml)',
|
||||
overwriteAndImport: 'Sovrascrivi e Importa',
|
||||
importFailure: 'Importazione fallita',
|
||||
importSuccess: 'Importazione riuscita',
|
||||
},
|
||||
changeHistory: {
|
||||
title: 'Cronologia Modifiche',
|
||||
placeholder: 'Non hai ancora modificato nulla',
|
||||
clearHistory: 'Cancella Cronologia',
|
||||
hint: 'Suggerimento',
|
||||
hintText:
|
||||
'Le tue azioni di modifica vengono tracciate in una cronologia delle modifiche, che viene memorizzata sul tuo dispositivo per tutta la durata di questa sessione. Questa cronologia verrà cancellata quando lascerai l\'editor.',
|
||||
stepBackward_one: '{{count}} passo indietro',
|
||||
stepBackward_other: '{{count}} passi indietro',
|
||||
stepForward_one: '{{count}} passo avanti',
|
||||
stepForward_other: '{{count}} passi avanti',
|
||||
sessionStart: 'Inizio sessione',
|
||||
currentState: 'Stato attuale',
|
||||
nodeTitleChange: 'Titolo del blocco modificato',
|
||||
nodeDescriptionChange: 'Descrizione del blocco modificata',
|
||||
nodeDragStop: 'Blocco spostato',
|
||||
nodeChange: 'Blocco modificato',
|
||||
nodeConnect: 'Blocco collegato',
|
||||
nodePaste: 'Blocco incollato',
|
||||
nodeDelete: 'Blocco eliminato',
|
||||
nodeAdd: 'Blocco aggiunto',
|
||||
nodeResize: 'Blocco ridimensionato',
|
||||
noteAdd: 'Nota aggiunta',
|
||||
noteChange: 'Nota modificata',
|
||||
noteDelete: 'Nota eliminata',
|
||||
edgeDelete: 'Blocco scollegato',
|
||||
},
|
||||
errorMsg: {
|
||||
fieldRequired: '{{field}} è richiesto',
|
||||
authRequired: 'È richiesta l\'autorizzazione',
|
||||
invalidJson: '{{field}} è un JSON non valido',
|
||||
fields: {
|
||||
variable: 'Nome Variabile',
|
||||
variableValue: 'Valore Variabile',
|
||||
code: 'Codice',
|
||||
model: 'Modello',
|
||||
rerankModel: 'Modello Rerank',
|
||||
},
|
||||
invalidVariable: 'Variabile non valida',
|
||||
},
|
||||
singleRun: {
|
||||
testRun: 'Esecuzione Test ',
|
||||
startRun: 'Avvia Esecuzione',
|
||||
running: 'In esecuzione',
|
||||
testRunIteration: 'Iterazione Esecuzione Test',
|
||||
back: 'Indietro',
|
||||
iteration: 'Iterazione',
|
||||
},
|
||||
tabs: {
|
||||
'searchBlock': 'Cerca blocco',
|
||||
'blocks': 'Blocchi',
|
||||
'tools': 'Strumenti',
|
||||
'allTool': 'Tutti',
|
||||
'builtInTool': 'Integrato',
|
||||
'customTool': 'Personalizzato',
|
||||
'workflowTool': 'Flusso di lavoro',
|
||||
'question-understand': 'Comprensione Domanda',
|
||||
'logic': 'Logica',
|
||||
'transform': 'Trasforma',
|
||||
'utilities': 'Utility',
|
||||
'noResult': 'Nessuna corrispondenza trovata',
|
||||
},
|
||||
blocks: {
|
||||
'start': 'Inizio',
|
||||
'end': 'Fine',
|
||||
'answer': 'Risposta',
|
||||
'llm': 'LLM',
|
||||
'knowledge-retrieval': 'Recupero Conoscenza',
|
||||
'question-classifier': 'Classificatore Domande',
|
||||
'if-else': 'SE/ALTRIMENTI',
|
||||
'code': 'Codice',
|
||||
'template-transform': 'Template',
|
||||
'http-request': 'Richiesta HTTP',
|
||||
'variable-assigner': 'Assegnatore Variabili',
|
||||
'variable-aggregator': 'Aggregatore Variabili',
|
||||
'iteration-start': 'Inizio Iterazione',
|
||||
'iteration': 'Iterazione',
|
||||
'parameter-extractor': 'Estrattore Parametri',
|
||||
},
|
||||
blocksAbout: {
|
||||
'start': 'Definisci i parametri iniziali per l\'avvio di un flusso di lavoro',
|
||||
'end': 'Definisci la fine e il tipo di risultato di un flusso di lavoro',
|
||||
'answer': 'Definisci il contenuto della risposta di una conversazione chat',
|
||||
'llm': 'Invoca modelli di linguaggio di grandi dimensioni per rispondere a domande o elaborare il linguaggio naturale',
|
||||
'knowledge-retrieval':
|
||||
'Ti consente di interrogare il contenuto del testo relativo alle domande dell\'utente dalla Conoscenza',
|
||||
'question-classifier':
|
||||
'Definisci le condizioni di classificazione delle domande dell\'utente, LLM può definire come prosegue la conversazione in base alla descrizione della classificazione',
|
||||
'if-else':
|
||||
'Ti consente di dividere il flusso di lavoro in due rami basati su condizioni se/altrimenti',
|
||||
'code': 'Esegui un pezzo di codice Python o NodeJS per implementare la logica personalizzata',
|
||||
'template-transform':
|
||||
'Converti i dati in stringa usando la sintassi del template Jinja',
|
||||
'http-request':
|
||||
'Consenti l\'invio di richieste server tramite il protocollo HTTP',
|
||||
'variable-assigner':
|
||||
'Aggrega variabili multi-ramo in una singola variabile per la configurazione unificata dei nodi a valle.',
|
||||
'variable-aggregator':
|
||||
'Aggrega variabili multi-ramo in una singola variabile per la configurazione unificata dei nodi a valle.',
|
||||
'iteration':
|
||||
'Esegui più passaggi su un oggetto lista fino a quando tutti i risultati non sono stati prodotti.',
|
||||
'parameter-extractor':
|
||||
'Usa LLM per estrarre parametri strutturati dal linguaggio naturale per invocazioni di strumenti o richieste HTTP.',
|
||||
},
|
||||
operator: {
|
||||
zoomIn: 'Zoom In',
|
||||
zoomOut: 'Zoom Out',
|
||||
zoomTo50: 'Zoom al 50%',
|
||||
zoomTo100: 'Zoom al 100%',
|
||||
zoomToFit: 'Zoom per Adattare',
|
||||
},
|
||||
panel: {
|
||||
userInputField: 'Campo di Input Utente',
|
||||
changeBlock: 'Cambia Blocco',
|
||||
helpLink: 'Link di Aiuto',
|
||||
about: 'Informazioni',
|
||||
createdBy: 'Creato da ',
|
||||
nextStep: 'Prossimo Passo',
|
||||
addNextStep: 'Aggiungi il prossimo blocco in questo flusso di lavoro',
|
||||
selectNextStep: 'Seleziona Prossimo Blocco',
|
||||
runThisStep: 'Esegui questo passo',
|
||||
checklist: 'Checklist',
|
||||
checklistTip:
|
||||
'Assicurati che tutti i problemi siano risolti prima di pubblicare',
|
||||
checklistResolved: 'Tutti i problemi sono risolti',
|
||||
organizeBlocks: 'Organizza blocchi',
|
||||
change: 'Cambia',
|
||||
},
|
||||
nodes: {
|
||||
common: {
|
||||
outputVars: 'Variabili di Output',
|
||||
insertVarTip: 'Inserisci Variabile',
|
||||
memory: {
|
||||
memory: 'Memoria',
|
||||
memoryTip: 'Impostazioni memoria chat',
|
||||
windowSize: 'Dimensione Finestra',
|
||||
conversationRoleName: 'Nome Ruolo Conversazione',
|
||||
user: 'Prefisso Utente',
|
||||
assistant: 'Prefisso Assistente',
|
||||
},
|
||||
memories: {
|
||||
title: 'Memorie',
|
||||
tip: 'Memoria chat',
|
||||
builtIn: 'Integrato',
|
||||
},
|
||||
},
|
||||
start: {
|
||||
required: 'richiesto',
|
||||
inputField: 'Campo di Input',
|
||||
builtInVar: 'Variabili Integrate',
|
||||
outputVars: {
|
||||
query: 'Input Utente',
|
||||
memories: {
|
||||
des: 'Cronologia conversazioni',
|
||||
type: 'tipo di messaggio',
|
||||
content: 'contenuto del messaggio',
|
||||
},
|
||||
files: 'Elenco file',
|
||||
},
|
||||
noVarTip:
|
||||
'Imposta gli input che possono essere utilizzati nel Flusso di lavoro',
|
||||
},
|
||||
end: {
|
||||
outputs: 'Output',
|
||||
output: {
|
||||
type: 'tipo di output',
|
||||
variable: 'variabile di output',
|
||||
},
|
||||
type: {
|
||||
'none': 'Nessuno',
|
||||
'plain-text': 'Testo Semplice',
|
||||
'structured': 'Strutturato',
|
||||
},
|
||||
},
|
||||
answer: {
|
||||
answer: 'Risposta',
|
||||
outputVars: 'Variabili di Output',
|
||||
},
|
||||
llm: {
|
||||
model: 'modello',
|
||||
variables: 'variabili',
|
||||
context: 'contesto',
|
||||
contextTooltip: 'Puoi importare Conoscenza come contesto',
|
||||
notSetContextInPromptTip:
|
||||
'Per abilitare la funzionalità di contesto, compila la variabile del contesto nel PROMPT.',
|
||||
prompt: 'prompt',
|
||||
roleDescription: {
|
||||
system: 'Fornisci istruzioni di alto livello per la conversazione',
|
||||
user: 'Fornisci istruzioni, query o qualsiasi input basato su testo al modello',
|
||||
assistant: 'Le risposte del modello basate sui messaggi dell\'utente',
|
||||
},
|
||||
addMessage: 'Aggiungi Messaggio',
|
||||
vision: 'vision',
|
||||
files: 'File',
|
||||
resolution: {
|
||||
name: 'Risoluzione',
|
||||
high: 'Alta',
|
||||
low: 'Bassa',
|
||||
},
|
||||
outputVars: {
|
||||
output: 'Genera contenuto',
|
||||
usage: 'Informazioni sull\'utilizzo del modello',
|
||||
},
|
||||
singleRun: {
|
||||
variable: 'Variabile',
|
||||
},
|
||||
sysQueryInUser: 'sys.query nel messaggio utente è richiesto',
|
||||
},
|
||||
knowledgeRetrieval: {
|
||||
queryVariable: 'Variabile Query',
|
||||
knowledge: 'Conoscenza',
|
||||
outputVars: {
|
||||
output: 'Dati segmentati di recupero',
|
||||
content: 'Contenuto segmentato',
|
||||
title: 'Titolo segmentato',
|
||||
icon: 'Icona segmentata',
|
||||
url: 'URL segmentato',
|
||||
metadata: 'Altri metadati',
|
||||
},
|
||||
},
|
||||
http: {
|
||||
inputVars: 'Variabili di Input',
|
||||
api: 'API',
|
||||
apiPlaceholder: 'Inserisci URL, digita ‘/’ per inserire variabile',
|
||||
notStartWithHttp: 'L\'API deve iniziare con http:// o https://',
|
||||
key: 'Chiave',
|
||||
value: 'Valore',
|
||||
bulkEdit: 'Modifica di massa',
|
||||
keyValueEdit: 'Modifica Chiave-Valore',
|
||||
headers: 'Intestazioni',
|
||||
params: 'Parametri',
|
||||
body: 'Corpo',
|
||||
outputVars: {
|
||||
body: 'Contenuto Risposta',
|
||||
statusCode: 'Codice Stato Risposta',
|
||||
headers: 'Elenco Intestazioni Risposta JSON',
|
||||
files: 'Elenco File',
|
||||
},
|
||||
authorization: {
|
||||
'authorization': 'Autorizzazione',
|
||||
'authorizationType': 'Tipo di Autorizzazione',
|
||||
'no-auth': 'Nessuno',
|
||||
'api-key': 'API-Key',
|
||||
'auth-type': 'Tipo Auth',
|
||||
'basic': 'Basic',
|
||||
'bearer': 'Bearer',
|
||||
'custom': 'Custom',
|
||||
'api-key-title': 'API Key',
|
||||
'header': 'Intestazione',
|
||||
},
|
||||
insertVarPlaceholder: 'digita \'/\' per inserire variabile',
|
||||
timeout: {
|
||||
title: 'Timeout',
|
||||
connectLabel: 'Timeout Connessione',
|
||||
connectPlaceholder: 'Inserisci timeout connessione in secondi',
|
||||
readLabel: 'Timeout Lettura',
|
||||
readPlaceholder: 'Inserisci timeout lettura in secondi',
|
||||
writeLabel: 'Timeout Scrittura',
|
||||
writePlaceholder: 'Inserisci timeout scrittura in secondi',
|
||||
},
|
||||
},
|
||||
code: {
|
||||
inputVars: 'Variabili di Input',
|
||||
outputVars: 'Variabili di Output',
|
||||
advancedDependencies: 'Dipendenze Avanzate',
|
||||
advancedDependenciesTip:
|
||||
'Aggiungi alcune dipendenze precaricate che richiedono più tempo per essere consumate o che non sono predefinite qui',
|
||||
searchDependencies: 'Cerca Dipendenze',
|
||||
},
|
||||
templateTransform: {
|
||||
inputVars: 'Variabili di Input',
|
||||
code: 'Codice',
|
||||
codeSupportTip: 'Supporta solo Jinja2',
|
||||
outputVars: {
|
||||
output: 'Contenuto trasformato',
|
||||
},
|
||||
},
|
||||
ifElse: {
|
||||
if: 'Se',
|
||||
else: 'Altrimenti',
|
||||
elseDescription:
|
||||
'Utilizzato per definire la logica che dovrebbe essere eseguita quando la condizione se non è soddisfatta.',
|
||||
and: 'e',
|
||||
or: 'o',
|
||||
operator: 'Operatore',
|
||||
notSetVariable: 'Si prega di impostare prima la variabile',
|
||||
comparisonOperator: {
|
||||
'contains': 'contiene',
|
||||
'not contains': 'non contiene',
|
||||
'start with': 'inizia con',
|
||||
'end with': 'finisce con',
|
||||
'is': 'è',
|
||||
'is not': 'non è',
|
||||
'empty': 'è vuoto',
|
||||
'not empty': 'non è vuoto',
|
||||
'null': 'è nullo',
|
||||
'not null': 'non è nullo',
|
||||
},
|
||||
enterValue: 'Inserisci valore',
|
||||
addCondition: 'Aggiungi Condizione',
|
||||
conditionNotSetup: 'Condizione NON impostata',
|
||||
selectVariable: 'Seleziona variabile...',
|
||||
},
|
||||
variableAssigner: {
|
||||
title: 'Assegna variabili',
|
||||
outputType: 'Tipo di Output',
|
||||
varNotSet: 'Variabile non impostata',
|
||||
noVarTip: 'Aggiungi le variabili da assegnare',
|
||||
type: {
|
||||
string: 'Stringa',
|
||||
number: 'Numero',
|
||||
object: 'Oggetto',
|
||||
array: 'Array',
|
||||
},
|
||||
aggregationGroup: 'Gruppo di Aggregazione',
|
||||
aggregationGroupTip:
|
||||
'Abilitando questa funzione, l\'aggregatore di variabili potrà aggregare più set di variabili.',
|
||||
addGroup: 'Aggiungi Gruppo',
|
||||
outputVars: {
|
||||
varDescribe: 'Output {{groupName}}',
|
||||
},
|
||||
setAssignVariable: 'Imposta variabile assegnata',
|
||||
},
|
||||
tool: {
|
||||
toAuthorize: 'Per autorizzare',
|
||||
inputVars: 'Variabili di Input',
|
||||
outputVars: {
|
||||
text: 'contenuto generato dallo strumento',
|
||||
files: {
|
||||
title: 'file generati dallo strumento',
|
||||
type: 'Tipo supportato. Attualmente supporta solo immagini',
|
||||
transfer_method:
|
||||
'Metodo di trasferimento. Il valore è remote_url o local_file',
|
||||
url: 'URL immagine',
|
||||
upload_file_id: 'ID file caricato',
|
||||
},
|
||||
json: 'json generato dallo strumento',
|
||||
},
|
||||
},
|
||||
questionClassifiers: {
|
||||
model: 'modello',
|
||||
inputVars: 'Variabili di Input',
|
||||
outputVars: {
|
||||
className: 'Nome Classe',
|
||||
},
|
||||
class: 'Classe',
|
||||
classNamePlaceholder: 'Scrivi il nome della tua classe',
|
||||
advancedSetting: 'Impostazione Avanzata',
|
||||
topicName: 'Nome Argomento',
|
||||
topicPlaceholder: 'Scrivi il nome del tuo argomento',
|
||||
addClass: 'Aggiungi Classe',
|
||||
instruction: 'Istruzione',
|
||||
instructionTip:
|
||||
'Inserisci istruzioni aggiuntive per aiutare il classificatore di domande a capire meglio come categorizzare le domande.',
|
||||
instructionPlaceholder: 'Scrivi la tua istruzione',
|
||||
},
|
||||
parameterExtractor: {
|
||||
inputVar: 'Variabile di Input',
|
||||
extractParameters: 'Estrai Parametri',
|
||||
importFromTool: 'Importa dagli strumenti',
|
||||
addExtractParameter: 'Aggiungi Parametro Estratto',
|
||||
addExtractParameterContent: {
|
||||
name: 'Nome',
|
||||
namePlaceholder: 'Nome Parametro Estratto',
|
||||
type: 'Tipo',
|
||||
typePlaceholder: 'Tipo Parametro Estratto',
|
||||
description: 'Descrizione',
|
||||
descriptionPlaceholder: 'Descrizione Parametro Estratto',
|
||||
required: 'Richiesto',
|
||||
requiredContent:
|
||||
'Richiesto viene utilizzato solo come riferimento per l\'inferenza del modello, e non per la convalida obbligatoria dell\'output del parametro.',
|
||||
},
|
||||
extractParametersNotSet: 'Parametri Estratti non impostati',
|
||||
instruction: 'Istruzione',
|
||||
instructionTip:
|
||||
'Inserisci istruzioni aggiuntive per aiutare l\'estrattore di parametri a capire come estrarre i parametri.',
|
||||
advancedSetting: 'Impostazione Avanzata',
|
||||
reasoningMode: 'Modalità di ragionamento',
|
||||
reasoningModeTip:
|
||||
'Puoi scegliere la modalità di ragionamento appropriata in base alla capacità del modello di rispondere alle istruzioni per la chiamata delle funzioni o i prompt.',
|
||||
isSuccess:
|
||||
'È successo. In caso di successo il valore è 1, in caso di fallimento il valore è 0.',
|
||||
errorReason: 'Motivo dell\'errore',
|
||||
},
|
||||
iteration: {
|
||||
deleteTitle: 'Eliminare Nodo Iterazione?',
|
||||
deleteDesc:
|
||||
'Eliminando il nodo iterazione verranno eliminati tutti i nodi figlio',
|
||||
input: 'Input',
|
||||
output: 'Variabili di Output',
|
||||
iteration_one: '{{count}} Iterazione',
|
||||
iteration_other: '{{count}} Iterazioni',
|
||||
currentIteration: 'Iterazione Corrente',
|
||||
},
|
||||
note: {
|
||||
addNote: 'Aggiungi Nota',
|
||||
editor: {
|
||||
placeholder: 'Scrivi la tua nota...',
|
||||
small: 'Piccolo',
|
||||
medium: 'Medio',
|
||||
large: 'Grande',
|
||||
bold: 'Grassetto',
|
||||
italic: 'Corsivo',
|
||||
strikethrough: 'Barrato',
|
||||
link: 'Link',
|
||||
openLink: 'Apri',
|
||||
unlink: 'Rimuovi link',
|
||||
enterUrl: 'Inserisci URL...',
|
||||
invalidUrl: 'URL non valido',
|
||||
bulletList: 'Elenco puntato',
|
||||
showAuthor: 'Mostra Autore',
|
||||
},
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
stopBy: 'Interrotto da {{user}}',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
+23
-11
@@ -49,19 +49,31 @@ export const NOTICE_I18N = {
|
||||
pl_PL: 'Ważne ogłoszenie',
|
||||
uk_UA: 'Важливе повідомлення',
|
||||
vi_VN: 'Thông báo quan trọng',
|
||||
it_IT: 'Avviso Importante',
|
||||
},
|
||||
desc: {
|
||||
en_US: 'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
|
||||
zh_Hans: '为了有效提升数据检索能力及稳定性,Dify 将于 2023 年 8 月 29 日 03:00 至 08:00 期间进行服务升级,届时 Dify 云端版及应用将无法访问。感谢您的耐心与支持。',
|
||||
pt_BR: 'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
|
||||
es_ES: 'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
|
||||
fr_FR: 'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
|
||||
de_DE: 'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
|
||||
ja_JP: 'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
|
||||
ko_KR: '시스템이 업그레이드를 위해 UTC 시간대로 8월 28일 19:00 ~ 24:00에 사용 불가될 예정입니다. 질문이 있으시면 지원 팀에 연락주세요 (support@dify.ai). 최선을 다해 답변해드리겠습니다.',
|
||||
pl_PL: 'Nasz system będzie niedostępny od 19:00 do 24:00 UTC 28 sierpnia w celu aktualizacji. W przypadku pytań prosimy o kontakt z naszym zespołem wsparcia (support@dify.ai). Doceniamy Twoją cierpliwość.',
|
||||
uk_UA: 'Наша система буде недоступна з 19:00 до 24:00 UTC 28 серпня для оновлення. Якщо у вас виникнуть запитання, будь ласка, зв’яжіться з нашою службою підтримки (support@dify.ai). Дякуємо за терпіння.',
|
||||
vi_VN: 'Hệ thống của chúng tôi sẽ ngừng hoạt động từ 19:00 đến 24:00 UTC vào ngày 28 tháng 8 để nâng cấp. Nếu có thắc mắc, vui lòng liên hệ với nhóm hỗ trợ của chúng tôi (support@dify.ai). Chúng tôi đánh giá cao sự kiên nhẫn của bạn.',
|
||||
en_US:
|
||||
'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
|
||||
zh_Hans:
|
||||
'为了有效提升数据检索能力及稳定性,Dify 将于 2023 年 8 月 29 日 03:00 至 08:00 期间进行服务升级,届时 Dify 云端版及应用将无法访问。感谢您的耐心与支持。',
|
||||
pt_BR:
|
||||
'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
|
||||
es_ES:
|
||||
'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
|
||||
fr_FR:
|
||||
'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
|
||||
de_DE:
|
||||
'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
|
||||
ja_JP:
|
||||
'Our system will be unavailable from 19:00 to 24:00 UTC on August 28 for an upgrade. For questions, kindly contact our support team (support@dify.ai). We value your patience.',
|
||||
ko_KR:
|
||||
'시스템이 업그레이드를 위해 UTC 시간대로 8월 28일 19:00 ~ 24:00에 사용 불가될 예정입니다. 질문이 있으시면 지원 팀에 연락주세요 (support@dify.ai). 최선을 다해 답변해드리겠습니다.',
|
||||
pl_PL:
|
||||
'Nasz system będzie niedostępny od 19:00 do 24:00 UTC 28 sierpnia w celu aktualizacji. W przypadku pytań prosimy o kontakt z naszym zespołem wsparcia (support@dify.ai). Doceniamy Twoją cierpliwość.',
|
||||
uk_UA:
|
||||
'Наша система буде недоступна з 19:00 до 24:00 UTC 28 серпня для оновлення. Якщо у вас виникнуть запитання, будь ласка, зв’яжіться з нашою службою підтримки (support@dify.ai). Дякуємо за терпіння.',
|
||||
vi_VN:
|
||||
'Hệ thống của chúng tôi sẽ ngừng hoạt động từ 19:00 đến 24:00 UTC vào ngày 28 tháng 8 để nâng cấp. Nếu có thắc mắc, vui lòng liên hệ với nhóm hỗ trợ của chúng tôi (support@dify.ai). Chúng tôi đánh giá cao sự kiên nhẫn của bạn.',
|
||||
},
|
||||
href: '#',
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
"name": "Italiano (Italia)",
|
||||
"prompt_name": "Italian",
|
||||
"example": "Ciao, Dify!",
|
||||
"supported": false
|
||||
"supported": true
|
||||
},
|
||||
{
|
||||
"value": "th-TH",
|
||||
|
||||
@@ -13,6 +13,10 @@ const translation = {
|
||||
exportFailed: '导出 DSL 失败',
|
||||
importDSL: '导入 DSL 文件',
|
||||
createFromConfigFile: '通过 DSL 文件创建',
|
||||
importFromDSL: '导入 DSL',
|
||||
importFromDSLFile: '文件',
|
||||
importFromDSLUrl: 'URL',
|
||||
importFromDSLUrlPlaceholder: '输入 DSL 文件的 URL',
|
||||
deleteAppConfirmTitle: '确认删除应用?',
|
||||
deleteAppConfirmContent:
|
||||
'删除应用将无法撤销。用户将不能访问你的应用,所有 Prompt 编排配置和日志均将一并被删除。',
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "dify-web",
|
||||
"version": "0.6.13",
|
||||
"version": "0.6.14",
|
||||
"private": true,
|
||||
"engines": {
|
||||
"node": ">=18.17.0"
|
||||
|
||||
@@ -37,6 +37,10 @@ export const importApp: Fetcher<AppDetailResponse, { data: string; name?: string
|
||||
return post<AppDetailResponse>('apps/import', { body: { data, name, description, icon, icon_background } })
|
||||
}
|
||||
|
||||
export const importAppFromUrl: Fetcher<AppDetailResponse, { url: string; name?: string; description?: string; icon?: string; icon_background?: string }> = ({ url, name, description, icon, icon_background }) => {
|
||||
return post<AppDetailResponse>('apps/import/url', { body: { url, name, description, icon, icon_background } })
|
||||
}
|
||||
|
||||
export const switchApp: Fetcher<{ new_app_id: string }, { appID: string; name: string; icon: string; icon_background: string }> = ({ appID, name, icon, icon_background }) => {
|
||||
return post<{ new_app_id: string }>(`apps/${appID}/convert-to-workflow`, { body: { name, icon, icon_background } })
|
||||
}
|
||||
|
||||
+150
-150
@@ -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;
|
||||
|
||||
+150
-150
@@ -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;
|
||||
|
||||
@@ -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,12 +298,11 @@ 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)',
|
||||
@@ -395,167 +394,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)',
|
||||
|
||||
Reference in New Issue
Block a user