mirror of https://github.com/langgenius/dify.git
feat: MLflow tracing (#26093)
Signed-off-by: B-Step62 <yuki.watanabe@databricks.com> Co-authored-by: Asuka Minato <i@asukaminato.eu.org> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com>
This commit is contained in:
parent
ea320ce055
commit
c6e6f3b7cb
|
|
@ -2,7 +2,7 @@ from enum import StrEnum
|
|||
|
||||
from pydantic import BaseModel, ValidationInfo, field_validator
|
||||
|
||||
from core.ops.utils import validate_project_name, validate_url, validate_url_with_path
|
||||
from core.ops.utils import validate_integer_id, validate_project_name, validate_url, validate_url_with_path
|
||||
|
||||
|
||||
class TracingProviderEnum(StrEnum):
|
||||
|
|
@ -13,6 +13,8 @@ class TracingProviderEnum(StrEnum):
|
|||
OPIK = "opik"
|
||||
WEAVE = "weave"
|
||||
ALIYUN = "aliyun"
|
||||
MLFLOW = "mlflow"
|
||||
DATABRICKS = "databricks"
|
||||
TENCENT = "tencent"
|
||||
|
||||
|
||||
|
|
@ -223,5 +225,47 @@ class TencentConfig(BaseTracingConfig):
|
|||
return cls.validate_project_field(v, "dify_app")
|
||||
|
||||
|
||||
class MLflowConfig(BaseTracingConfig):
|
||||
"""
|
||||
Model class for MLflow tracing config.
|
||||
"""
|
||||
|
||||
tracking_uri: str = "http://localhost:5000"
|
||||
experiment_id: str = "0" # Default experiment id in MLflow is 0
|
||||
username: str | None = None
|
||||
password: str | None = None
|
||||
|
||||
@field_validator("tracking_uri")
|
||||
@classmethod
|
||||
def tracking_uri_validator(cls, v, info: ValidationInfo):
|
||||
if isinstance(v, str) and v.startswith("databricks"):
|
||||
raise ValueError(
|
||||
"Please use Databricks tracing config below to record traces to Databricks-managed MLflow instances."
|
||||
)
|
||||
return validate_url_with_path(v, "http://localhost:5000")
|
||||
|
||||
@field_validator("experiment_id")
|
||||
@classmethod
|
||||
def experiment_id_validator(cls, v, info: ValidationInfo):
|
||||
return validate_integer_id(v)
|
||||
|
||||
|
||||
class DatabricksConfig(BaseTracingConfig):
|
||||
"""
|
||||
Model class for Databricks (Databricks-managed MLflow) tracing config.
|
||||
"""
|
||||
|
||||
experiment_id: str
|
||||
host: str
|
||||
client_id: str | None = None
|
||||
client_secret: str | None = None
|
||||
personal_access_token: str | None = None
|
||||
|
||||
@field_validator("experiment_id")
|
||||
@classmethod
|
||||
def experiment_id_validator(cls, v, info: ValidationInfo):
|
||||
return validate_integer_id(v)
|
||||
|
||||
|
||||
OPS_FILE_PATH = "ops_trace/"
|
||||
OPS_TRACE_FAILED_KEY = "FAILED_OPS_TRACE"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,549 @@
|
|||
import json
|
||||
import logging
|
||||
import os
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Any, cast
|
||||
|
||||
import mlflow
|
||||
from mlflow.entities import Document, Span, SpanEvent, SpanStatusCode, SpanType
|
||||
from mlflow.tracing.constant import SpanAttributeKey, TokenUsageKey, TraceMetadataKey
|
||||
from mlflow.tracing.fluent import start_span_no_context, update_current_trace
|
||||
from mlflow.tracing.provider import detach_span_from_context, set_span_in_context
|
||||
|
||||
from core.ops.base_trace_instance import BaseTraceInstance
|
||||
from core.ops.entities.config_entity import DatabricksConfig, MLflowConfig
|
||||
from core.ops.entities.trace_entity import (
|
||||
BaseTraceInfo,
|
||||
DatasetRetrievalTraceInfo,
|
||||
GenerateNameTraceInfo,
|
||||
MessageTraceInfo,
|
||||
ModerationTraceInfo,
|
||||
SuggestedQuestionTraceInfo,
|
||||
ToolTraceInfo,
|
||||
TraceTaskName,
|
||||
WorkflowTraceInfo,
|
||||
)
|
||||
from core.workflow.enums import NodeType
|
||||
from extensions.ext_database import db
|
||||
from models import EndUser
|
||||
from models.workflow import WorkflowNodeExecutionModel
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def datetime_to_nanoseconds(dt: datetime | None) -> int | None:
|
||||
"""Convert datetime to nanosecond timestamp for MLflow API"""
|
||||
if dt is None:
|
||||
return None
|
||||
return int(dt.timestamp() * 1_000_000_000)
|
||||
|
||||
|
||||
class MLflowDataTrace(BaseTraceInstance):
|
||||
def __init__(self, config: MLflowConfig | DatabricksConfig):
|
||||
super().__init__(config)
|
||||
if isinstance(config, DatabricksConfig):
|
||||
self._setup_databricks(config)
|
||||
else:
|
||||
self._setup_mlflow(config)
|
||||
|
||||
# Enable async logging to minimize performance overhead
|
||||
os.environ["MLFLOW_ENABLE_ASYNC_TRACE_LOGGING"] = "true"
|
||||
|
||||
def _setup_databricks(self, config: DatabricksConfig):
|
||||
"""Setup connection to Databricks-managed MLflow instances"""
|
||||
os.environ["DATABRICKS_HOST"] = config.host
|
||||
|
||||
if config.client_id and config.client_secret:
|
||||
# OAuth: https://docs.databricks.com/aws/en/dev-tools/auth/oauth-m2m?language=Environment
|
||||
os.environ["DATABRICKS_CLIENT_ID"] = config.client_id
|
||||
os.environ["DATABRICKS_CLIENT_SECRET"] = config.client_secret
|
||||
elif config.personal_access_token:
|
||||
# PAT: https://docs.databricks.com/aws/en/dev-tools/auth/pat
|
||||
os.environ["DATABRICKS_TOKEN"] = config.personal_access_token
|
||||
else:
|
||||
raise ValueError(
|
||||
"Either Databricks token (PAT) or client id and secret (OAuth) must be provided"
|
||||
"See https://docs.databricks.com/aws/en/dev-tools/auth/#what-authorization-option-should-i-choose "
|
||||
"for more information about the authorization options."
|
||||
)
|
||||
mlflow.set_tracking_uri("databricks")
|
||||
mlflow.set_experiment(experiment_id=config.experiment_id)
|
||||
|
||||
# Remove trailing slash from host
|
||||
config.host = config.host.rstrip("/")
|
||||
self._project_url = f"{config.host}/ml/experiments/{config.experiment_id}/traces"
|
||||
|
||||
def _setup_mlflow(self, config: MLflowConfig):
|
||||
"""Setup connection to MLflow instances"""
|
||||
mlflow.set_tracking_uri(config.tracking_uri)
|
||||
mlflow.set_experiment(experiment_id=config.experiment_id)
|
||||
|
||||
# Simple auth if provided
|
||||
if config.username and config.password:
|
||||
os.environ["MLFLOW_TRACKING_USERNAME"] = config.username
|
||||
os.environ["MLFLOW_TRACKING_PASSWORD"] = config.password
|
||||
|
||||
self._project_url = f"{config.tracking_uri}/#/experiments/{config.experiment_id}/traces"
|
||||
|
||||
def trace(self, trace_info: BaseTraceInfo):
|
||||
"""Simple dispatch to trace methods"""
|
||||
try:
|
||||
if isinstance(trace_info, WorkflowTraceInfo):
|
||||
self.workflow_trace(trace_info)
|
||||
elif isinstance(trace_info, MessageTraceInfo):
|
||||
self.message_trace(trace_info)
|
||||
elif isinstance(trace_info, ToolTraceInfo):
|
||||
self.tool_trace(trace_info)
|
||||
elif isinstance(trace_info, ModerationTraceInfo):
|
||||
self.moderation_trace(trace_info)
|
||||
elif isinstance(trace_info, DatasetRetrievalTraceInfo):
|
||||
self.dataset_retrieval_trace(trace_info)
|
||||
elif isinstance(trace_info, SuggestedQuestionTraceInfo):
|
||||
self.suggested_question_trace(trace_info)
|
||||
elif isinstance(trace_info, GenerateNameTraceInfo):
|
||||
self.generate_name_trace(trace_info)
|
||||
except Exception:
|
||||
logger.exception("[MLflow] Trace error")
|
||||
raise
|
||||
|
||||
def workflow_trace(self, trace_info: WorkflowTraceInfo):
|
||||
"""Create workflow span as root, with node spans as children"""
|
||||
# fields with sys.xyz is added by Dify, they are duplicate to trace_info.metadata
|
||||
raw_inputs = trace_info.workflow_run_inputs or {}
|
||||
workflow_inputs = {k: v for k, v in raw_inputs.items() if not k.startswith("sys.")}
|
||||
|
||||
# Special inputs propagated by system
|
||||
if trace_info.query:
|
||||
workflow_inputs["query"] = trace_info.query
|
||||
|
||||
workflow_span = start_span_no_context(
|
||||
name=TraceTaskName.WORKFLOW_TRACE.value,
|
||||
span_type=SpanType.CHAIN,
|
||||
inputs=workflow_inputs,
|
||||
attributes=trace_info.metadata,
|
||||
start_time_ns=datetime_to_nanoseconds(trace_info.start_time),
|
||||
)
|
||||
|
||||
# Set reserved fields in trace-level metadata
|
||||
trace_metadata = {}
|
||||
if user_id := trace_info.metadata.get("user_id"):
|
||||
trace_metadata[TraceMetadataKey.TRACE_USER] = user_id
|
||||
if session_id := trace_info.conversation_id:
|
||||
trace_metadata[TraceMetadataKey.TRACE_SESSION] = session_id
|
||||
self._set_trace_metadata(workflow_span, trace_metadata)
|
||||
|
||||
try:
|
||||
# Create child spans for workflow nodes
|
||||
for node in self._get_workflow_nodes(trace_info.workflow_run_id):
|
||||
inputs = None
|
||||
attributes = {
|
||||
"node_id": node.id,
|
||||
"node_type": node.node_type,
|
||||
"status": node.status,
|
||||
"tenant_id": node.tenant_id,
|
||||
"app_id": node.app_id,
|
||||
"app_name": node.title,
|
||||
}
|
||||
|
||||
if node.node_type in (NodeType.LLM, NodeType.QUESTION_CLASSIFIER):
|
||||
inputs, llm_attributes = self._parse_llm_inputs_and_attributes(node)
|
||||
attributes.update(llm_attributes)
|
||||
elif node.node_type == NodeType.HTTP_REQUEST:
|
||||
inputs = node.process_data # contains request URL
|
||||
|
||||
if not inputs:
|
||||
inputs = json.loads(node.inputs) if node.inputs else {}
|
||||
|
||||
node_span = start_span_no_context(
|
||||
name=node.title,
|
||||
span_type=self._get_node_span_type(node.node_type),
|
||||
parent_span=workflow_span,
|
||||
inputs=inputs,
|
||||
attributes=attributes,
|
||||
start_time_ns=datetime_to_nanoseconds(node.created_at),
|
||||
)
|
||||
|
||||
# Handle node errors
|
||||
if node.status != "succeeded":
|
||||
node_span.set_status(SpanStatusCode.ERROR)
|
||||
node_span.add_event(
|
||||
SpanEvent( # type: ignore[abstract]
|
||||
name="exception",
|
||||
attributes={
|
||||
"exception.message": f"Node failed with status: {node.status}",
|
||||
"exception.type": "Error",
|
||||
"exception.stacktrace": f"Node failed with status: {node.status}",
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
# End node span
|
||||
finished_at = node.created_at + timedelta(seconds=node.elapsed_time)
|
||||
outputs = json.loads(node.outputs) if node.outputs else {}
|
||||
if node.node_type == NodeType.KNOWLEDGE_RETRIEVAL:
|
||||
outputs = self._parse_knowledge_retrieval_outputs(outputs)
|
||||
elif node.node_type == NodeType.LLM:
|
||||
outputs = outputs.get("text", outputs)
|
||||
node_span.end(
|
||||
outputs=outputs,
|
||||
end_time_ns=datetime_to_nanoseconds(finished_at),
|
||||
)
|
||||
|
||||
# Handle workflow-level errors
|
||||
if trace_info.error:
|
||||
workflow_span.set_status(SpanStatusCode.ERROR)
|
||||
workflow_span.add_event(
|
||||
SpanEvent( # type: ignore[abstract]
|
||||
name="exception",
|
||||
attributes={
|
||||
"exception.message": trace_info.error,
|
||||
"exception.type": "Error",
|
||||
"exception.stacktrace": trace_info.error,
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
finally:
|
||||
workflow_span.end(
|
||||
outputs=trace_info.workflow_run_outputs,
|
||||
end_time_ns=datetime_to_nanoseconds(trace_info.end_time),
|
||||
)
|
||||
|
||||
def _parse_llm_inputs_and_attributes(self, node: WorkflowNodeExecutionModel) -> tuple[Any, dict]:
|
||||
"""Parse LLM inputs and attributes from LLM workflow node"""
|
||||
if node.process_data is None:
|
||||
return {}, {}
|
||||
|
||||
try:
|
||||
data = json.loads(node.process_data)
|
||||
except (json.JSONDecodeError, TypeError):
|
||||
return {}, {}
|
||||
|
||||
inputs = self._parse_prompts(data.get("prompts"))
|
||||
attributes = {
|
||||
"model_name": data.get("model_name"),
|
||||
"model_provider": data.get("model_provider"),
|
||||
"finish_reason": data.get("finish_reason"),
|
||||
}
|
||||
|
||||
if hasattr(SpanAttributeKey, "MESSAGE_FORMAT"):
|
||||
attributes[SpanAttributeKey.MESSAGE_FORMAT] = "dify"
|
||||
|
||||
if usage := data.get("usage"):
|
||||
# Set reserved token usage attributes
|
||||
attributes[SpanAttributeKey.CHAT_USAGE] = {
|
||||
TokenUsageKey.INPUT_TOKENS: usage.get("prompt_tokens", 0),
|
||||
TokenUsageKey.OUTPUT_TOKENS: usage.get("completion_tokens", 0),
|
||||
TokenUsageKey.TOTAL_TOKENS: usage.get("total_tokens", 0),
|
||||
}
|
||||
# Store raw usage data as well as it includes more data like price
|
||||
attributes["usage"] = usage
|
||||
|
||||
return inputs, attributes
|
||||
|
||||
def _parse_knowledge_retrieval_outputs(self, outputs: dict):
|
||||
"""Parse KR outputs and attributes from KR workflow node"""
|
||||
retrieved = outputs.get("result", [])
|
||||
|
||||
if not retrieved or not isinstance(retrieved, list):
|
||||
return outputs
|
||||
|
||||
documents = []
|
||||
for item in retrieved:
|
||||
documents.append(Document(page_content=item.get("content", ""), metadata=item.get("metadata", {})))
|
||||
return documents
|
||||
|
||||
def message_trace(self, trace_info: MessageTraceInfo):
|
||||
"""Create span for CHATBOT message processing"""
|
||||
if not trace_info.message_data:
|
||||
return
|
||||
|
||||
file_list = cast(list[str], trace_info.file_list) or []
|
||||
if message_file_data := trace_info.message_file_data:
|
||||
base_url = os.getenv("FILES_URL", "http://127.0.0.1:5001")
|
||||
file_list.append(f"{base_url}/{message_file_data.url}")
|
||||
|
||||
span = start_span_no_context(
|
||||
name=TraceTaskName.MESSAGE_TRACE.value,
|
||||
span_type=SpanType.LLM,
|
||||
inputs=self._parse_prompts(trace_info.inputs), # type: ignore[arg-type]
|
||||
attributes={
|
||||
"message_id": trace_info.message_id, # type: ignore[dict-item]
|
||||
"model_provider": trace_info.message_data.model_provider,
|
||||
"model_id": trace_info.message_data.model_id,
|
||||
"conversation_mode": trace_info.conversation_mode,
|
||||
"file_list": file_list, # type: ignore[dict-item]
|
||||
"total_price": trace_info.message_data.total_price,
|
||||
**trace_info.metadata,
|
||||
},
|
||||
start_time_ns=datetime_to_nanoseconds(trace_info.start_time),
|
||||
)
|
||||
|
||||
if hasattr(SpanAttributeKey, "MESSAGE_FORMAT"):
|
||||
span.set_attribute(SpanAttributeKey.MESSAGE_FORMAT, "dify")
|
||||
|
||||
# Set token usage
|
||||
span.set_attribute(
|
||||
SpanAttributeKey.CHAT_USAGE,
|
||||
{
|
||||
TokenUsageKey.INPUT_TOKENS: trace_info.message_tokens or 0,
|
||||
TokenUsageKey.OUTPUT_TOKENS: trace_info.answer_tokens or 0,
|
||||
TokenUsageKey.TOTAL_TOKENS: trace_info.total_tokens or 0,
|
||||
},
|
||||
)
|
||||
|
||||
# Set reserved fields in trace-level metadata
|
||||
trace_metadata = {}
|
||||
if user_id := self._get_message_user_id(trace_info.metadata):
|
||||
trace_metadata[TraceMetadataKey.TRACE_USER] = user_id
|
||||
if session_id := trace_info.metadata.get("conversation_id"):
|
||||
trace_metadata[TraceMetadataKey.TRACE_SESSION] = session_id
|
||||
self._set_trace_metadata(span, trace_metadata)
|
||||
|
||||
if trace_info.error:
|
||||
span.set_status(SpanStatusCode.ERROR)
|
||||
span.add_event(
|
||||
SpanEvent( # type: ignore[abstract]
|
||||
name="error",
|
||||
attributes={
|
||||
"exception.message": trace_info.error,
|
||||
"exception.type": "Error",
|
||||
"exception.stacktrace": trace_info.error,
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
span.end(
|
||||
outputs=trace_info.message_data.answer,
|
||||
end_time_ns=datetime_to_nanoseconds(trace_info.end_time),
|
||||
)
|
||||
|
||||
def _get_message_user_id(self, metadata: dict) -> str | None:
|
||||
if (end_user_id := metadata.get("from_end_user_id")) and (
|
||||
end_user_data := db.session.query(EndUser).where(EndUser.id == end_user_id).first()
|
||||
):
|
||||
return end_user_data.session_id
|
||||
|
||||
return metadata.get("from_account_id") # type: ignore[return-value]
|
||||
|
||||
def tool_trace(self, trace_info: ToolTraceInfo):
|
||||
span = start_span_no_context(
|
||||
name=trace_info.tool_name,
|
||||
span_type=SpanType.TOOL,
|
||||
inputs=trace_info.tool_inputs, # type: ignore[arg-type]
|
||||
attributes={
|
||||
"message_id": trace_info.message_id, # type: ignore[dict-item]
|
||||
"metadata": trace_info.metadata, # type: ignore[dict-item]
|
||||
"tool_config": trace_info.tool_config, # type: ignore[dict-item]
|
||||
"tool_parameters": trace_info.tool_parameters, # type: ignore[dict-item]
|
||||
},
|
||||
start_time_ns=datetime_to_nanoseconds(trace_info.start_time),
|
||||
)
|
||||
|
||||
# Handle tool errors
|
||||
if trace_info.error:
|
||||
span.set_status(SpanStatusCode.ERROR)
|
||||
span.add_event(
|
||||
SpanEvent( # type: ignore[abstract]
|
||||
name="error",
|
||||
attributes={
|
||||
"exception.message": trace_info.error,
|
||||
"exception.type": "Error",
|
||||
"exception.stacktrace": trace_info.error,
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
span.end(
|
||||
outputs=trace_info.tool_outputs,
|
||||
end_time_ns=datetime_to_nanoseconds(trace_info.end_time),
|
||||
)
|
||||
|
||||
def moderation_trace(self, trace_info: ModerationTraceInfo):
|
||||
if trace_info.message_data is None:
|
||||
return
|
||||
|
||||
start_time = trace_info.start_time or trace_info.message_data.created_at
|
||||
span = start_span_no_context(
|
||||
name=TraceTaskName.MODERATION_TRACE.value,
|
||||
span_type=SpanType.TOOL,
|
||||
inputs=trace_info.inputs or {},
|
||||
attributes={
|
||||
"message_id": trace_info.message_id, # type: ignore[dict-item]
|
||||
"metadata": trace_info.metadata, # type: ignore[dict-item]
|
||||
},
|
||||
start_time_ns=datetime_to_nanoseconds(start_time),
|
||||
)
|
||||
|
||||
span.end(
|
||||
outputs={
|
||||
"action": trace_info.action,
|
||||
"flagged": trace_info.flagged,
|
||||
"preset_response": trace_info.preset_response,
|
||||
},
|
||||
end_time_ns=datetime_to_nanoseconds(trace_info.end_time),
|
||||
)
|
||||
|
||||
def dataset_retrieval_trace(self, trace_info: DatasetRetrievalTraceInfo):
|
||||
if trace_info.message_data is None:
|
||||
return
|
||||
|
||||
span = start_span_no_context(
|
||||
name=TraceTaskName.DATASET_RETRIEVAL_TRACE.value,
|
||||
span_type=SpanType.RETRIEVER,
|
||||
inputs=trace_info.inputs,
|
||||
attributes={
|
||||
"message_id": trace_info.message_id, # type: ignore[dict-item]
|
||||
"metadata": trace_info.metadata, # type: ignore[dict-item]
|
||||
},
|
||||
start_time_ns=datetime_to_nanoseconds(trace_info.start_time),
|
||||
)
|
||||
span.end(outputs={"documents": trace_info.documents}, end_time_ns=datetime_to_nanoseconds(trace_info.end_time))
|
||||
|
||||
def suggested_question_trace(self, trace_info: SuggestedQuestionTraceInfo):
|
||||
if trace_info.message_data is None:
|
||||
return
|
||||
|
||||
start_time = trace_info.start_time or trace_info.message_data.created_at
|
||||
end_time = trace_info.end_time or trace_info.message_data.updated_at
|
||||
|
||||
span = start_span_no_context(
|
||||
name=TraceTaskName.SUGGESTED_QUESTION_TRACE.value,
|
||||
span_type=SpanType.TOOL,
|
||||
inputs=trace_info.inputs,
|
||||
attributes={
|
||||
"message_id": trace_info.message_id, # type: ignore[dict-item]
|
||||
"model_provider": trace_info.model_provider, # type: ignore[dict-item]
|
||||
"model_id": trace_info.model_id, # type: ignore[dict-item]
|
||||
"total_tokens": trace_info.total_tokens or 0, # type: ignore[dict-item]
|
||||
},
|
||||
start_time_ns=datetime_to_nanoseconds(start_time),
|
||||
)
|
||||
|
||||
if trace_info.error:
|
||||
span.set_status(SpanStatusCode.ERROR)
|
||||
span.add_event(
|
||||
SpanEvent( # type: ignore[abstract]
|
||||
name="error",
|
||||
attributes={
|
||||
"exception.message": trace_info.error,
|
||||
"exception.type": "Error",
|
||||
"exception.stacktrace": trace_info.error,
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
span.end(outputs=trace_info.suggested_question, end_time_ns=datetime_to_nanoseconds(end_time))
|
||||
|
||||
def generate_name_trace(self, trace_info: GenerateNameTraceInfo):
|
||||
span = start_span_no_context(
|
||||
name=TraceTaskName.GENERATE_NAME_TRACE.value,
|
||||
span_type=SpanType.CHAIN,
|
||||
inputs=trace_info.inputs,
|
||||
attributes={"message_id": trace_info.message_id}, # type: ignore[dict-item]
|
||||
start_time_ns=datetime_to_nanoseconds(trace_info.start_time),
|
||||
)
|
||||
span.end(outputs=trace_info.outputs, end_time_ns=datetime_to_nanoseconds(trace_info.end_time))
|
||||
|
||||
def _get_workflow_nodes(self, workflow_run_id: str):
|
||||
"""Helper method to get workflow nodes"""
|
||||
workflow_nodes = (
|
||||
db.session.query(
|
||||
WorkflowNodeExecutionModel.id,
|
||||
WorkflowNodeExecutionModel.tenant_id,
|
||||
WorkflowNodeExecutionModel.app_id,
|
||||
WorkflowNodeExecutionModel.title,
|
||||
WorkflowNodeExecutionModel.node_type,
|
||||
WorkflowNodeExecutionModel.status,
|
||||
WorkflowNodeExecutionModel.inputs,
|
||||
WorkflowNodeExecutionModel.outputs,
|
||||
WorkflowNodeExecutionModel.created_at,
|
||||
WorkflowNodeExecutionModel.elapsed_time,
|
||||
WorkflowNodeExecutionModel.process_data,
|
||||
WorkflowNodeExecutionModel.execution_metadata,
|
||||
)
|
||||
.filter(WorkflowNodeExecutionModel.workflow_run_id == workflow_run_id)
|
||||
.order_by(WorkflowNodeExecutionModel.created_at)
|
||||
.all()
|
||||
)
|
||||
return workflow_nodes
|
||||
|
||||
def _get_node_span_type(self, node_type: str) -> str:
|
||||
"""Map Dify node types to MLflow span types"""
|
||||
node_type_mapping = {
|
||||
NodeType.LLM: SpanType.LLM,
|
||||
NodeType.QUESTION_CLASSIFIER: SpanType.LLM,
|
||||
NodeType.KNOWLEDGE_RETRIEVAL: SpanType.RETRIEVER,
|
||||
NodeType.TOOL: SpanType.TOOL,
|
||||
NodeType.CODE: SpanType.TOOL,
|
||||
NodeType.HTTP_REQUEST: SpanType.TOOL,
|
||||
NodeType.AGENT: SpanType.AGENT,
|
||||
}
|
||||
return node_type_mapping.get(node_type, "CHAIN") # type: ignore[arg-type,call-overload]
|
||||
|
||||
def _set_trace_metadata(self, span: Span, metadata: dict):
|
||||
token = None
|
||||
try:
|
||||
# NB: Set span in context such that we can use update_current_trace() API
|
||||
token = set_span_in_context(span)
|
||||
update_current_trace(metadata=metadata)
|
||||
finally:
|
||||
if token:
|
||||
detach_span_from_context(token)
|
||||
|
||||
def _parse_prompts(self, prompts):
|
||||
"""Postprocess prompts format to be standard chat messages"""
|
||||
if isinstance(prompts, str):
|
||||
return prompts
|
||||
elif isinstance(prompts, dict):
|
||||
return self._parse_single_message(prompts)
|
||||
elif isinstance(prompts, list):
|
||||
messages = [self._parse_single_message(item) for item in prompts]
|
||||
messages = self._resolve_tool_call_ids(messages)
|
||||
return messages
|
||||
return prompts # Fallback to original format
|
||||
|
||||
def _parse_single_message(self, item: dict):
|
||||
"""Postprocess single message format to be standard chat message"""
|
||||
role = item.get("role", "user")
|
||||
msg = {"role": role, "content": item.get("text", "")}
|
||||
|
||||
if (
|
||||
(tool_calls := item.get("tool_calls"))
|
||||
# Tool message does not contain tool calls normally
|
||||
and role != "tool"
|
||||
):
|
||||
msg["tool_calls"] = tool_calls
|
||||
|
||||
if files := item.get("files"):
|
||||
msg["files"] = files
|
||||
|
||||
return msg
|
||||
|
||||
def _resolve_tool_call_ids(self, messages: list[dict]):
|
||||
"""
|
||||
The tool call message from Dify does not contain tool call ids, which is not
|
||||
ideal for debugging. This method resolves the tool call ids by matching the
|
||||
tool call name and parameters with the tool instruction messages.
|
||||
"""
|
||||
tool_call_ids = []
|
||||
for msg in messages:
|
||||
if tool_calls := msg.get("tool_calls"):
|
||||
tool_call_ids = [t["id"] for t in tool_calls]
|
||||
if msg["role"] == "tool":
|
||||
# Get the tool call id in the order of the tool call messages
|
||||
# assuming Dify runs tools sequentially
|
||||
if tool_call_ids:
|
||||
msg["tool_call_id"] = tool_call_ids.pop(0)
|
||||
return messages
|
||||
|
||||
def api_check(self):
|
||||
"""Simple connection test"""
|
||||
try:
|
||||
mlflow.search_experiments(max_results=1)
|
||||
return True
|
||||
except Exception as e:
|
||||
raise ValueError(f"MLflow connection failed: {str(e)}")
|
||||
|
||||
def get_project_url(self):
|
||||
return self._project_url
|
||||
|
|
@ -120,6 +120,26 @@ class OpsTraceProviderConfigMap(collections.UserDict[str, dict[str, Any]]):
|
|||
"other_keys": ["endpoint", "app_name"],
|
||||
"trace_instance": AliyunDataTrace,
|
||||
}
|
||||
case TracingProviderEnum.MLFLOW:
|
||||
from core.ops.entities.config_entity import MLflowConfig
|
||||
from core.ops.mlflow_trace.mlflow_trace import MLflowDataTrace
|
||||
|
||||
return {
|
||||
"config_class": MLflowConfig,
|
||||
"secret_keys": ["password"],
|
||||
"other_keys": ["tracking_uri", "experiment_id", "username"],
|
||||
"trace_instance": MLflowDataTrace,
|
||||
}
|
||||
case TracingProviderEnum.DATABRICKS:
|
||||
from core.ops.entities.config_entity import DatabricksConfig
|
||||
from core.ops.mlflow_trace.mlflow_trace import MLflowDataTrace
|
||||
|
||||
return {
|
||||
"config_class": DatabricksConfig,
|
||||
"secret_keys": ["personal_access_token", "client_secret"],
|
||||
"other_keys": ["host", "client_id", "experiment_id"],
|
||||
"trace_instance": MLflowDataTrace,
|
||||
}
|
||||
|
||||
case TracingProviderEnum.TENCENT:
|
||||
from core.ops.entities.config_entity import TencentConfig
|
||||
|
|
|
|||
|
|
@ -147,3 +147,14 @@ def validate_project_name(project: str, default_name: str) -> str:
|
|||
return default_name
|
||||
|
||||
return project.strip()
|
||||
|
||||
|
||||
def validate_integer_id(id_str: str) -> str:
|
||||
"""
|
||||
Validate and normalize integer ID
|
||||
"""
|
||||
id_str = id_str.strip()
|
||||
if not id_str.isdigit():
|
||||
raise ValueError("ID must be a valid integer")
|
||||
|
||||
return id_str
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ dependencies = [
|
|||
"langfuse~=2.51.3",
|
||||
"langsmith~=0.1.77",
|
||||
"markdown~=3.5.1",
|
||||
"mlflow-skinny>=3.0.0",
|
||||
"numpy~=1.26.4",
|
||||
"openpyxl~=3.1.5",
|
||||
"opik~=1.8.72",
|
||||
|
|
|
|||
|
|
@ -113,6 +113,24 @@ class OpsService:
|
|||
except Exception:
|
||||
new_decrypt_tracing_config.update({"project_url": "https://console.cloud.tencent.com/apm"})
|
||||
|
||||
if tracing_provider == "mlflow" and (
|
||||
"project_url" not in decrypt_tracing_config or not decrypt_tracing_config.get("project_url")
|
||||
):
|
||||
try:
|
||||
project_url = OpsTraceManager.get_trace_config_project_url(decrypt_tracing_config, tracing_provider)
|
||||
new_decrypt_tracing_config.update({"project_url": project_url})
|
||||
except Exception:
|
||||
new_decrypt_tracing_config.update({"project_url": "http://localhost:5000/"})
|
||||
|
||||
if tracing_provider == "databricks" and (
|
||||
"project_url" not in decrypt_tracing_config or not decrypt_tracing_config.get("project_url")
|
||||
):
|
||||
try:
|
||||
project_url = OpsTraceManager.get_trace_config_project_url(decrypt_tracing_config, tracing_provider)
|
||||
new_decrypt_tracing_config.update({"project_url": project_url})
|
||||
except Exception:
|
||||
new_decrypt_tracing_config.update({"project_url": "https://www.databricks.com/"})
|
||||
|
||||
trace_config_data.tracing_config = new_decrypt_tracing_config
|
||||
return trace_config_data.to_dict()
|
||||
|
||||
|
|
@ -155,7 +173,7 @@ class OpsService:
|
|||
project_url = f"{tracing_config.get('host')}/project/{project_key}"
|
||||
except Exception:
|
||||
project_url = None
|
||||
elif tracing_provider in ("langsmith", "opik", "tencent"):
|
||||
elif tracing_provider in ("langsmith", "opik", "mlflow", "databricks", "tencent"):
|
||||
try:
|
||||
project_url = OpsTraceManager.get_trace_config_project_url(tracing_config, tracing_provider)
|
||||
except Exception:
|
||||
|
|
|
|||
64
api/uv.lock
64
api/uv.lock
|
|
@ -1055,6 +1055,15 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/23/38/749c708619f402d4d582dfa73fbeb64ade77b1f250a93bd064d2a1aa3776/clickzetta_connector_python-0.8.106-py3-none-any.whl", hash = "sha256:120d6700051d97609dbd6655c002ab3bc260b7c8e67d39dfc7191e749563f7b4", size = 78121, upload-time = "2025-10-29T02:38:15.014Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cloudpickle"
|
||||
version = "3.1.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cloudscraper"
|
||||
version = "1.2.71"
|
||||
|
|
@ -1255,6 +1264,20 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/0d/c3/e90f4a4feae6410f914f8ebac129b9ae7a8c92eb60a638012dde42030a9d/cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c", size = 3438528, upload-time = "2025-10-15T23:18:26.227Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "databricks-sdk"
|
||||
version = "0.73.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "google-auth" },
|
||||
{ name = "protobuf" },
|
||||
{ name = "requests" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/a8/7f/cfb2a00d10f6295332616e5b22f2ae3aaf2841a3afa6c49262acb6b94f5b/databricks_sdk-0.73.0.tar.gz", hash = "sha256:db09eaaacd98e07dded78d3e7ab47d2f6c886e0380cb577977bd442bace8bd8d", size = 801017, upload-time = "2025-11-05T06:52:58.509Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/a7/27/b822b474aaefb684d11df358d52e012699a2a8af231f9b47c54b73f280cb/databricks_sdk-0.73.0-py3-none-any.whl", hash = "sha256:a4d3cfd19357a2b459d2dc3101454d7f0d1b62865ce099c35d0c342b66ac64ff", size = 753896, upload-time = "2025-11-05T06:52:56.451Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dataclasses-json"
|
||||
version = "0.6.7"
|
||||
|
|
@ -1350,6 +1373,7 @@ dependencies = [
|
|||
{ name = "langsmith" },
|
||||
{ name = "litellm" },
|
||||
{ name = "markdown" },
|
||||
{ name = "mlflow-skinny" },
|
||||
{ name = "numpy" },
|
||||
{ name = "openpyxl" },
|
||||
{ name = "opentelemetry-api" },
|
||||
|
|
@ -1544,6 +1568,7 @@ requires-dist = [
|
|||
{ name = "langsmith", specifier = "~=0.1.77" },
|
||||
{ name = "litellm", specifier = "==1.77.1" },
|
||||
{ name = "markdown", specifier = "~=3.5.1" },
|
||||
{ name = "mlflow-skinny", specifier = ">=3.0.0" },
|
||||
{ name = "numpy", specifier = "~=1.26.4" },
|
||||
{ name = "openpyxl", specifier = "~=3.1.5" },
|
||||
{ name = "opentelemetry-api", specifier = "==1.27.0" },
|
||||
|
|
@ -3338,6 +3363,36 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/d3/82/41d9b80f09b82e066894d9b508af07b7b0fa325ce0322980674de49106a0/milvus_lite-2.5.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:25ce13f4b8d46876dd2b7ac8563d7d8306da7ff3999bb0d14b116b30f71d706c", size = 55263911, upload-time = "2025-06-30T04:24:19.434Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mlflow-skinny"
|
||||
version = "3.6.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "cachetools" },
|
||||
{ name = "click" },
|
||||
{ name = "cloudpickle" },
|
||||
{ name = "databricks-sdk" },
|
||||
{ name = "fastapi" },
|
||||
{ name = "gitpython" },
|
||||
{ name = "importlib-metadata" },
|
||||
{ name = "opentelemetry-api" },
|
||||
{ name = "opentelemetry-proto" },
|
||||
{ name = "opentelemetry-sdk" },
|
||||
{ name = "packaging" },
|
||||
{ name = "protobuf" },
|
||||
{ name = "pydantic" },
|
||||
{ name = "python-dotenv" },
|
||||
{ name = "pyyaml" },
|
||||
{ name = "requests" },
|
||||
{ name = "sqlparse" },
|
||||
{ name = "typing-extensions" },
|
||||
{ name = "uvicorn" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/8d/8e/2a2d0cd5b1b985c5278202805f48aae6f2adc3ddc0fce3385ec50e07e258/mlflow_skinny-3.6.0.tar.gz", hash = "sha256:cc04706b5b6faace9faf95302a6e04119485e1bfe98ddc9b85b81984e80944b6", size = 1963286, upload-time = "2025-11-07T18:33:52.596Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/0e/78/e8fdc3e1708bdfd1eba64f41ce96b461cae1b505aa08b69352ac99b4caa4/mlflow_skinny-3.6.0-py3-none-any.whl", hash = "sha256:c83b34fce592acb2cc6bddcb507587a6d9ef3f590d9e7a8658c85e0980596d78", size = 2364629, upload-time = "2025-11-07T18:33:50.744Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mmh3"
|
||||
version = "5.2.0"
|
||||
|
|
@ -5729,6 +5784,15 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/9b/70/20c1912bc0bfebf516d59d618209443b136c58a7cff141afa7cf30969988/sqlglot-27.29.0-py3-none-any.whl", hash = "sha256:9a5ea8ac61826a7763de10cad45a35f0aa9bfcf7b96ee74afb2314de9089e1cb", size = 526060, upload-time = "2025-10-29T13:50:22.061Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sqlparse"
|
||||
version = "0.5.3"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/e5/40/edede8dd6977b0d3da179a342c198ed100dd2aba4be081861ee5911e4da4/sqlparse-0.5.3.tar.gz", hash = "sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272", size = 84999, upload-time = "2024-12-10T12:05:30.728Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl", hash = "sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca", size = 44415, upload-time = "2024-12-10T12:05:27.824Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sseclient-py"
|
||||
version = "1.8.0"
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next'
|
|||
import { useBoolean } from 'ahooks'
|
||||
import TracingIcon from './tracing-icon'
|
||||
import ProviderPanel from './provider-panel'
|
||||
import type { AliyunConfig, ArizeConfig, LangFuseConfig, LangSmithConfig, OpikConfig, PhoenixConfig, TencentConfig, WeaveConfig } from './type'
|
||||
import type { AliyunConfig, ArizeConfig, DatabricksConfig, LangFuseConfig, LangSmithConfig, MLflowConfig, OpikConfig, PhoenixConfig, TencentConfig, WeaveConfig } from './type'
|
||||
import { TracingProvider } from './type'
|
||||
import ProviderConfigModal from './provider-config-modal'
|
||||
import Indicator from '@/app/components/header/indicator'
|
||||
|
|
@ -30,8 +30,10 @@ export type PopupProps = {
|
|||
opikConfig: OpikConfig | null
|
||||
weaveConfig: WeaveConfig | null
|
||||
aliyunConfig: AliyunConfig | null
|
||||
mlflowConfig: MLflowConfig | null
|
||||
databricksConfig: DatabricksConfig | null
|
||||
tencentConfig: TencentConfig | null
|
||||
onConfigUpdated: (provider: TracingProvider, payload: ArizeConfig | PhoenixConfig | LangSmithConfig | LangFuseConfig | OpikConfig | WeaveConfig | AliyunConfig | TencentConfig) => void
|
||||
onConfigUpdated: (provider: TracingProvider, payload: ArizeConfig | PhoenixConfig | LangSmithConfig | LangFuseConfig | OpikConfig | WeaveConfig | AliyunConfig | TencentConfig | MLflowConfig | DatabricksConfig) => void
|
||||
onConfigRemoved: (provider: TracingProvider) => void
|
||||
}
|
||||
|
||||
|
|
@ -49,6 +51,8 @@ const ConfigPopup: FC<PopupProps> = ({
|
|||
opikConfig,
|
||||
weaveConfig,
|
||||
aliyunConfig,
|
||||
mlflowConfig,
|
||||
databricksConfig,
|
||||
tencentConfig,
|
||||
onConfigUpdated,
|
||||
onConfigRemoved,
|
||||
|
|
@ -73,7 +77,7 @@ const ConfigPopup: FC<PopupProps> = ({
|
|||
}
|
||||
}, [onChooseProvider])
|
||||
|
||||
const handleConfigUpdated = useCallback((payload: ArizeConfig | PhoenixConfig | LangSmithConfig | LangFuseConfig | OpikConfig | WeaveConfig | AliyunConfig | TencentConfig) => {
|
||||
const handleConfigUpdated = useCallback((payload: ArizeConfig | PhoenixConfig | LangSmithConfig | LangFuseConfig | OpikConfig | WeaveConfig | AliyunConfig | MLflowConfig | DatabricksConfig | TencentConfig) => {
|
||||
onConfigUpdated(currentProvider!, payload)
|
||||
hideConfigModal()
|
||||
}, [currentProvider, hideConfigModal, onConfigUpdated])
|
||||
|
|
@ -83,8 +87,8 @@ const ConfigPopup: FC<PopupProps> = ({
|
|||
hideConfigModal()
|
||||
}, [currentProvider, hideConfigModal, onConfigRemoved])
|
||||
|
||||
const providerAllConfigured = arizeConfig && phoenixConfig && langSmithConfig && langFuseConfig && opikConfig && weaveConfig && aliyunConfig && tencentConfig
|
||||
const providerAllNotConfigured = !arizeConfig && !phoenixConfig && !langSmithConfig && !langFuseConfig && !opikConfig && !weaveConfig && !aliyunConfig && !tencentConfig
|
||||
const providerAllConfigured = arizeConfig && phoenixConfig && langSmithConfig && langFuseConfig && opikConfig && weaveConfig && aliyunConfig && mlflowConfig && databricksConfig && tencentConfig
|
||||
const providerAllNotConfigured = !arizeConfig && !phoenixConfig && !langSmithConfig && !langFuseConfig && !opikConfig && !weaveConfig && !aliyunConfig && !mlflowConfig && !databricksConfig && !tencentConfig
|
||||
|
||||
const switchContent = (
|
||||
<Switch
|
||||
|
|
@ -185,6 +189,32 @@ const ConfigPopup: FC<PopupProps> = ({
|
|||
/>
|
||||
)
|
||||
|
||||
const mlflowPanel = (
|
||||
<ProviderPanel
|
||||
type={TracingProvider.mlflow}
|
||||
readOnly={readOnly}
|
||||
config={mlflowConfig}
|
||||
hasConfigured={!!mlflowConfig}
|
||||
onConfig={handleOnConfig(TracingProvider.mlflow)}
|
||||
isChosen={chosenProvider === TracingProvider.mlflow}
|
||||
onChoose={handleOnChoose(TracingProvider.mlflow)}
|
||||
key="mlflow-provider-panel"
|
||||
/>
|
||||
)
|
||||
|
||||
const databricksPanel = (
|
||||
<ProviderPanel
|
||||
type={TracingProvider.databricks}
|
||||
readOnly={readOnly}
|
||||
config={databricksConfig}
|
||||
hasConfigured={!!databricksConfig}
|
||||
onConfig={handleOnConfig(TracingProvider.databricks)}
|
||||
isChosen={chosenProvider === TracingProvider.databricks}
|
||||
onChoose={handleOnChoose(TracingProvider.databricks)}
|
||||
key="databricks-provider-panel"
|
||||
/>
|
||||
)
|
||||
|
||||
const tencentPanel = (
|
||||
<ProviderPanel
|
||||
type={TracingProvider.tencent}
|
||||
|
|
@ -221,6 +251,12 @@ const ConfigPopup: FC<PopupProps> = ({
|
|||
if (aliyunConfig)
|
||||
configuredPanels.push(aliyunPanel)
|
||||
|
||||
if (mlflowConfig)
|
||||
configuredPanels.push(mlflowPanel)
|
||||
|
||||
if (databricksConfig)
|
||||
configuredPanels.push(databricksPanel)
|
||||
|
||||
if (tencentConfig)
|
||||
configuredPanels.push(tencentPanel)
|
||||
|
||||
|
|
@ -251,6 +287,12 @@ const ConfigPopup: FC<PopupProps> = ({
|
|||
if (!aliyunConfig)
|
||||
notConfiguredPanels.push(aliyunPanel)
|
||||
|
||||
if (!mlflowConfig)
|
||||
notConfiguredPanels.push(mlflowPanel)
|
||||
|
||||
if (!databricksConfig)
|
||||
notConfiguredPanels.push(databricksPanel)
|
||||
|
||||
if (!tencentConfig)
|
||||
notConfiguredPanels.push(tencentPanel)
|
||||
|
||||
|
|
@ -258,6 +300,10 @@ const ConfigPopup: FC<PopupProps> = ({
|
|||
}
|
||||
|
||||
const configuredProviderConfig = () => {
|
||||
if (currentProvider === TracingProvider.mlflow)
|
||||
return mlflowConfig
|
||||
if (currentProvider === TracingProvider.databricks)
|
||||
return databricksConfig
|
||||
if (currentProvider === TracingProvider.arize)
|
||||
return arizeConfig
|
||||
if (currentProvider === TracingProvider.phoenix)
|
||||
|
|
@ -316,6 +362,8 @@ const ConfigPopup: FC<PopupProps> = ({
|
|||
{langfusePanel}
|
||||
{langSmithPanel}
|
||||
{opikPanel}
|
||||
{mlflowPanel}
|
||||
{databricksPanel}
|
||||
{weavePanel}
|
||||
{arizePanel}
|
||||
{phoenixPanel}
|
||||
|
|
|
|||
|
|
@ -8,5 +8,7 @@ export const docURL = {
|
|||
[TracingProvider.opik]: 'https://www.comet.com/docs/opik/tracing/integrations/dify#setup-instructions',
|
||||
[TracingProvider.weave]: 'https://weave-docs.wandb.ai/',
|
||||
[TracingProvider.aliyun]: 'https://help.aliyun.com/zh/arms/tracing-analysis/untitled-document-1750672984680',
|
||||
[TracingProvider.mlflow]: 'https://mlflow.org/docs/latest/genai/',
|
||||
[TracingProvider.databricks]: 'https://docs.databricks.com/aws/en/mlflow3/genai/tracing/',
|
||||
[TracingProvider.tencent]: 'https://cloud.tencent.com/document/product/248/116531',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@ import {
|
|||
import { useTranslation } from 'react-i18next'
|
||||
import { usePathname } from 'next/navigation'
|
||||
import { useBoolean } from 'ahooks'
|
||||
import type { AliyunConfig, ArizeConfig, LangFuseConfig, LangSmithConfig, OpikConfig, PhoenixConfig, TencentConfig, WeaveConfig } from './type'
|
||||
import type { AliyunConfig, ArizeConfig, DatabricksConfig, LangFuseConfig, LangSmithConfig, MLflowConfig, OpikConfig, PhoenixConfig, TencentConfig, WeaveConfig } from './type'
|
||||
import { TracingProvider } from './type'
|
||||
import TracingIcon from './tracing-icon'
|
||||
import ConfigButton from './config-button'
|
||||
import cn from '@/utils/classnames'
|
||||
import { AliyunIcon, ArizeIcon, LangfuseIcon, LangsmithIcon, OpikIcon, PhoenixIcon, TencentIcon, WeaveIcon } from '@/app/components/base/icons/src/public/tracing'
|
||||
import { AliyunIcon, ArizeIcon, DatabricksIcon, LangfuseIcon, LangsmithIcon, MlflowIcon, OpikIcon, PhoenixIcon, TencentIcon, WeaveIcon } from '@/app/components/base/icons/src/public/tracing'
|
||||
import Indicator from '@/app/components/header/indicator'
|
||||
import { fetchTracingConfig as doFetchTracingConfig, fetchTracingStatus, updateTracingStatus } from '@/service/apps'
|
||||
import type { TracingStatus } from '@/models/app'
|
||||
|
|
@ -71,6 +71,8 @@ const Panel: FC = () => {
|
|||
[TracingProvider.opik]: OpikIcon,
|
||||
[TracingProvider.weave]: WeaveIcon,
|
||||
[TracingProvider.aliyun]: AliyunIcon,
|
||||
[TracingProvider.mlflow]: MlflowIcon,
|
||||
[TracingProvider.databricks]: DatabricksIcon,
|
||||
[TracingProvider.tencent]: TencentIcon,
|
||||
}
|
||||
const InUseProviderIcon = inUseTracingProvider ? providerIconMap[inUseTracingProvider] : undefined
|
||||
|
|
@ -82,8 +84,10 @@ const Panel: FC = () => {
|
|||
const [opikConfig, setOpikConfig] = useState<OpikConfig | null>(null)
|
||||
const [weaveConfig, setWeaveConfig] = useState<WeaveConfig | null>(null)
|
||||
const [aliyunConfig, setAliyunConfig] = useState<AliyunConfig | null>(null)
|
||||
const [mlflowConfig, setMLflowConfig] = useState<MLflowConfig | null>(null)
|
||||
const [databricksConfig, setDatabricksConfig] = useState<DatabricksConfig | null>(null)
|
||||
const [tencentConfig, setTencentConfig] = useState<TencentConfig | null>(null)
|
||||
const hasConfiguredTracing = !!(langSmithConfig || langFuseConfig || opikConfig || weaveConfig || arizeConfig || phoenixConfig || aliyunConfig || tencentConfig)
|
||||
const hasConfiguredTracing = !!(langSmithConfig || langFuseConfig || opikConfig || weaveConfig || arizeConfig || phoenixConfig || aliyunConfig || mlflowConfig || databricksConfig || tencentConfig)
|
||||
|
||||
const fetchTracingConfig = async () => {
|
||||
const getArizeConfig = async () => {
|
||||
|
|
@ -121,6 +125,16 @@ const Panel: FC = () => {
|
|||
if (!aliyunHasNotConfig)
|
||||
setAliyunConfig(aliyunConfig as AliyunConfig)
|
||||
}
|
||||
const getMLflowConfig = async () => {
|
||||
const { tracing_config: mlflowConfig, has_not_configured: mlflowHasNotConfig } = await doFetchTracingConfig({ appId, provider: TracingProvider.mlflow })
|
||||
if (!mlflowHasNotConfig)
|
||||
setMLflowConfig(mlflowConfig as MLflowConfig)
|
||||
}
|
||||
const getDatabricksConfig = async () => {
|
||||
const { tracing_config: databricksConfig, has_not_configured: databricksHasNotConfig } = await doFetchTracingConfig({ appId, provider: TracingProvider.databricks })
|
||||
if (!databricksHasNotConfig)
|
||||
setDatabricksConfig(databricksConfig as DatabricksConfig)
|
||||
}
|
||||
const getTencentConfig = async () => {
|
||||
const { tracing_config: tencentConfig, has_not_configured: tencentHasNotConfig } = await doFetchTracingConfig({ appId, provider: TracingProvider.tencent })
|
||||
if (!tencentHasNotConfig)
|
||||
|
|
@ -134,6 +148,8 @@ const Panel: FC = () => {
|
|||
getOpikConfig(),
|
||||
getWeaveConfig(),
|
||||
getAliyunConfig(),
|
||||
getMLflowConfig(),
|
||||
getDatabricksConfig(),
|
||||
getTencentConfig(),
|
||||
])
|
||||
}
|
||||
|
|
@ -174,6 +190,10 @@ const Panel: FC = () => {
|
|||
setWeaveConfig(null)
|
||||
else if (provider === TracingProvider.aliyun)
|
||||
setAliyunConfig(null)
|
||||
else if (provider === TracingProvider.mlflow)
|
||||
setMLflowConfig(null)
|
||||
else if (provider === TracingProvider.databricks)
|
||||
setDatabricksConfig(null)
|
||||
else if (provider === TracingProvider.tencent)
|
||||
setTencentConfig(null)
|
||||
if (provider === inUseTracingProvider) {
|
||||
|
|
@ -221,6 +241,8 @@ const Panel: FC = () => {
|
|||
opikConfig={opikConfig}
|
||||
weaveConfig={weaveConfig}
|
||||
aliyunConfig={aliyunConfig}
|
||||
mlflowConfig={mlflowConfig}
|
||||
databricksConfig={databricksConfig}
|
||||
tencentConfig={tencentConfig}
|
||||
onConfigUpdated={handleTracingConfigUpdated}
|
||||
onConfigRemoved={handleTracingConfigRemoved}
|
||||
|
|
@ -258,6 +280,8 @@ const Panel: FC = () => {
|
|||
opikConfig={opikConfig}
|
||||
weaveConfig={weaveConfig}
|
||||
aliyunConfig={aliyunConfig}
|
||||
mlflowConfig={mlflowConfig}
|
||||
databricksConfig={databricksConfig}
|
||||
tencentConfig={tencentConfig}
|
||||
onConfigUpdated={handleTracingConfigUpdated}
|
||||
onConfigRemoved={handleTracingConfigRemoved}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import React, { useCallback, useState } from 'react'
|
|||
import { useTranslation } from 'react-i18next'
|
||||
import { useBoolean } from 'ahooks'
|
||||
import Field from './field'
|
||||
import type { AliyunConfig, ArizeConfig, LangFuseConfig, LangSmithConfig, OpikConfig, PhoenixConfig, TencentConfig, WeaveConfig } from './type'
|
||||
import type { AliyunConfig, ArizeConfig, DatabricksConfig, LangFuseConfig, LangSmithConfig, MLflowConfig, OpikConfig, PhoenixConfig, TencentConfig, WeaveConfig } from './type'
|
||||
import { TracingProvider } from './type'
|
||||
import { docURL } from './config'
|
||||
import {
|
||||
|
|
@ -22,10 +22,10 @@ import Divider from '@/app/components/base/divider'
|
|||
type Props = {
|
||||
appId: string
|
||||
type: TracingProvider
|
||||
payload?: ArizeConfig | PhoenixConfig | LangSmithConfig | LangFuseConfig | OpikConfig | WeaveConfig | AliyunConfig | TencentConfig | null
|
||||
payload?: ArizeConfig | PhoenixConfig | LangSmithConfig | LangFuseConfig | OpikConfig | WeaveConfig | AliyunConfig | MLflowConfig | DatabricksConfig | TencentConfig | null
|
||||
onRemoved: () => void
|
||||
onCancel: () => void
|
||||
onSaved: (payload: ArizeConfig | PhoenixConfig | LangSmithConfig | LangFuseConfig | OpikConfig | WeaveConfig | AliyunConfig | TencentConfig) => void
|
||||
onSaved: (payload: ArizeConfig | PhoenixConfig | LangSmithConfig | LangFuseConfig | OpikConfig | WeaveConfig | AliyunConfig | MLflowConfig | DatabricksConfig | TencentConfig) => void
|
||||
onChosen: (provider: TracingProvider) => void
|
||||
}
|
||||
|
||||
|
|
@ -77,6 +77,21 @@ const aliyunConfigTemplate = {
|
|||
endpoint: '',
|
||||
}
|
||||
|
||||
const mlflowConfigTemplate = {
|
||||
tracking_uri: '',
|
||||
experiment_id: '',
|
||||
username: '',
|
||||
password: '',
|
||||
}
|
||||
|
||||
const databricksConfigTemplate = {
|
||||
experiment_id: '',
|
||||
host: '',
|
||||
client_id: '',
|
||||
client_secret: '',
|
||||
personal_access_token: '',
|
||||
}
|
||||
|
||||
const tencentConfigTemplate = {
|
||||
token: '',
|
||||
endpoint: '',
|
||||
|
|
@ -96,7 +111,7 @@ const ProviderConfigModal: FC<Props> = ({
|
|||
const isEdit = !!payload
|
||||
const isAdd = !isEdit
|
||||
const [isSaving, setIsSaving] = useState(false)
|
||||
const [config, setConfig] = useState<ArizeConfig | PhoenixConfig | LangSmithConfig | LangFuseConfig | OpikConfig | WeaveConfig | AliyunConfig | TencentConfig>((() => {
|
||||
const [config, setConfig] = useState<ArizeConfig | PhoenixConfig | LangSmithConfig | LangFuseConfig | OpikConfig | WeaveConfig | AliyunConfig | MLflowConfig | DatabricksConfig | TencentConfig>((() => {
|
||||
if (isEdit)
|
||||
return payload
|
||||
|
||||
|
|
@ -118,6 +133,12 @@ const ProviderConfigModal: FC<Props> = ({
|
|||
else if (type === TracingProvider.aliyun)
|
||||
return aliyunConfigTemplate
|
||||
|
||||
else if (type === TracingProvider.mlflow)
|
||||
return mlflowConfigTemplate
|
||||
|
||||
else if (type === TracingProvider.databricks)
|
||||
return databricksConfigTemplate
|
||||
|
||||
else if (type === TracingProvider.tencent)
|
||||
return tencentConfigTemplate
|
||||
|
||||
|
|
@ -211,6 +232,20 @@ const ProviderConfigModal: FC<Props> = ({
|
|||
errorMessage = t('common.errorMsg.fieldRequired', { field: 'Endpoint' })
|
||||
}
|
||||
|
||||
if (type === TracingProvider.mlflow) {
|
||||
const postData = config as MLflowConfig
|
||||
if (!errorMessage && !postData.tracking_uri)
|
||||
errorMessage = t('common.errorMsg.fieldRequired', { field: 'Tracking URI' })
|
||||
}
|
||||
|
||||
if (type === TracingProvider.databricks) {
|
||||
const postData = config as DatabricksConfig
|
||||
if (!errorMessage && !postData.experiment_id)
|
||||
errorMessage = t('common.errorMsg.fieldRequired', { field: 'Experiment ID' })
|
||||
if (!errorMessage && !postData.host)
|
||||
errorMessage = t('common.errorMsg.fieldRequired', { field: 'Host' })
|
||||
}
|
||||
|
||||
if (type === TracingProvider.tencent) {
|
||||
const postData = config as TencentConfig
|
||||
if (!errorMessage && !postData.token)
|
||||
|
|
@ -513,6 +548,81 @@ const ProviderConfigModal: FC<Props> = ({
|
|||
/>
|
||||
</>
|
||||
)}
|
||||
{type === TracingProvider.mlflow && (
|
||||
<>
|
||||
<Field
|
||||
label={t(`${I18N_PREFIX}.trackingUri`)!}
|
||||
labelClassName='!text-sm'
|
||||
value={(config as MLflowConfig).tracking_uri}
|
||||
isRequired
|
||||
onChange={handleConfigChange('tracking_uri')}
|
||||
placeholder={'http://localhost:5000'}
|
||||
/>
|
||||
<Field
|
||||
label={t(`${I18N_PREFIX}.experimentId`)!}
|
||||
labelClassName='!text-sm'
|
||||
isRequired
|
||||
value={(config as MLflowConfig).experiment_id}
|
||||
onChange={handleConfigChange('experiment_id')}
|
||||
placeholder={t(`${I18N_PREFIX}.placeholder`, { key: t(`${I18N_PREFIX}.experimentId`) })!}
|
||||
/>
|
||||
<Field
|
||||
label={t(`${I18N_PREFIX}.username`)!}
|
||||
labelClassName='!text-sm'
|
||||
value={(config as MLflowConfig).username}
|
||||
onChange={handleConfigChange('username')}
|
||||
placeholder={t(`${I18N_PREFIX}.placeholder`, { key: t(`${I18N_PREFIX}.username`) })!}
|
||||
/>
|
||||
<Field
|
||||
label={t(`${I18N_PREFIX}.password`)!}
|
||||
labelClassName='!text-sm'
|
||||
value={(config as MLflowConfig).password}
|
||||
onChange={handleConfigChange('password')}
|
||||
placeholder={t(`${I18N_PREFIX}.placeholder`, { key: t(`${I18N_PREFIX}.password`) })!}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
{type === TracingProvider.databricks && (
|
||||
<>
|
||||
<Field
|
||||
label={t(`${I18N_PREFIX}.experimentId`)!}
|
||||
labelClassName='!text-sm'
|
||||
value={(config as DatabricksConfig).experiment_id}
|
||||
onChange={handleConfigChange('experiment_id')}
|
||||
placeholder={t(`${I18N_PREFIX}.placeholder`, { key: t(`${I18N_PREFIX}.experimentId`) })!}
|
||||
isRequired
|
||||
/>
|
||||
<Field
|
||||
label={t(`${I18N_PREFIX}.databricksHost`)!}
|
||||
labelClassName='!text-sm'
|
||||
value={(config as DatabricksConfig).host}
|
||||
onChange={handleConfigChange('host')}
|
||||
placeholder={t(`${I18N_PREFIX}.placeholder`, { key: t(`${I18N_PREFIX}.databricksHost`) })!}
|
||||
isRequired
|
||||
/>
|
||||
<Field
|
||||
label={t(`${I18N_PREFIX}.clientId`)!}
|
||||
labelClassName='!text-sm'
|
||||
value={(config as DatabricksConfig).client_id}
|
||||
onChange={handleConfigChange('client_id')}
|
||||
placeholder={t(`${I18N_PREFIX}.placeholder`, { key: t(`${I18N_PREFIX}.clientId`) })!}
|
||||
/>
|
||||
<Field
|
||||
label={t(`${I18N_PREFIX}.clientSecret`)!}
|
||||
labelClassName='!text-sm'
|
||||
value={(config as DatabricksConfig).client_secret}
|
||||
onChange={handleConfigChange('client_secret')}
|
||||
placeholder={t(`${I18N_PREFIX}.placeholder`, { key: t(`${I18N_PREFIX}.clientSecret`) })!}
|
||||
/>
|
||||
<Field
|
||||
label={t(`${I18N_PREFIX}.personalAccessToken`)!}
|
||||
labelClassName='!text-sm'
|
||||
value={(config as DatabricksConfig).personal_access_token}
|
||||
onChange={handleConfigChange('personal_access_token')}
|
||||
placeholder={t(`${I18N_PREFIX}.placeholder`, { key: t(`${I18N_PREFIX}.personalAccessToken`) })!}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
<div className='my-8 flex h-8 items-center justify-between'>
|
||||
<a
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import {
|
|||
import { useTranslation } from 'react-i18next'
|
||||
import { TracingProvider } from './type'
|
||||
import cn from '@/utils/classnames'
|
||||
import { AliyunIconBig, ArizeIconBig, LangfuseIconBig, LangsmithIconBig, OpikIconBig, PhoenixIconBig, TencentIconBig, WeaveIconBig } from '@/app/components/base/icons/src/public/tracing'
|
||||
import { AliyunIconBig, ArizeIconBig, DatabricksIconBig, LangfuseIconBig, LangsmithIconBig, MlflowIconBig, OpikIconBig, PhoenixIconBig, TencentIconBig, WeaveIconBig } from '@/app/components/base/icons/src/public/tracing'
|
||||
import { Eye as View } from '@/app/components/base/icons/src/vender/solid/general'
|
||||
|
||||
const I18N_PREFIX = 'app.tracing'
|
||||
|
|
@ -31,6 +31,8 @@ const getIcon = (type: TracingProvider) => {
|
|||
[TracingProvider.opik]: OpikIconBig,
|
||||
[TracingProvider.weave]: WeaveIconBig,
|
||||
[TracingProvider.aliyun]: AliyunIconBig,
|
||||
[TracingProvider.mlflow]: MlflowIconBig,
|
||||
[TracingProvider.databricks]: DatabricksIconBig,
|
||||
[TracingProvider.tencent]: TencentIconBig,
|
||||
})[type]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ export enum TracingProvider {
|
|||
opik = 'opik',
|
||||
weave = 'weave',
|
||||
aliyun = 'aliyun',
|
||||
mlflow = 'mlflow',
|
||||
databricks = 'databricks',
|
||||
tencent = 'tencent',
|
||||
}
|
||||
|
||||
|
|
@ -55,6 +57,21 @@ export type AliyunConfig = {
|
|||
endpoint: string
|
||||
}
|
||||
|
||||
export type MLflowConfig = {
|
||||
tracking_uri: string
|
||||
experiment_id: string
|
||||
username: string
|
||||
password: string
|
||||
}
|
||||
|
||||
export type DatabricksConfig = {
|
||||
experiment_id: string
|
||||
host: string
|
||||
client_id: string
|
||||
client_secret: string
|
||||
personal_access_token: string
|
||||
}
|
||||
|
||||
export type TencentConfig = {
|
||||
token: string
|
||||
endpoint: string
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="150px" height="24px" viewBox="0 0 151 24" version="1.1">
|
||||
<g id="surface1">
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(93.333334%,23.921569%,17.254902%);fill-opacity:1;" d="M 20.964844 9.898438 L 11.097656 15.484375 L 0.53125 9.515625 L 0.0195312 9.792969 L 0.0195312 14.125 L 11.097656 20.367188 L 20.964844 14.804688 L 20.964844 17.097656 L 11.097656 22.683594 L 0.53125 16.714844 L 0.0195312 16.992188 L 0.0195312 17.734375 L 11.097656 23.980469 L 22.152344 17.734375 L 22.152344 13.402344 L 21.644531 13.125 L 11.097656 19.074219 L 1.207031 13.507812 L 1.207031 11.214844 L 11.097656 16.777344 L 22.152344 10.535156 L 22.152344 6.265625 L 21.601562 5.945312 L 11.097656 11.871094 L 1.714844 6.605469 L 11.097656 1.316406 L 18.804688 5.671875 L 19.484375 5.289062 L 19.484375 4.757812 L 11.097656 0.0195312 L 0.0195312 6.265625 L 0.0195312 6.945312 L 11.097656 13.1875 L 20.964844 7.605469 Z M 20.964844 9.898438 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 42.84375 20.433594 L 42.84375 1.359375 L 39.921875 1.359375 L 39.921875 8.496094 C 39.921875 8.601562 39.855469 8.6875 39.75 8.730469 C 39.644531 8.773438 39.539062 8.730469 39.476562 8.664062 C 38.480469 7.496094 36.933594 6.839844 35.242188 6.839844 C 31.617188 6.839844 28.78125 9.898438 28.78125 13.804688 C 28.78125 15.71875 29.4375 17.480469 30.644531 18.773438 C 31.851562 20.070312 33.484375 20.773438 35.242188 20.773438 C 36.914062 20.773438 38.460938 20.070312 39.476562 18.859375 C 39.539062 18.773438 39.667969 18.753906 39.75 18.773438 C 39.855469 18.816406 39.921875 18.902344 39.921875 19.007812 L 39.921875 20.433594 Z M 35.875 18.117188 C 33.546875 18.117188 31.726562 16.226562 31.726562 13.804688 C 31.726562 11.382812 33.546875 9.492188 35.875 9.492188 C 38.207031 9.492188 40.027344 11.382812 40.027344 13.804688 C 40.027344 16.226562 38.207031 18.117188 35.875 18.117188 Z M 35.875 18.117188 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 58.472656 20.433594 L 58.472656 7.15625 L 55.570312 7.15625 L 55.570312 8.496094 C 55.570312 8.601562 55.507812 8.6875 55.402344 8.730469 C 55.296875 8.773438 55.191406 8.730469 55.125 8.644531 C 54.152344 7.476562 52.628906 6.816406 50.890625 6.816406 C 47.269531 6.816406 44.433594 9.875 44.433594 13.785156 C 44.433594 17.691406 47.269531 20.75 50.890625 20.75 C 52.5625 20.75 54.109375 20.050781 55.125 18.816406 C 55.191406 18.734375 55.316406 18.710938 55.402344 18.734375 C 55.507812 18.773438 55.570312 18.859375 55.570312 18.964844 L 55.570312 20.410156 L 58.472656 20.410156 Z M 51.546875 18.117188 C 49.21875 18.117188 47.398438 16.226562 47.398438 13.804688 C 47.398438 11.382812 49.21875 9.492188 51.546875 9.492188 C 53.878906 9.492188 55.699219 11.382812 55.699219 13.804688 C 55.699219 16.226562 53.878906 18.117188 51.546875 18.117188 Z M 51.546875 18.117188 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 83.316406 20.433594 L 83.316406 7.15625 L 80.414062 7.15625 L 80.414062 8.496094 C 80.414062 8.601562 80.351562 8.6875 80.242188 8.730469 C 80.136719 8.773438 80.03125 8.730469 79.96875 8.644531 C 78.996094 7.476562 77.46875 6.816406 75.734375 6.816406 C 72.089844 6.816406 69.273438 9.875 69.273438 13.804688 C 69.273438 17.734375 72.113281 20.773438 75.734375 20.773438 C 77.40625 20.773438 78.953125 20.070312 79.96875 18.839844 C 80.03125 18.753906 80.160156 18.734375 80.242188 18.753906 C 80.351562 18.796875 80.414062 18.882812 80.414062 18.988281 L 80.414062 20.433594 Z M 76.390625 18.117188 C 74.058594 18.117188 72.238281 16.226562 72.238281 13.804688 C 72.238281 11.382812 74.058594 9.492188 76.390625 9.492188 C 78.71875 9.492188 80.539062 11.382812 80.539062 13.804688 C 80.539062 16.226562 78.71875 18.117188 76.390625 18.117188 Z M 76.390625 18.117188 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 88.628906 18.859375 C 88.652344 18.859375 88.695312 18.839844 88.714844 18.839844 C 88.777344 18.839844 88.863281 18.882812 88.90625 18.925781 C 89.902344 20.09375 91.445312 20.75 93.140625 20.75 C 96.761719 20.75 99.601562 17.691406 99.601562 13.785156 C 99.601562 11.871094 98.945312 10.109375 97.738281 8.8125 C 96.53125 7.519531 94.898438 6.816406 93.140625 6.816406 C 91.46875 6.816406 89.921875 7.519531 88.90625 8.730469 C 88.84375 8.8125 88.734375 8.835938 88.628906 8.8125 C 88.523438 8.773438 88.460938 8.6875 88.460938 8.582031 L 88.460938 1.359375 L 85.539062 1.359375 L 85.539062 20.433594 L 88.460938 20.433594 L 88.460938 19.09375 C 88.460938 18.988281 88.523438 18.902344 88.628906 18.859375 Z M 88.332031 13.804688 C 88.332031 11.382812 90.15625 9.492188 92.484375 9.492188 C 94.8125 9.492188 96.636719 11.382812 96.636719 13.804688 C 96.636719 16.226562 94.8125 18.117188 92.484375 18.117188 C 90.15625 18.117188 88.332031 16.207031 88.332031 13.804688 Z M 88.332031 13.804688 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 108.050781 9.875 C 108.324219 9.875 108.582031 9.898438 108.75 9.941406 L 108.75 6.925781 C 108.644531 6.902344 108.453125 6.882812 108.261719 6.882812 C 106.738281 6.882812 105.339844 7.667969 104.597656 8.921875 C 104.535156 9.027344 104.429688 9.070312 104.324219 9.027344 C 104.21875 9.003906 104.132812 8.898438 104.132812 8.792969 L 104.132812 7.15625 L 101.230469 7.15625 L 101.230469 20.453125 L 104.152344 20.453125 L 104.152344 14.589844 C 104.152344 11.679688 105.636719 9.875 108.050781 9.875 Z M 108.050781 9.875 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 110.59375 7.15625 L 113.558594 7.15625 L 113.558594 20.453125 L 110.59375 20.453125 Z M 110.59375 7.15625 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 112.03125 1.378906 C 111.035156 1.378906 110.230469 2.1875 110.230469 3.1875 C 110.230469 4.183594 111.035156 4.992188 112.03125 4.992188 C 113.027344 4.992188 113.832031 4.183594 113.832031 3.1875 C 113.832031 2.1875 113.027344 1.378906 112.03125 1.378906 Z M 112.03125 1.378906 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 122.238281 6.816406 C 118.175781 6.816406 115.230469 9.75 115.230469 13.804688 C 115.230469 15.78125 115.929688 17.542969 117.179688 18.816406 C 118.449219 20.09375 120.226562 20.792969 122.21875 20.792969 C 123.871094 20.792969 125.140625 20.472656 127.554688 18.691406 L 125.882812 16.925781 C 124.695312 17.714844 123.59375 18.09375 122.515625 18.09375 C 120.058594 18.09375 118.214844 16.246094 118.214844 13.804688 C 118.214844 11.363281 120.058594 9.515625 122.515625 9.515625 C 123.679688 9.515625 124.761719 9.898438 125.839844 10.683594 L 127.703125 8.921875 C 125.523438 7.050781 123.554688 6.816406 122.238281 6.816406 Z M 122.238281 6.816406 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 132.703125 14.589844 C 132.746094 14.546875 132.808594 14.527344 132.871094 14.527344 L 132.894531 14.527344 C 132.957031 14.527344 133.019531 14.570312 133.082031 14.613281 L 137.765625 20.433594 L 141.363281 20.433594 L 135.308594 13.082031 C 135.222656 12.976562 135.222656 12.828125 135.328125 12.742188 L 140.898438 7.15625 L 137.320312 7.15625 L 132.511719 12 C 132.449219 12.0625 132.34375 12.085938 132.234375 12.0625 C 132.152344 12.019531 132.089844 11.9375 132.089844 11.832031 L 132.089844 1.378906 L 129.144531 1.378906 L 129.144531 20.453125 L 132.066406 20.453125 L 132.066406 15.269531 C 132.066406 15.207031 132.089844 15.121094 132.152344 15.078125 Z M 132.703125 14.589844 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 146.128906 20.773438 C 148.523438 20.773438 150.957031 19.304688 150.957031 16.523438 C 150.957031 14.699219 149.8125 13.445312 147.484375 12.679688 L 145.894531 12.148438 C 144.816406 11.789062 144.308594 11.277344 144.308594 10.578125 C 144.308594 9.769531 145.027344 9.21875 146.042969 9.21875 C 147.019531 9.21875 147.886719 9.855469 148.4375 10.960938 L 150.789062 9.683594 C 149.917969 7.902344 148.121094 6.796875 146.042969 6.796875 C 143.417969 6.796875 141.511719 8.496094 141.511719 10.8125 C 141.511719 12.660156 142.613281 13.890625 144.878906 14.613281 L 146.511719 15.144531 C 147.652344 15.503906 148.140625 15.972656 148.140625 16.714844 C 148.140625 17.839844 147.101562 18.246094 146.214844 18.246094 C 145.027344 18.246094 143.96875 17.480469 143.460938 16.226562 L 141.066406 17.5 C 141.851562 19.519531 143.777344 20.773438 146.128906 20.773438 Z M 146.128906 20.773438 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 66.605469 20.644531 C 67.535156 20.644531 68.363281 20.558594 68.828125 20.496094 L 68.828125 17.945312 C 68.449219 17.988281 67.769531 18.03125 67.367188 18.03125 C 66.179688 18.03125 65.269531 17.820312 65.269531 15.25 L 65.269531 9.792969 C 65.269531 9.640625 65.375 9.535156 65.523438 9.535156 L 68.382812 9.535156 L 68.382812 7.136719 L 65.523438 7.136719 C 65.375 7.136719 65.269531 7.03125 65.269531 6.882812 L 65.269531 3.058594 L 62.347656 3.058594 L 62.347656 6.902344 C 62.347656 7.050781 62.242188 7.15625 62.09375 7.15625 L 60.0625 7.15625 L 60.0625 9.558594 L 62.09375 9.558594 C 62.242188 9.558594 62.347656 9.664062 62.347656 9.8125 L 62.347656 15.992188 C 62.347656 20.644531 65.441406 20.644531 66.605469 20.644531 Z M 66.605469 20.644531 "/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.4 KiB |
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100px" height="16px" viewBox="0 0 100 16" version="1.1">
|
||||
<g id="surface1">
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(93.333334%,23.921569%,17.254902%);fill-opacity:1;" d="M 13.886719 6.597656 L 7.347656 10.320312 L 0.351562 6.34375 L 0.015625 6.527344 L 0.015625 9.414062 L 7.347656 13.578125 L 13.886719 9.867188 L 13.886719 11.398438 L 7.347656 15.121094 L 0.351562 11.144531 L 0.015625 11.328125 L 0.015625 11.824219 L 7.347656 15.984375 L 14.671875 11.824219 L 14.671875 8.933594 L 14.332031 8.75 L 7.347656 12.714844 L 0.800781 9.003906 L 0.800781 7.476562 L 7.347656 11.1875 L 14.671875 7.023438 L 14.671875 4.175781 L 14.304688 3.964844 L 7.347656 7.914062 L 1.136719 4.402344 L 7.347656 0.878906 L 12.453125 3.78125 L 12.902344 3.527344 L 12.902344 3.171875 L 7.347656 0.015625 L 0.015625 4.175781 L 0.015625 4.628906 L 7.347656 8.792969 L 13.886719 5.070312 Z M 13.886719 6.597656 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 28.375 13.621094 L 28.375 0.90625 L 26.4375 0.90625 L 26.4375 5.664062 C 26.4375 5.734375 26.394531 5.792969 26.324219 5.820312 C 26.253906 5.847656 26.183594 5.820312 26.144531 5.777344 C 25.484375 5 24.460938 4.558594 23.339844 4.558594 C 20.941406 4.558594 19.058594 6.597656 19.058594 9.203125 C 19.058594 10.476562 19.496094 11.652344 20.292969 12.515625 C 21.09375 13.378906 22.175781 13.847656 23.339844 13.847656 C 24.445312 13.847656 25.46875 13.378906 26.144531 12.574219 C 26.183594 12.515625 26.269531 12.503906 26.324219 12.515625 C 26.394531 12.546875 26.4375 12.601562 26.4375 12.671875 L 26.4375 13.621094 Z M 23.757812 12.078125 C 22.214844 12.078125 21.011719 10.816406 21.011719 9.203125 C 21.011719 7.589844 22.214844 6.328125 23.757812 6.328125 C 25.300781 6.328125 26.507812 7.589844 26.507812 9.203125 C 26.507812 10.816406 25.300781 12.078125 23.757812 12.078125 Z M 23.757812 12.078125 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 38.722656 13.621094 L 38.722656 4.773438 L 36.800781 4.773438 L 36.800781 5.664062 C 36.800781 5.734375 36.761719 5.792969 36.691406 5.820312 C 36.621094 5.847656 36.550781 5.820312 36.507812 5.761719 C 35.863281 4.984375 34.851562 4.546875 33.703125 4.546875 C 31.304688 4.546875 29.425781 6.585938 29.425781 9.1875 C 29.425781 11.792969 31.304688 13.832031 33.703125 13.832031 C 34.8125 13.832031 35.835938 13.367188 36.507812 12.546875 C 36.550781 12.488281 36.632812 12.472656 36.691406 12.488281 C 36.761719 12.515625 36.800781 12.574219 36.800781 12.644531 L 36.800781 13.605469 L 38.722656 13.605469 Z M 34.136719 12.078125 C 32.59375 12.078125 31.386719 10.816406 31.386719 9.203125 C 31.386719 7.589844 32.59375 6.328125 34.136719 6.328125 C 35.679688 6.328125 36.886719 7.589844 36.886719 9.203125 C 36.886719 10.816406 35.679688 12.078125 34.136719 12.078125 Z M 34.136719 12.078125 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 55.175781 13.621094 L 55.175781 4.773438 L 53.253906 4.773438 L 53.253906 5.664062 C 53.253906 5.734375 53.210938 5.792969 53.140625 5.820312 C 53.070312 5.847656 53 5.820312 52.960938 5.761719 C 52.3125 4.984375 51.304688 4.546875 50.152344 4.546875 C 47.742188 4.546875 45.875 6.585938 45.875 9.203125 C 45.875 11.824219 47.757812 13.847656 50.152344 13.847656 C 51.261719 13.847656 52.285156 13.378906 52.960938 12.558594 C 53 12.503906 53.085938 12.488281 53.140625 12.503906 C 53.210938 12.53125 53.253906 12.585938 53.253906 12.660156 L 53.253906 13.621094 Z M 50.589844 12.078125 C 49.046875 12.078125 47.839844 10.816406 47.839844 9.203125 C 47.839844 7.589844 49.046875 6.328125 50.589844 6.328125 C 52.132812 6.328125 53.339844 7.589844 53.339844 9.203125 C 53.339844 10.816406 52.132812 12.078125 50.589844 12.078125 Z M 50.589844 12.078125 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 58.695312 12.574219 C 58.710938 12.574219 58.738281 12.558594 58.75 12.558594 C 58.792969 12.558594 58.851562 12.585938 58.878906 12.617188 C 59.539062 13.394531 60.5625 13.832031 61.683594 13.832031 C 64.082031 13.832031 65.960938 11.792969 65.960938 9.1875 C 65.960938 7.914062 65.527344 6.738281 64.726562 5.875 C 63.925781 5.011719 62.847656 4.546875 61.683594 4.546875 C 60.574219 4.546875 59.550781 5.011719 58.878906 5.820312 C 58.835938 5.875 58.765625 5.890625 58.695312 5.875 C 58.625 5.847656 58.582031 5.792969 58.582031 5.71875 L 58.582031 0.90625 L 56.648438 0.90625 L 56.648438 13.621094 L 58.582031 13.621094 L 58.582031 12.730469 C 58.582031 12.660156 58.625 12.601562 58.695312 12.574219 Z M 58.5 9.203125 C 58.5 7.589844 59.707031 6.328125 61.25 6.328125 C 62.792969 6.328125 63.996094 7.589844 63.996094 9.203125 C 63.996094 10.816406 62.792969 12.078125 61.25 12.078125 C 59.707031 12.078125 58.5 10.804688 58.5 9.203125 Z M 58.5 9.203125 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 71.558594 6.585938 C 71.738281 6.585938 71.90625 6.597656 72.019531 6.625 L 72.019531 4.617188 C 71.949219 4.601562 71.824219 4.585938 71.695312 4.585938 C 70.6875 4.585938 69.761719 5.113281 69.269531 5.945312 C 69.230469 6.019531 69.160156 6.046875 69.089844 6.019531 C 69.019531 6.003906 68.960938 5.933594 68.960938 5.863281 L 68.960938 4.773438 L 67.039062 4.773438 L 67.039062 13.636719 L 68.976562 13.636719 L 68.976562 9.726562 C 68.976562 7.789062 69.957031 6.585938 71.558594 6.585938 Z M 71.558594 6.585938 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 73.238281 4.773438 L 75.203125 4.773438 L 75.203125 13.636719 L 73.238281 13.636719 Z M 73.238281 4.773438 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 74.195312 0.921875 C 73.535156 0.921875 73 1.457031 73 2.125 C 73 2.789062 73.535156 3.328125 74.195312 3.328125 C 74.851562 3.328125 75.386719 2.789062 75.386719 2.125 C 75.386719 1.457031 74.851562 0.921875 74.195312 0.921875 Z M 74.195312 0.921875 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 80.953125 4.546875 C 78.261719 4.546875 76.3125 6.5 76.3125 9.203125 C 76.3125 10.519531 76.773438 11.695312 77.601562 12.546875 C 78.441406 13.394531 79.621094 13.863281 80.941406 13.863281 C 82.035156 13.863281 82.875 13.648438 84.472656 12.460938 L 83.367188 11.285156 C 82.582031 11.808594 81.851562 12.0625 81.136719 12.0625 C 79.507812 12.0625 78.289062 10.832031 78.289062 9.203125 C 78.289062 7.574219 79.507812 6.34375 81.136719 6.34375 C 81.90625 6.34375 82.621094 6.597656 83.339844 7.121094 L 84.570312 5.945312 C 83.128906 4.699219 81.824219 4.546875 80.953125 4.546875 Z M 80.953125 4.546875 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 87.882812 9.726562 C 87.910156 9.699219 87.953125 9.683594 87.996094 9.683594 L 88.007812 9.683594 C 88.050781 9.683594 88.09375 9.714844 88.132812 9.742188 L 91.234375 13.621094 L 93.617188 13.621094 L 89.605469 8.722656 C 89.550781 8.652344 89.550781 8.550781 89.621094 8.496094 L 93.308594 4.773438 L 90.941406 4.773438 L 87.757812 8 C 87.714844 8.042969 87.644531 8.054688 87.574219 8.042969 C 87.515625 8.015625 87.476562 7.957031 87.476562 7.886719 L 87.476562 0.921875 L 85.527344 0.921875 L 85.527344 13.636719 L 87.460938 13.636719 L 87.460938 10.179688 C 87.460938 10.136719 87.476562 10.082031 87.515625 10.054688 Z M 87.882812 9.726562 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 96.773438 13.847656 C 98.359375 13.847656 99.972656 12.871094 99.972656 11.015625 C 99.972656 9.796875 99.214844 8.960938 97.671875 8.453125 L 96.621094 8.097656 C 95.90625 7.859375 95.566406 7.519531 95.566406 7.050781 C 95.566406 6.511719 96.042969 6.144531 96.71875 6.144531 C 97.363281 6.144531 97.9375 6.570312 98.304688 7.304688 L 99.859375 6.457031 C 99.285156 5.265625 98.09375 4.53125 96.71875 4.53125 C 94.980469 4.53125 93.714844 5.664062 93.714844 7.207031 C 93.714844 8.4375 94.445312 9.261719 95.945312 9.742188 L 97.027344 10.09375 C 97.785156 10.335938 98.105469 10.648438 98.105469 11.144531 C 98.105469 11.894531 97.417969 12.164062 96.832031 12.164062 C 96.042969 12.164062 95.34375 11.652344 95.007812 10.816406 L 93.421875 11.667969 C 93.941406 13.011719 95.21875 13.847656 96.773438 13.847656 Z M 96.773438 13.847656 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 44.109375 13.761719 C 44.726562 13.761719 45.273438 13.707031 45.582031 13.664062 L 45.582031 11.964844 C 45.328125 11.992188 44.878906 12.019531 44.613281 12.019531 C 43.828125 12.019531 43.226562 11.878906 43.226562 10.167969 L 43.226562 6.527344 C 43.226562 6.429688 43.296875 6.359375 43.394531 6.359375 L 45.289062 6.359375 L 45.289062 4.757812 L 43.394531 4.757812 C 43.296875 4.757812 43.226562 4.6875 43.226562 4.585938 L 43.226562 2.039062 L 41.289062 2.039062 L 41.289062 4.601562 C 41.289062 4.699219 41.21875 4.773438 41.121094 4.773438 L 39.777344 4.773438 L 39.777344 6.371094 L 41.121094 6.371094 C 41.21875 6.371094 41.289062 6.441406 41.289062 6.542969 L 41.289062 10.660156 C 41.289062 13.761719 43.339844 13.761719 44.109375 13.761719 Z M 44.109375 13.761719 "/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.2 KiB |
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="65px" height="24px" viewBox="0 0 65 24" version="1.1">
|
||||
<g id="surface1">
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(20%,20%,20%);fill-opacity:1;" d="M 0 18.617188 L 0 9.300781 L 2.113281 9.300781 L 2.113281 10.480469 C 2.644531 9.523438 3.804688 9.027344 4.851562 9.027344 C 6.070312 9.027344 7.132812 9.582031 7.628906 10.671875 C 8.355469 9.449219 9.4375 9.027344 10.636719 9.027344 C 12.3125 9.027344 13.910156 10.097656 13.910156 12.570312 L 13.910156 18.617188 L 11.78125 18.617188 L 11.78125 12.933594 C 11.78125 11.839844 11.226562 11.019531 9.988281 11.019531 C 8.828125 11.019531 8.066406 11.9375 8.066406 13.085938 L 8.066406 18.617188 L 5.898438 18.617188 L 5.898438 12.933594 C 5.898438 11.859375 5.363281 11.023438 4.109375 11.023438 C 2.929688 11.023438 2.1875 11.90625 2.1875 13.089844 L 2.1875 18.625 Z M 0 18.617188 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(20%,20%,20%);fill-opacity:1;" d="M 16.609375 18.617188 L 16.609375 4.757812 L 18.820312 4.757812 L 18.820312 18.617188 Z M 16.609375 18.617188 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;" d="M 17.933594 23.691406 C 18.429688 23.832031 18.875 23.921875 19.820312 23.921875 C 21.582031 23.921875 23.660156 22.921875 24.207031 20.117188 L 26.464844 8.875 L 29.820312 8.875 L 30.230469 7.003906 L 26.839844 7.003906 L 27.296875 4.769531 C 27.644531 3.035156 28.601562 2.15625 30.132812 2.15625 C 30.53125 2.15625 30.417969 2.191406 30.773438 2.257812 L 31.265625 0.34375 C 30.792969 0.199219 30.367188 0.113281 29.445312 0.113281 C 28.472656 0.101562 27.519531 0.414062 26.746094 1.003906 C 25.886719 1.671875 25.320312 2.65625 25.058594 3.921875 L 24.425781 7.003906 L 21.421875 7.003906 L 21.175781 8.875 L 24.054688 8.875 L 21.980469 19.273438 C 21.753906 20.453125 21.085938 21.863281 19.171875 21.863281 C 18.738281 21.863281 18.898438 21.828125 18.503906 21.765625 Z M 17.933594 23.691406 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;" d="M 31.808594 18.542969 L 29.601562 18.542969 L 32.628906 4.558594 L 34.835938 4.558594 Z M 31.808594 18.542969 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(26.274511%,78.823531%,92.941177%);fill-opacity:1;" d="M 42.820312 9.886719 C 40.894531 8.53125 38.269531 8.796875 36.652344 10.511719 C 35.035156 12.230469 34.910156 14.878906 36.359375 16.742188 L 37.804688 15.675781 C 37.085938 14.777344 36.941406 13.550781 37.429688 12.507812 C 37.917969 11.46875 38.953125 10.800781 40.097656 10.789062 L 40.097656 11.925781 Z M 42.820312 9.886719 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;" d="M 37.339844 17.683594 C 39.265625 19.039062 41.890625 18.773438 43.507812 17.054688 C 45.125 15.339844 45.25 12.691406 43.804688 10.828125 L 42.355469 11.894531 C 43.074219 12.789062 43.21875 14.019531 42.730469 15.0625 C 42.242188 16.101562 41.207031 16.769531 40.0625 16.78125 L 40.0625 15.644531 Z M 37.339844 17.683594 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;" d="M 46.570312 9.296875 L 48.980469 9.296875 L 49.472656 15.664062 L 52.90625 9.296875 L 55.195312 9.328125 L 56.09375 15.664062 L 59.121094 9.296875 L 61.328125 9.328125 L 56.746094 18.625 L 54.539062 18.625 L 53.476562 11.960938 L 49.960938 18.625 L 47.671875 18.625 Z M 46.570312 9.296875 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;" d="M 62.65625 9.460938 L 62.199219 9.460938 L 62.199219 9.300781 L 63.300781 9.300781 L 63.300781 9.464844 L 62.84375 9.464844 L 62.84375 10.808594 L 62.65625 10.808594 Z M 62.65625 9.460938 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;" d="M 63.578125 9.300781 L 63.804688 9.300781 L 64.09375 10.105469 C 64.128906 10.207031 64.164062 10.3125 64.199219 10.417969 L 64.210938 10.417969 C 64.246094 10.3125 64.277344 10.207031 64.3125 10.105469 L 64.597656 9.300781 L 64.824219 9.300781 L 64.824219 10.808594 L 64.648438 10.808594 L 64.648438 9.976562 C 64.648438 9.847656 64.664062 9.664062 64.671875 9.53125 L 64.664062 9.53125 L 64.546875 9.875 L 64.265625 10.65625 L 64.140625 10.65625 L 63.855469 9.875 L 63.742188 9.53125 L 63.730469 9.53125 C 63.742188 9.664062 63.757812 9.847656 63.757812 9.980469 L 63.757812 10.8125 L 63.582031 10.8125 Z M 63.578125 9.300781 "/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="44px" height="16px" viewBox="0 0 43 16" version="1.1">
|
||||
<g id="surface1">
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(20%,20%,20%);fill-opacity:1;" d="M 0 12.414062 L 0 6.199219 L 1.398438 6.199219 L 1.398438 6.988281 C 1.75 6.351562 2.519531 6.019531 3.210938 6.019531 C 4.015625 6.019531 4.71875 6.386719 5.046875 7.117188 C 5.527344 6.300781 6.242188 6.019531 7.035156 6.019531 C 8.144531 6.019531 9.203125 6.734375 9.203125 8.378906 L 9.203125 12.414062 L 7.792969 12.414062 L 7.792969 8.621094 C 7.792969 7.894531 7.425781 7.34375 6.609375 7.34375 C 5.839844 7.34375 5.335938 7.957031 5.335938 8.722656 L 5.335938 12.410156 L 3.902344 12.410156 L 3.902344 8.621094 C 3.902344 7.90625 3.546875 7.347656 2.71875 7.347656 C 1.9375 7.347656 1.445312 7.9375 1.445312 8.726562 L 1.445312 12.414062 Z M 0 12.414062 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(20%,20%,20%);fill-opacity:1;" d="M 10.988281 12.414062 L 10.988281 3.171875 L 12.449219 3.171875 L 12.449219 12.414062 Z M 10.988281 12.414062 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;" d="M 11.863281 15.792969 C 12.191406 15.886719 12.488281 15.949219 13.113281 15.949219 C 14.277344 15.949219 15.652344 15.28125 16.015625 13.414062 L 17.507812 5.917969 L 19.726562 5.917969 L 20 4.667969 L 17.753906 4.667969 L 18.058594 3.179688 C 18.289062 2.023438 18.917969 1.4375 19.933594 1.4375 C 20.195312 1.4375 20.121094 1.460938 20.359375 1.503906 L 20.683594 0.226562 C 20.371094 0.132812 20.089844 0.078125 19.480469 0.078125 C 18.835938 0.0664062 18.207031 0.277344 17.691406 0.667969 C 17.125 1.117188 16.75 1.769531 16.578125 2.613281 L 16.15625 4.667969 L 14.171875 4.667969 L 14.007812 5.917969 L 15.910156 5.917969 L 14.539062 12.847656 C 14.390625 13.632812 13.949219 14.574219 12.683594 14.574219 C 12.398438 14.574219 12.5 14.550781 12.242188 14.507812 Z M 11.863281 15.792969 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;" d="M 21.042969 12.363281 L 19.582031 12.363281 L 21.585938 3.039062 L 23.042969 3.039062 Z M 21.042969 12.363281 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(26.274511%,78.823531%,92.941177%);fill-opacity:1;" d="M 28.328125 6.589844 C 27.054688 5.6875 25.316406 5.863281 24.246094 7.007812 C 23.175781 8.152344 23.09375 9.917969 24.050781 11.160156 L 25.007812 10.449219 C 24.535156 9.851562 24.4375 9.03125 24.761719 8.339844 C 25.082031 7.644531 25.769531 7.199219 26.527344 7.191406 L 26.527344 7.949219 Z M 28.328125 6.589844 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;" d="M 24.703125 11.789062 C 25.976562 12.691406 27.710938 12.515625 28.78125 11.371094 C 29.851562 10.226562 29.933594 8.460938 28.976562 7.21875 L 28.019531 7.929688 C 28.496094 8.527344 28.59375 9.347656 28.269531 10.039062 C 27.945312 10.734375 27.261719 11.179688 26.503906 11.1875 L 26.503906 10.429688 Z M 24.703125 11.789062 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;" d="M 30.808594 6.195312 L 32.402344 6.195312 L 32.726562 10.441406 L 35 6.195312 L 36.511719 6.21875 L 37.109375 10.441406 L 39.109375 6.195312 L 40.570312 6.21875 L 37.539062 12.417969 L 36.082031 12.417969 L 35.378906 7.972656 L 33.050781 12.417969 L 31.535156 12.417969 Z M 30.808594 6.195312 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;" d="M 41.449219 6.308594 L 41.148438 6.308594 L 41.148438 6.199219 L 41.875 6.199219 L 41.875 6.308594 L 41.574219 6.308594 L 41.574219 7.207031 L 41.449219 7.207031 Z M 41.449219 6.308594 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;" d="M 42.058594 6.199219 L 42.210938 6.199219 L 42.398438 6.738281 C 42.425781 6.804688 42.445312 6.875 42.46875 6.945312 L 42.476562 6.945312 C 42.5 6.875 42.523438 6.804688 42.546875 6.738281 L 42.734375 6.199219 L 42.886719 6.199219 L 42.886719 7.207031 L 42.765625 7.207031 L 42.765625 6.652344 C 42.765625 6.5625 42.777344 6.441406 42.78125 6.351562 L 42.777344 6.351562 L 42.703125 6.582031 L 42.515625 7.105469 L 42.433594 7.105469 L 42.242188 6.582031 L 42.167969 6.355469 L 42.160156 6.355469 C 42.167969 6.445312 42.175781 6.566406 42.175781 6.652344 L 42.175781 7.207031 L 42.0625 7.207031 Z M 42.058594 6.199219 "/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
|
|
@ -0,0 +1,135 @@
|
|||
{
|
||||
"icon": {
|
||||
"type": "element",
|
||||
"isRootNode": true,
|
||||
"name": "svg",
|
||||
"attributes": {
|
||||
"xmlns": "http://www.w3.org/2000/svg",
|
||||
"xmlns:xlink": "http://www.w3.org/1999/xlink",
|
||||
"width": "100px",
|
||||
"height": "16px",
|
||||
"viewBox": "0 0 100 16",
|
||||
"version": "1.1"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"type": "element",
|
||||
"name": "g",
|
||||
"attributes": {
|
||||
"id": "surface1"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(93.333334%,23.921569%,17.254902%);fill-opacity:1;",
|
||||
"d": "M 13.886719 6.597656 L 7.347656 10.320312 L 0.351562 6.34375 L 0.015625 6.527344 L 0.015625 9.414062 L 7.347656 13.578125 L 13.886719 9.867188 L 13.886719 11.398438 L 7.347656 15.121094 L 0.351562 11.144531 L 0.015625 11.328125 L 0.015625 11.824219 L 7.347656 15.984375 L 14.671875 11.824219 L 14.671875 8.933594 L 14.332031 8.75 L 7.347656 12.714844 L 0.800781 9.003906 L 0.800781 7.476562 L 7.347656 11.1875 L 14.671875 7.023438 L 14.671875 4.175781 L 14.304688 3.964844 L 7.347656 7.914062 L 1.136719 4.402344 L 7.347656 0.878906 L 12.453125 3.78125 L 12.902344 3.527344 L 12.902344 3.171875 L 7.347656 0.015625 L 0.015625 4.175781 L 0.015625 4.628906 L 7.347656 8.792969 L 13.886719 5.070312 Z M 13.886719 6.597656 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 28.375 13.621094 L 28.375 0.90625 L 26.4375 0.90625 L 26.4375 5.664062 C 26.4375 5.734375 26.394531 5.792969 26.324219 5.820312 C 26.253906 5.847656 26.183594 5.820312 26.144531 5.777344 C 25.484375 5 24.460938 4.558594 23.339844 4.558594 C 20.941406 4.558594 19.058594 6.597656 19.058594 9.203125 C 19.058594 10.476562 19.496094 11.652344 20.292969 12.515625 C 21.09375 13.378906 22.175781 13.847656 23.339844 13.847656 C 24.445312 13.847656 25.46875 13.378906 26.144531 12.574219 C 26.183594 12.515625 26.269531 12.503906 26.324219 12.515625 C 26.394531 12.546875 26.4375 12.601562 26.4375 12.671875 L 26.4375 13.621094 Z M 23.757812 12.078125 C 22.214844 12.078125 21.011719 10.816406 21.011719 9.203125 C 21.011719 7.589844 22.214844 6.328125 23.757812 6.328125 C 25.300781 6.328125 26.507812 7.589844 26.507812 9.203125 C 26.507812 10.816406 25.300781 12.078125 23.757812 12.078125 Z M 23.757812 12.078125 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 38.722656 13.621094 L 38.722656 4.773438 L 36.800781 4.773438 L 36.800781 5.664062 C 36.800781 5.734375 36.761719 5.792969 36.691406 5.820312 C 36.621094 5.847656 36.550781 5.820312 36.507812 5.761719 C 35.863281 4.984375 34.851562 4.546875 33.703125 4.546875 C 31.304688 4.546875 29.425781 6.585938 29.425781 9.1875 C 29.425781 11.792969 31.304688 13.832031 33.703125 13.832031 C 34.8125 13.832031 35.835938 13.367188 36.507812 12.546875 C 36.550781 12.488281 36.632812 12.472656 36.691406 12.488281 C 36.761719 12.515625 36.800781 12.574219 36.800781 12.644531 L 36.800781 13.605469 L 38.722656 13.605469 Z M 34.136719 12.078125 C 32.59375 12.078125 31.386719 10.816406 31.386719 9.203125 C 31.386719 7.589844 32.59375 6.328125 34.136719 6.328125 C 35.679688 6.328125 36.886719 7.589844 36.886719 9.203125 C 36.886719 10.816406 35.679688 12.078125 34.136719 12.078125 Z M 34.136719 12.078125 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 55.175781 13.621094 L 55.175781 4.773438 L 53.253906 4.773438 L 53.253906 5.664062 C 53.253906 5.734375 53.210938 5.792969 53.140625 5.820312 C 53.070312 5.847656 53 5.820312 52.960938 5.761719 C 52.3125 4.984375 51.304688 4.546875 50.152344 4.546875 C 47.742188 4.546875 45.875 6.585938 45.875 9.203125 C 45.875 11.824219 47.757812 13.847656 50.152344 13.847656 C 51.261719 13.847656 52.285156 13.378906 52.960938 12.558594 C 53 12.503906 53.085938 12.488281 53.140625 12.503906 C 53.210938 12.53125 53.253906 12.585938 53.253906 12.660156 L 53.253906 13.621094 Z M 50.589844 12.078125 C 49.046875 12.078125 47.839844 10.816406 47.839844 9.203125 C 47.839844 7.589844 49.046875 6.328125 50.589844 6.328125 C 52.132812 6.328125 53.339844 7.589844 53.339844 9.203125 C 53.339844 10.816406 52.132812 12.078125 50.589844 12.078125 Z M 50.589844 12.078125 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 58.695312 12.574219 C 58.710938 12.574219 58.738281 12.558594 58.75 12.558594 C 58.792969 12.558594 58.851562 12.585938 58.878906 12.617188 C 59.539062 13.394531 60.5625 13.832031 61.683594 13.832031 C 64.082031 13.832031 65.960938 11.792969 65.960938 9.1875 C 65.960938 7.914062 65.527344 6.738281 64.726562 5.875 C 63.925781 5.011719 62.847656 4.546875 61.683594 4.546875 C 60.574219 4.546875 59.550781 5.011719 58.878906 5.820312 C 58.835938 5.875 58.765625 5.890625 58.695312 5.875 C 58.625 5.847656 58.582031 5.792969 58.582031 5.71875 L 58.582031 0.90625 L 56.648438 0.90625 L 56.648438 13.621094 L 58.582031 13.621094 L 58.582031 12.730469 C 58.582031 12.660156 58.625 12.601562 58.695312 12.574219 Z M 58.5 9.203125 C 58.5 7.589844 59.707031 6.328125 61.25 6.328125 C 62.792969 6.328125 63.996094 7.589844 63.996094 9.203125 C 63.996094 10.816406 62.792969 12.078125 61.25 12.078125 C 59.707031 12.078125 58.5 10.804688 58.5 9.203125 Z M 58.5 9.203125 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 71.558594 6.585938 C 71.738281 6.585938 71.90625 6.597656 72.019531 6.625 L 72.019531 4.617188 C 71.949219 4.601562 71.824219 4.585938 71.695312 4.585938 C 70.6875 4.585938 69.761719 5.113281 69.269531 5.945312 C 69.230469 6.019531 69.160156 6.046875 69.089844 6.019531 C 69.019531 6.003906 68.960938 5.933594 68.960938 5.863281 L 68.960938 4.773438 L 67.039062 4.773438 L 67.039062 13.636719 L 68.976562 13.636719 L 68.976562 9.726562 C 68.976562 7.789062 69.957031 6.585938 71.558594 6.585938 Z M 71.558594 6.585938 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 73.238281 4.773438 L 75.203125 4.773438 L 75.203125 13.636719 L 73.238281 13.636719 Z M 73.238281 4.773438 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 74.195312 0.921875 C 73.535156 0.921875 73 1.457031 73 2.125 C 73 2.789062 73.535156 3.328125 74.195312 3.328125 C 74.851562 3.328125 75.386719 2.789062 75.386719 2.125 C 75.386719 1.457031 74.851562 0.921875 74.195312 0.921875 Z M 74.195312 0.921875 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 80.953125 4.546875 C 78.261719 4.546875 76.3125 6.5 76.3125 9.203125 C 76.3125 10.519531 76.773438 11.695312 77.601562 12.546875 C 78.441406 13.394531 79.621094 13.863281 80.941406 13.863281 C 82.035156 13.863281 82.875 13.648438 84.472656 12.460938 L 83.367188 11.285156 C 82.582031 11.808594 81.851562 12.0625 81.136719 12.0625 C 79.507812 12.0625 78.289062 10.832031 78.289062 9.203125 C 78.289062 7.574219 79.507812 6.34375 81.136719 6.34375 C 81.90625 6.34375 82.621094 6.597656 83.339844 7.121094 L 84.570312 5.945312 C 83.128906 4.699219 81.824219 4.546875 80.953125 4.546875 Z M 80.953125 4.546875 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 87.882812 9.726562 C 87.910156 9.699219 87.953125 9.683594 87.996094 9.683594 L 88.007812 9.683594 C 88.050781 9.683594 88.09375 9.714844 88.132812 9.742188 L 91.234375 13.621094 L 93.617188 13.621094 L 89.605469 8.722656 C 89.550781 8.652344 89.550781 8.550781 89.621094 8.496094 L 93.308594 4.773438 L 90.941406 4.773438 L 87.757812 8 C 87.714844 8.042969 87.644531 8.054688 87.574219 8.042969 C 87.515625 8.015625 87.476562 7.957031 87.476562 7.886719 L 87.476562 0.921875 L 85.527344 0.921875 L 85.527344 13.636719 L 87.460938 13.636719 L 87.460938 10.179688 C 87.460938 10.136719 87.476562 10.082031 87.515625 10.054688 Z M 87.882812 9.726562 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 96.773438 13.847656 C 98.359375 13.847656 99.972656 12.871094 99.972656 11.015625 C 99.972656 9.796875 99.214844 8.960938 97.671875 8.453125 L 96.621094 8.097656 C 95.90625 7.859375 95.566406 7.519531 95.566406 7.050781 C 95.566406 6.511719 96.042969 6.144531 96.71875 6.144531 C 97.363281 6.144531 97.9375 6.570312 98.304688 7.304688 L 99.859375 6.457031 C 99.285156 5.265625 98.09375 4.53125 96.71875 4.53125 C 94.980469 4.53125 93.714844 5.664062 93.714844 7.207031 C 93.714844 8.4375 94.445312 9.261719 95.945312 9.742188 L 97.027344 10.09375 C 97.785156 10.335938 98.105469 10.648438 98.105469 11.144531 C 98.105469 11.894531 97.417969 12.164062 96.832031 12.164062 C 96.042969 12.164062 95.34375 11.652344 95.007812 10.816406 L 93.421875 11.667969 C 93.941406 13.011719 95.21875 13.847656 96.773438 13.847656 Z M 96.773438 13.847656 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 44.109375 13.761719 C 44.726562 13.761719 45.273438 13.707031 45.582031 13.664062 L 45.582031 11.964844 C 45.328125 11.992188 44.878906 12.019531 44.613281 12.019531 C 43.828125 12.019531 43.226562 11.878906 43.226562 10.167969 L 43.226562 6.527344 C 43.226562 6.429688 43.296875 6.359375 43.394531 6.359375 L 45.289062 6.359375 L 45.289062 4.757812 L 43.394531 4.757812 C 43.296875 4.757812 43.226562 4.6875 43.226562 4.585938 L 43.226562 2.039062 L 41.289062 2.039062 L 41.289062 4.601562 C 41.289062 4.699219 41.21875 4.773438 41.121094 4.773438 L 39.777344 4.773438 L 39.777344 6.371094 L 41.121094 6.371094 C 41.21875 6.371094 41.289062 6.441406 41.289062 6.542969 L 41.289062 10.660156 C 41.289062 13.761719 43.339844 13.761719 44.109375 13.761719 Z M 44.109375 13.761719 "
|
||||
},
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"name": "DatabricksIcon"
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './DatabricksIcon.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'DatabricksIcon'
|
||||
|
||||
export default Icon
|
||||
|
|
@ -0,0 +1,135 @@
|
|||
{
|
||||
"icon": {
|
||||
"type": "element",
|
||||
"isRootNode": true,
|
||||
"name": "svg",
|
||||
"attributes": {
|
||||
"xmlns": "http://www.w3.org/2000/svg",
|
||||
"xmlns:xlink": "http://www.w3.org/1999/xlink",
|
||||
"width": "150px",
|
||||
"height": "24px",
|
||||
"viewBox": "0 0 151 24",
|
||||
"version": "1.1"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"type": "element",
|
||||
"name": "g",
|
||||
"attributes": {
|
||||
"id": "surface1"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(93.333334%,23.921569%,17.254902%);fill-opacity:1;",
|
||||
"d": "M 20.964844 9.898438 L 11.097656 15.484375 L 0.53125 9.515625 L 0.0195312 9.792969 L 0.0195312 14.125 L 11.097656 20.367188 L 20.964844 14.804688 L 20.964844 17.097656 L 11.097656 22.683594 L 0.53125 16.714844 L 0.0195312 16.992188 L 0.0195312 17.734375 L 11.097656 23.980469 L 22.152344 17.734375 L 22.152344 13.402344 L 21.644531 13.125 L 11.097656 19.074219 L 1.207031 13.507812 L 1.207031 11.214844 L 11.097656 16.777344 L 22.152344 10.535156 L 22.152344 6.265625 L 21.601562 5.945312 L 11.097656 11.871094 L 1.714844 6.605469 L 11.097656 1.316406 L 18.804688 5.671875 L 19.484375 5.289062 L 19.484375 4.757812 L 11.097656 0.0195312 L 0.0195312 6.265625 L 0.0195312 6.945312 L 11.097656 13.1875 L 20.964844 7.605469 Z M 20.964844 9.898438 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 42.84375 20.433594 L 42.84375 1.359375 L 39.921875 1.359375 L 39.921875 8.496094 C 39.921875 8.601562 39.855469 8.6875 39.75 8.730469 C 39.644531 8.773438 39.539062 8.730469 39.476562 8.664062 C 38.480469 7.496094 36.933594 6.839844 35.242188 6.839844 C 31.617188 6.839844 28.78125 9.898438 28.78125 13.804688 C 28.78125 15.71875 29.4375 17.480469 30.644531 18.773438 C 31.851562 20.070312 33.484375 20.773438 35.242188 20.773438 C 36.914062 20.773438 38.460938 20.070312 39.476562 18.859375 C 39.539062 18.773438 39.667969 18.753906 39.75 18.773438 C 39.855469 18.816406 39.921875 18.902344 39.921875 19.007812 L 39.921875 20.433594 Z M 35.875 18.117188 C 33.546875 18.117188 31.726562 16.226562 31.726562 13.804688 C 31.726562 11.382812 33.546875 9.492188 35.875 9.492188 C 38.207031 9.492188 40.027344 11.382812 40.027344 13.804688 C 40.027344 16.226562 38.207031 18.117188 35.875 18.117188 Z M 35.875 18.117188 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 58.472656 20.433594 L 58.472656 7.15625 L 55.570312 7.15625 L 55.570312 8.496094 C 55.570312 8.601562 55.507812 8.6875 55.402344 8.730469 C 55.296875 8.773438 55.191406 8.730469 55.125 8.644531 C 54.152344 7.476562 52.628906 6.816406 50.890625 6.816406 C 47.269531 6.816406 44.433594 9.875 44.433594 13.785156 C 44.433594 17.691406 47.269531 20.75 50.890625 20.75 C 52.5625 20.75 54.109375 20.050781 55.125 18.816406 C 55.191406 18.734375 55.316406 18.710938 55.402344 18.734375 C 55.507812 18.773438 55.570312 18.859375 55.570312 18.964844 L 55.570312 20.410156 L 58.472656 20.410156 Z M 51.546875 18.117188 C 49.21875 18.117188 47.398438 16.226562 47.398438 13.804688 C 47.398438 11.382812 49.21875 9.492188 51.546875 9.492188 C 53.878906 9.492188 55.699219 11.382812 55.699219 13.804688 C 55.699219 16.226562 53.878906 18.117188 51.546875 18.117188 Z M 51.546875 18.117188 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 83.316406 20.433594 L 83.316406 7.15625 L 80.414062 7.15625 L 80.414062 8.496094 C 80.414062 8.601562 80.351562 8.6875 80.242188 8.730469 C 80.136719 8.773438 80.03125 8.730469 79.96875 8.644531 C 78.996094 7.476562 77.46875 6.816406 75.734375 6.816406 C 72.089844 6.816406 69.273438 9.875 69.273438 13.804688 C 69.273438 17.734375 72.113281 20.773438 75.734375 20.773438 C 77.40625 20.773438 78.953125 20.070312 79.96875 18.839844 C 80.03125 18.753906 80.160156 18.734375 80.242188 18.753906 C 80.351562 18.796875 80.414062 18.882812 80.414062 18.988281 L 80.414062 20.433594 Z M 76.390625 18.117188 C 74.058594 18.117188 72.238281 16.226562 72.238281 13.804688 C 72.238281 11.382812 74.058594 9.492188 76.390625 9.492188 C 78.71875 9.492188 80.539062 11.382812 80.539062 13.804688 C 80.539062 16.226562 78.71875 18.117188 76.390625 18.117188 Z M 76.390625 18.117188 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 88.628906 18.859375 C 88.652344 18.859375 88.695312 18.839844 88.714844 18.839844 C 88.777344 18.839844 88.863281 18.882812 88.90625 18.925781 C 89.902344 20.09375 91.445312 20.75 93.140625 20.75 C 96.761719 20.75 99.601562 17.691406 99.601562 13.785156 C 99.601562 11.871094 98.945312 10.109375 97.738281 8.8125 C 96.53125 7.519531 94.898438 6.816406 93.140625 6.816406 C 91.46875 6.816406 89.921875 7.519531 88.90625 8.730469 C 88.84375 8.8125 88.734375 8.835938 88.628906 8.8125 C 88.523438 8.773438 88.460938 8.6875 88.460938 8.582031 L 88.460938 1.359375 L 85.539062 1.359375 L 85.539062 20.433594 L 88.460938 20.433594 L 88.460938 19.09375 C 88.460938 18.988281 88.523438 18.902344 88.628906 18.859375 Z M 88.332031 13.804688 C 88.332031 11.382812 90.15625 9.492188 92.484375 9.492188 C 94.8125 9.492188 96.636719 11.382812 96.636719 13.804688 C 96.636719 16.226562 94.8125 18.117188 92.484375 18.117188 C 90.15625 18.117188 88.332031 16.207031 88.332031 13.804688 Z M 88.332031 13.804688 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 108.050781 9.875 C 108.324219 9.875 108.582031 9.898438 108.75 9.941406 L 108.75 6.925781 C 108.644531 6.902344 108.453125 6.882812 108.261719 6.882812 C 106.738281 6.882812 105.339844 7.667969 104.597656 8.921875 C 104.535156 9.027344 104.429688 9.070312 104.324219 9.027344 C 104.21875 9.003906 104.132812 8.898438 104.132812 8.792969 L 104.132812 7.15625 L 101.230469 7.15625 L 101.230469 20.453125 L 104.152344 20.453125 L 104.152344 14.589844 C 104.152344 11.679688 105.636719 9.875 108.050781 9.875 Z M 108.050781 9.875 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 110.59375 7.15625 L 113.558594 7.15625 L 113.558594 20.453125 L 110.59375 20.453125 Z M 110.59375 7.15625 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 112.03125 1.378906 C 111.035156 1.378906 110.230469 2.1875 110.230469 3.1875 C 110.230469 4.183594 111.035156 4.992188 112.03125 4.992188 C 113.027344 4.992188 113.832031 4.183594 113.832031 3.1875 C 113.832031 2.1875 113.027344 1.378906 112.03125 1.378906 Z M 112.03125 1.378906 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 122.238281 6.816406 C 118.175781 6.816406 115.230469 9.75 115.230469 13.804688 C 115.230469 15.78125 115.929688 17.542969 117.179688 18.816406 C 118.449219 20.09375 120.226562 20.792969 122.21875 20.792969 C 123.871094 20.792969 125.140625 20.472656 127.554688 18.691406 L 125.882812 16.925781 C 124.695312 17.714844 123.59375 18.09375 122.515625 18.09375 C 120.058594 18.09375 118.214844 16.246094 118.214844 13.804688 C 118.214844 11.363281 120.058594 9.515625 122.515625 9.515625 C 123.679688 9.515625 124.761719 9.898438 125.839844 10.683594 L 127.703125 8.921875 C 125.523438 7.050781 123.554688 6.816406 122.238281 6.816406 Z M 122.238281 6.816406 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 132.703125 14.589844 C 132.746094 14.546875 132.808594 14.527344 132.871094 14.527344 L 132.894531 14.527344 C 132.957031 14.527344 133.019531 14.570312 133.082031 14.613281 L 137.765625 20.433594 L 141.363281 20.433594 L 135.308594 13.082031 C 135.222656 12.976562 135.222656 12.828125 135.328125 12.742188 L 140.898438 7.15625 L 137.320312 7.15625 L 132.511719 12 C 132.449219 12.0625 132.34375 12.085938 132.234375 12.0625 C 132.152344 12.019531 132.089844 11.9375 132.089844 11.832031 L 132.089844 1.378906 L 129.144531 1.378906 L 129.144531 20.453125 L 132.066406 20.453125 L 132.066406 15.269531 C 132.066406 15.207031 132.089844 15.121094 132.152344 15.078125 Z M 132.703125 14.589844 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 146.128906 20.773438 C 148.523438 20.773438 150.957031 19.304688 150.957031 16.523438 C 150.957031 14.699219 149.8125 13.445312 147.484375 12.679688 L 145.894531 12.148438 C 144.816406 11.789062 144.308594 11.277344 144.308594 10.578125 C 144.308594 9.769531 145.027344 9.21875 146.042969 9.21875 C 147.019531 9.21875 147.886719 9.855469 148.4375 10.960938 L 150.789062 9.683594 C 149.917969 7.902344 148.121094 6.796875 146.042969 6.796875 C 143.417969 6.796875 141.511719 8.496094 141.511719 10.8125 C 141.511719 12.660156 142.613281 13.890625 144.878906 14.613281 L 146.511719 15.144531 C 147.652344 15.503906 148.140625 15.972656 148.140625 16.714844 C 148.140625 17.839844 147.101562 18.246094 146.214844 18.246094 C 145.027344 18.246094 143.96875 17.480469 143.460938 16.226562 L 141.066406 17.5 C 141.851562 19.519531 143.777344 20.773438 146.128906 20.773438 Z M 146.128906 20.773438 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;",
|
||||
"d": "M 66.605469 20.644531 C 67.535156 20.644531 68.363281 20.558594 68.828125 20.496094 L 68.828125 17.945312 C 68.449219 17.988281 67.769531 18.03125 67.367188 18.03125 C 66.179688 18.03125 65.269531 17.820312 65.269531 15.25 L 65.269531 9.792969 C 65.269531 9.640625 65.375 9.535156 65.523438 9.535156 L 68.382812 9.535156 L 68.382812 7.136719 L 65.523438 7.136719 C 65.375 7.136719 65.269531 7.03125 65.269531 6.882812 L 65.269531 3.058594 L 62.347656 3.058594 L 62.347656 6.902344 C 62.347656 7.050781 62.242188 7.15625 62.09375 7.15625 L 60.0625 7.15625 L 60.0625 9.558594 L 62.09375 9.558594 C 62.242188 9.558594 62.347656 9.664062 62.347656 9.8125 L 62.347656 15.992188 C 62.347656 20.644531 65.441406 20.644531 66.605469 20.644531 Z M 66.605469 20.644531 "
|
||||
},
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"name": "DatabricksIconBig"
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './DatabricksIconBig.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'DatabricksIconBig'
|
||||
|
||||
export default Icon
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"icon": {
|
||||
"type": "element",
|
||||
"isRootNode": true,
|
||||
"name": "svg",
|
||||
"attributes": {
|
||||
"xmlns": "http://www.w3.org/2000/svg",
|
||||
"xmlns:xlink": "http://www.w3.org/1999/xlink",
|
||||
"width": "44px",
|
||||
"height": "16px",
|
||||
"viewBox": "0 0 43 16",
|
||||
"version": "1.1"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"type": "element",
|
||||
"name": "g",
|
||||
"attributes": {
|
||||
"id": "surface1"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(20%,20%,20%);fill-opacity:1;",
|
||||
"d": "M 0 12.414062 L 0 6.199219 L 1.398438 6.199219 L 1.398438 6.988281 C 1.75 6.351562 2.519531 6.019531 3.210938 6.019531 C 4.015625 6.019531 4.71875 6.386719 5.046875 7.117188 C 5.527344 6.300781 6.242188 6.019531 7.035156 6.019531 C 8.144531 6.019531 9.203125 6.734375 9.203125 8.378906 L 9.203125 12.414062 L 7.792969 12.414062 L 7.792969 8.621094 C 7.792969 7.894531 7.425781 7.34375 6.609375 7.34375 C 5.839844 7.34375 5.335938 7.957031 5.335938 8.722656 L 5.335938 12.410156 L 3.902344 12.410156 L 3.902344 8.621094 C 3.902344 7.90625 3.546875 7.347656 2.71875 7.347656 C 1.9375 7.347656 1.445312 7.9375 1.445312 8.726562 L 1.445312 12.414062 Z M 0 12.414062 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(20%,20%,20%);fill-opacity:1;",
|
||||
"d": "M 10.988281 12.414062 L 10.988281 3.171875 L 12.449219 3.171875 L 12.449219 12.414062 Z M 10.988281 12.414062 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;",
|
||||
"d": "M 11.863281 15.792969 C 12.191406 15.886719 12.488281 15.949219 13.113281 15.949219 C 14.277344 15.949219 15.652344 15.28125 16.015625 13.414062 L 17.507812 5.917969 L 19.726562 5.917969 L 20 4.667969 L 17.753906 4.667969 L 18.058594 3.179688 C 18.289062 2.023438 18.917969 1.4375 19.933594 1.4375 C 20.195312 1.4375 20.121094 1.460938 20.359375 1.503906 L 20.683594 0.226562 C 20.371094 0.132812 20.089844 0.078125 19.480469 0.078125 C 18.835938 0.0664062 18.207031 0.277344 17.691406 0.667969 C 17.125 1.117188 16.75 1.769531 16.578125 2.613281 L 16.15625 4.667969 L 14.171875 4.667969 L 14.007812 5.917969 L 15.910156 5.917969 L 14.539062 12.847656 C 14.390625 13.632812 13.949219 14.574219 12.683594 14.574219 C 12.398438 14.574219 12.5 14.550781 12.242188 14.507812 Z M 11.863281 15.792969 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;",
|
||||
"d": "M 21.042969 12.363281 L 19.582031 12.363281 L 21.585938 3.039062 L 23.042969 3.039062 Z M 21.042969 12.363281 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(26.274511%,78.823531%,92.941177%);fill-opacity:1;",
|
||||
"d": "M 28.328125 6.589844 C 27.054688 5.6875 25.316406 5.863281 24.246094 7.007812 C 23.175781 8.152344 23.09375 9.917969 24.050781 11.160156 L 25.007812 10.449219 C 24.535156 9.851562 24.4375 9.03125 24.761719 8.339844 C 25.082031 7.644531 25.769531 7.199219 26.527344 7.191406 L 26.527344 7.949219 Z M 28.328125 6.589844 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;",
|
||||
"d": "M 24.703125 11.789062 C 25.976562 12.691406 27.710938 12.515625 28.78125 11.371094 C 29.851562 10.226562 29.933594 8.460938 28.976562 7.21875 L 28.019531 7.929688 C 28.496094 8.527344 28.59375 9.347656 28.269531 10.039062 C 27.945312 10.734375 27.261719 11.179688 26.503906 11.1875 L 26.503906 10.429688 Z M 24.703125 11.789062 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;",
|
||||
"d": "M 30.808594 6.195312 L 32.402344 6.195312 L 32.726562 10.441406 L 35 6.195312 L 36.511719 6.21875 L 37.109375 10.441406 L 39.109375 6.195312 L 40.570312 6.21875 L 37.539062 12.417969 L 36.082031 12.417969 L 35.378906 7.972656 L 33.050781 12.417969 L 31.535156 12.417969 Z M 30.808594 6.195312 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;",
|
||||
"d": "M 41.449219 6.308594 L 41.148438 6.308594 L 41.148438 6.199219 L 41.875 6.199219 L 41.875 6.308594 L 41.574219 6.308594 L 41.574219 7.207031 L 41.449219 7.207031 Z M 41.449219 6.308594 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;",
|
||||
"d": "M 42.058594 6.199219 L 42.210938 6.199219 L 42.398438 6.738281 C 42.425781 6.804688 42.445312 6.875 42.46875 6.945312 L 42.476562 6.945312 C 42.5 6.875 42.523438 6.804688 42.546875 6.738281 L 42.734375 6.199219 L 42.886719 6.199219 L 42.886719 7.207031 L 42.765625 7.207031 L 42.765625 6.652344 C 42.765625 6.5625 42.777344 6.441406 42.78125 6.351562 L 42.777344 6.351562 L 42.703125 6.582031 L 42.515625 7.105469 L 42.433594 7.105469 L 42.242188 6.582031 L 42.167969 6.355469 L 42.160156 6.355469 C 42.167969 6.445312 42.175781 6.566406 42.175781 6.652344 L 42.175781 7.207031 L 42.0625 7.207031 Z M 42.058594 6.199219 "
|
||||
},
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"name": "MlflowIcon"
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './MlflowIcon.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'MlflowIcon'
|
||||
|
||||
export default Icon
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"icon": {
|
||||
"type": "element",
|
||||
"isRootNode": true,
|
||||
"name": "svg",
|
||||
"attributes": {
|
||||
"xmlns": "http://www.w3.org/2000/svg",
|
||||
"xmlns:xlink": "http://www.w3.org/1999/xlink",
|
||||
"width": "65px",
|
||||
"height": "24px",
|
||||
"viewBox": "0 0 65 24",
|
||||
"version": "1.1"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"type": "element",
|
||||
"name": "g",
|
||||
"attributes": {
|
||||
"id": "surface1"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(20%,20%,20%);fill-opacity:1;",
|
||||
"d": "M 0 18.617188 L 0 9.300781 L 2.113281 9.300781 L 2.113281 10.480469 C 2.644531 9.523438 3.804688 9.027344 4.851562 9.027344 C 6.070312 9.027344 7.132812 9.582031 7.628906 10.671875 C 8.355469 9.449219 9.4375 9.027344 10.636719 9.027344 C 12.3125 9.027344 13.910156 10.097656 13.910156 12.570312 L 13.910156 18.617188 L 11.78125 18.617188 L 11.78125 12.933594 C 11.78125 11.839844 11.226562 11.019531 9.988281 11.019531 C 8.828125 11.019531 8.066406 11.9375 8.066406 13.085938 L 8.066406 18.617188 L 5.898438 18.617188 L 5.898438 12.933594 C 5.898438 11.859375 5.363281 11.023438 4.109375 11.023438 C 2.929688 11.023438 2.1875 11.90625 2.1875 13.089844 L 2.1875 18.625 Z M 0 18.617188 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(20%,20%,20%);fill-opacity:1;",
|
||||
"d": "M 16.609375 18.617188 L 16.609375 4.757812 L 18.820312 4.757812 L 18.820312 18.617188 Z M 16.609375 18.617188 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;",
|
||||
"d": "M 17.933594 23.691406 C 18.429688 23.832031 18.875 23.921875 19.820312 23.921875 C 21.582031 23.921875 23.660156 22.921875 24.207031 20.117188 L 26.464844 8.875 L 29.820312 8.875 L 30.230469 7.003906 L 26.839844 7.003906 L 27.296875 4.769531 C 27.644531 3.035156 28.601562 2.15625 30.132812 2.15625 C 30.53125 2.15625 30.417969 2.191406 30.773438 2.257812 L 31.265625 0.34375 C 30.792969 0.199219 30.367188 0.113281 29.445312 0.113281 C 28.472656 0.101562 27.519531 0.414062 26.746094 1.003906 C 25.886719 1.671875 25.320312 2.65625 25.058594 3.921875 L 24.425781 7.003906 L 21.421875 7.003906 L 21.175781 8.875 L 24.054688 8.875 L 21.980469 19.273438 C 21.753906 20.453125 21.085938 21.863281 19.171875 21.863281 C 18.738281 21.863281 18.898438 21.828125 18.503906 21.765625 Z M 17.933594 23.691406 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;",
|
||||
"d": "M 31.808594 18.542969 L 29.601562 18.542969 L 32.628906 4.558594 L 34.835938 4.558594 Z M 31.808594 18.542969 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(26.274511%,78.823531%,92.941177%);fill-opacity:1;",
|
||||
"d": "M 42.820312 9.886719 C 40.894531 8.53125 38.269531 8.796875 36.652344 10.511719 C 35.035156 12.230469 34.910156 14.878906 36.359375 16.742188 L 37.804688 15.675781 C 37.085938 14.777344 36.941406 13.550781 37.429688 12.507812 C 37.917969 11.46875 38.953125 10.800781 40.097656 10.789062 L 40.097656 11.925781 Z M 42.820312 9.886719 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;",
|
||||
"d": "M 37.339844 17.683594 C 39.265625 19.039062 41.890625 18.773438 43.507812 17.054688 C 45.125 15.339844 45.25 12.691406 43.804688 10.828125 L 42.355469 11.894531 C 43.074219 12.789062 43.21875 14.019531 42.730469 15.0625 C 42.242188 16.101562 41.207031 16.769531 40.0625 16.78125 L 40.0625 15.644531 Z M 37.339844 17.683594 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;",
|
||||
"d": "M 46.570312 9.296875 L 48.980469 9.296875 L 49.472656 15.664062 L 52.90625 9.296875 L 55.195312 9.328125 L 56.09375 15.664062 L 59.121094 9.296875 L 61.328125 9.328125 L 56.746094 18.625 L 54.539062 18.625 L 53.476562 11.960938 L 49.960938 18.625 L 47.671875 18.625 Z M 46.570312 9.296875 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;",
|
||||
"d": "M 62.65625 9.460938 L 62.199219 9.460938 L 62.199219 9.300781 L 63.300781 9.300781 L 63.300781 9.464844 L 62.84375 9.464844 L 62.84375 10.808594 L 62.65625 10.808594 Z M 62.65625 9.460938 "
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"type": "element",
|
||||
"name": "path",
|
||||
"attributes": {
|
||||
"style": " stroke:none;fill-rule:nonzero;fill:rgb(0.392157%,58.039218%,88.627452%);fill-opacity:1;",
|
||||
"d": "M 63.578125 9.300781 L 63.804688 9.300781 L 64.09375 10.105469 C 64.128906 10.207031 64.164062 10.3125 64.199219 10.417969 L 64.210938 10.417969 C 64.246094 10.3125 64.277344 10.207031 64.3125 10.105469 L 64.597656 9.300781 L 64.824219 9.300781 L 64.824219 10.808594 L 64.648438 10.808594 L 64.648438 9.976562 C 64.648438 9.847656 64.664062 9.664062 64.671875 9.53125 L 64.664062 9.53125 L 64.546875 9.875 L 64.265625 10.65625 L 64.140625 10.65625 L 63.855469 9.875 L 63.742188 9.53125 L 63.730469 9.53125 C 63.742188 9.664062 63.757812 9.847656 63.757812 9.980469 L 63.757812 10.8125 L 63.582031 10.8125 Z M 63.578125 9.300781 "
|
||||
},
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"name": "MlflowIconBig"
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
// GENERATE BY script
|
||||
// DON NOT EDIT IT MANUALLY
|
||||
|
||||
import * as React from 'react'
|
||||
import data from './MlflowIconBig.json'
|
||||
import IconBase from '@/app/components/base/icons/IconBase'
|
||||
import type { IconData } from '@/app/components/base/icons/IconBase'
|
||||
|
||||
const Icon = (
|
||||
{
|
||||
ref,
|
||||
...props
|
||||
}: React.SVGProps<SVGSVGElement> & {
|
||||
ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
|
||||
},
|
||||
) => <IconBase {...props} ref={ref} data={data as IconData} />
|
||||
|
||||
Icon.displayName = 'MlflowIconBig'
|
||||
|
||||
export default Icon
|
||||
|
|
@ -2,10 +2,14 @@ export { default as AliyunIconBig } from './AliyunIconBig'
|
|||
export { default as AliyunIcon } from './AliyunIcon'
|
||||
export { default as ArizeIconBig } from './ArizeIconBig'
|
||||
export { default as ArizeIcon } from './ArizeIcon'
|
||||
export { default as DatabricksIconBig } from './DatabricksIconBig'
|
||||
export { default as DatabricksIcon } from './DatabricksIcon'
|
||||
export { default as LangfuseIconBig } from './LangfuseIconBig'
|
||||
export { default as LangfuseIcon } from './LangfuseIcon'
|
||||
export { default as LangsmithIconBig } from './LangsmithIconBig'
|
||||
export { default as LangsmithIcon } from './LangsmithIcon'
|
||||
export { default as MlflowIconBig } from './MlflowIconBig'
|
||||
export { default as MlflowIcon } from './MlflowIcon'
|
||||
export { default as OpikIconBig } from './OpikIconBig'
|
||||
export { default as OpikIcon } from './OpikIcon'
|
||||
export { default as TencentIconBig } from './TencentIconBig'
|
||||
|
|
|
|||
|
|
@ -160,6 +160,14 @@ const translation = {
|
|||
title: 'Cloud-Monitor',
|
||||
description: 'Die vollständig verwaltete und wartungsfreie Observability-Plattform von Alibaba Cloud ermöglicht eine sofortige Überwachung, Verfolgung und Bewertung von Dify-Anwendungen.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'Open-Source-LLMOps-Plattform mit Experiment-Tracking, Observability und Evaluierungen für die sichere Entwicklung von AI/LLM-Anwendungen.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks bietet vollständig verwaltetes MLflow mit starker Governance und Sicherheit für die Speicherung von Trace-Daten.',
|
||||
},
|
||||
tencent: {
|
||||
title: 'Tencent APM',
|
||||
description: 'Tencent Application Performance Monitoring bietet umfassendes Tracing und multidimensionale Analyse für LLM-Anwendungen.',
|
||||
|
|
|
|||
|
|
@ -183,6 +183,14 @@ const translation = {
|
|||
title: 'Cloud Monitor',
|
||||
description: 'The fully-managed and maintenance-free observability platform provided by Alibaba Cloud, enables out-of-the-box monitoring, tracing, and evaluation of Dify applications.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'MLflow is an open-source platform for experiment management, evaluation, and monitoring of LLM applications.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks offers fully-managed MLflow with strong governance and security for storing trace data.',
|
||||
},
|
||||
tencent: {
|
||||
title: 'Tencent APM',
|
||||
description: 'Tencent Application Performance Monitoring provides comprehensive tracing and multi-dimensional analysis for LLM applications.',
|
||||
|
|
@ -192,11 +200,19 @@ const translation = {
|
|||
title: 'Config ',
|
||||
placeholder: 'Enter your {{key}}',
|
||||
project: 'Project',
|
||||
trackingUri: 'Tracking URI',
|
||||
experimentId: 'Experiment ID',
|
||||
username: 'Username',
|
||||
password: 'Password',
|
||||
publicKey: 'Public Key',
|
||||
secretKey: 'Secret Key',
|
||||
viewDocsLink: 'View {{key}} docs',
|
||||
removeConfirmTitle: 'Remove {{key}} configuration?',
|
||||
removeConfirmContent: 'The current configuration is in use, removing it will turn off the Tracing feature.',
|
||||
clientId: 'OAuth Client ID',
|
||||
clientSecret: 'OAuth Client Secret',
|
||||
personalAccessToken: 'Personal Access Token (legacy)',
|
||||
databricksHost: 'Databricks Workspace URL',
|
||||
},
|
||||
},
|
||||
appSelector: {
|
||||
|
|
|
|||
|
|
@ -163,6 +163,14 @@ const translation = {
|
|||
title: 'Monitor de Nubes',
|
||||
description: 'La plataforma de observabilidad totalmente gestionada y sin mantenimiento proporcionada por Alibaba Cloud, permite la monitorización, trazado y evaluación de aplicaciones Dify de manera inmediata.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'Plataforma LLMOps de código abierto para seguimiento de experimentos, observabilidad y evaluación, para construir aplicaciones de IA/LLM con confianza.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks ofrece MLflow completamente gestionado con fuerte gobernanza y seguridad para almacenar datos de trazabilidad.',
|
||||
},
|
||||
tencent: {
|
||||
title: 'Tencent APM',
|
||||
description: 'Tencent Application Performance Monitoring proporciona rastreo integral y análisis multidimensional para aplicaciones LLM.',
|
||||
|
|
|
|||
|
|
@ -171,6 +171,14 @@ const translation = {
|
|||
title: 'نظارت بر ابر',
|
||||
description: 'پلتفرم مشاهدهپذیری کاملاً مدیریتشده و بدون نیاز به نگهداری که توسط Alibaba Cloud ارائه شده، امکان نظارت، ردیابی و ارزیابی برنامههای Dify را بهصورت آماده و با تنظیمات اولیه فراهم میکند.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'پلتفرم LLMOps متنباز برای ردیابی آزمایشها، مشاهدهپذیری و ارزیابی، برای ساخت برنامههای AI/LLM با اطمینان.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks MLflow کاملاً مدیریتشده با حکمرانی و امنیت قوی برای ذخیرهسازی دادههای ردیابی ارائه میدهد.',
|
||||
},
|
||||
tencent: {
|
||||
title: 'تنست ایپیام',
|
||||
description: 'نظارت بر عملکرد برنامههای Tencent تحلیلهای جامع و ردیابی چندبعدی برای برنامههای LLM ارائه میدهد.',
|
||||
|
|
|
|||
|
|
@ -163,6 +163,14 @@ const translation = {
|
|||
title: 'Surveillance Cloud',
|
||||
description: 'La plateforme d\'observabilité entièrement gérée et sans maintenance fournie par Alibaba Cloud permet une surveillance, un traçage et une évaluation prêts à l\'emploi des applications Dify.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'Plateforme LLMOps open source pour le suivi d\'expériences, l\'observabilité et l\'évaluation, pour créer des applications IA/LLM en toute confiance.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks propose MLflow entièrement géré avec une gouvernance et une sécurité robustes pour stocker les données de traçabilité.',
|
||||
},
|
||||
tencent: {
|
||||
title: 'Tencent APM',
|
||||
description: 'Tencent Application Performance Monitoring fournit une traçabilité complète et une analyse multidimensionnelle pour les applications LLM.',
|
||||
|
|
|
|||
|
|
@ -163,6 +163,14 @@ const translation = {
|
|||
title: 'क्लाउड मॉनिटर',
|
||||
description: 'अलीबाबा क्लाउड द्वारा प्रदान की गई पूरी तरह से प्रबंधित और रखरखाव-मुक्त अवलोकन प्लेटफ़ॉर्म, Dify अनुप्रयोगों की स्वचालित निगरानी, ट्रेसिंग और मूल्यांकन का सक्षम बनाता है।',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'प्रयोग ट्रैकिंग, अवलोकनीयता और मूल्यांकन के लिए ओपन-सोर्स LLMOps प्लेटफ़ॉर्म, विश्वास के साथ AI/LLM ऐप्स बनाने के लिए।',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks मजबूत शासन और सुरक्षा के साथ पूरी तरह से प्रबंधित MLflow प्रदान करता है, ट्रेस डेटा संग्रहीत करने के लिए।',
|
||||
},
|
||||
tencent: {
|
||||
title: 'टेनसेंट एपीएम',
|
||||
description: 'Tencent एप्लिकेशन परफॉर्मेंस मॉनिटरिंग LLM एप्लिकेशन के लिए व्यापक ट्रेसिंग और बहु-आयामी विश्लेषण प्रदान करता है।',
|
||||
|
|
|
|||
|
|
@ -169,6 +169,14 @@ const translation = {
|
|||
title: 'Monitoraggio Cloud',
|
||||
description: 'La piattaforma di osservabilità completamente gestita e senza manutenzione fornita da Alibaba Cloud consente il monitoraggio, il tracciamento e la valutazione delle applicazioni Dify fin da subito.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'Piattaforma LLMOps open source per il tracciamento degli esperimenti, l\'osservabilità e la valutazione, per costruire app AI/LLM con sicurezza.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks offre MLflow completamente gestito con forte governance e sicurezza per memorizzare i dati di tracciamento.',
|
||||
},
|
||||
tencent: {
|
||||
title: 'Tencent APM',
|
||||
description: 'Tencent Application Performance Monitoring fornisce tracciamento completo e analisi multidimensionale per le applicazioni LLM.',
|
||||
|
|
|
|||
|
|
@ -158,14 +158,22 @@ const translation = {
|
|||
},
|
||||
inUse: '使用中',
|
||||
configProvider: {
|
||||
title: '配置 ',
|
||||
title: '設定 ',
|
||||
placeholder: '{{key}}を入力してください',
|
||||
project: 'プロジェクト',
|
||||
trackingUri: 'トラッキング URI',
|
||||
experimentId: '実験 ID',
|
||||
username: 'ユーザー名',
|
||||
password: 'パスワード',
|
||||
publicKey: '公開キー',
|
||||
secretKey: '秘密キー',
|
||||
viewDocsLink: '{{key}}に関するドキュメントを見る',
|
||||
removeConfirmTitle: '{{key}}の設定を削除しますか?',
|
||||
removeConfirmContent: '現在の設定は使用中です。これを削除すると、トレース機能が無効になります。',
|
||||
clientId: 'OAuthクライアントID',
|
||||
clientSecret: 'OAuthクライアントシークレット',
|
||||
personalAccessToken: '(非推奨)アクセストークン',
|
||||
databricksHost: 'DatabricksワークスペースのURL',
|
||||
},
|
||||
weave: {
|
||||
title: '織る',
|
||||
|
|
@ -175,6 +183,14 @@ const translation = {
|
|||
title: 'クラウドモニター',
|
||||
description: 'Alibaba Cloud が提供する完全管理型でメンテナンスフリーの可観測性プラットフォームは、Dify アプリケーションの即時監視、トレース、評価を可能にします。',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'MLflowはLLMアプリケーションの実験管理・評価・監視を行うためのオープンソースプラットフォームです。Difyアプリの実行をトレースし、デバッグや改善に役立てることができます。',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'DatabricksはフルマネージドのMLflowサービスを提供し、本番環境のトレースデータを強力なガバナンスとセキュリティの元で保存することができます。',
|
||||
},
|
||||
tencent: {
|
||||
title: 'テンセントAPM',
|
||||
description: 'Tencent アプリケーションパフォーマンスモニタリングは、LLM アプリケーションに対して包括的なトレーシングと多次元分析を提供します。',
|
||||
|
|
|
|||
|
|
@ -178,6 +178,14 @@ const translation = {
|
|||
title: '클라우드 모니터',
|
||||
description: '알리바바 클라우드에서 제공하는 완전 관리형 및 유지보수가 필요 없는 가시성 플랫폼은 Dify 애플리케이션의 모니터링, 추적 및 평가를 즉시 사용할 수 있도록 지원합니다.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: '실험 추적, 관찰 가능성 및 평가를 위한 오픈 소스 LLMOps 플랫폼으로 AI/LLM 앱을 자신있게 구축합니다.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks는 강력한 거버넌스와 보안을 갖춘 완전 관리형 MLflow를 제공하여 트레이스 데이터 저장을 지원합니다.',
|
||||
},
|
||||
tencent: {
|
||||
title: '텐센트 APM',
|
||||
description: '텐센트 애플리케이션 성능 모니터링은 LLM 애플리케이션에 대한 포괄적인 추적 및 다차원 분석을 제공합니다.',
|
||||
|
|
|
|||
|
|
@ -164,6 +164,14 @@ const translation = {
|
|||
title: 'Monitor Chmury',
|
||||
description: 'W pełni zarządzana i wolna od konserwacji platforma obserwowalności oferowana przez Alibaba Cloud umożliwia gotowe monitorowanie, śledzenie i oceny aplikacji Dify.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'Platforma LLMOps open source do śledzenia eksperymentów, obserwowalności i oceny, aby tworzyć aplikacje AI/LLM z pewnością.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks oferuje w pełni zarządzany MLflow z silną kontrolą i bezpieczeństwem do przechowywania danych śledzenia.',
|
||||
},
|
||||
tencent: {
|
||||
title: 'Tencent APM',
|
||||
description: 'Tencent Application Performance Monitoring zapewnia kompleksowe śledzenie i wielowymiarową analizę dla aplikacji LLM.',
|
||||
|
|
|
|||
|
|
@ -163,6 +163,14 @@ const translation = {
|
|||
title: 'Monitoramento em Nuvem',
|
||||
description: 'A plataforma de observabilidade totalmente gerenciada e sem manutenção fornecida pela Alibaba Cloud, permite monitoramento, rastreamento e avaliação prontos para uso de aplicações Dify.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'Plataforma LLMOps de código aberto para rastreamento de experimentos, observabilidade e avaliação, para construir aplicações de IA/LLM com confiança.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks oferece MLflow totalmente gerenciado com forte governança e segurança para armazenar dados de rastreamento.',
|
||||
},
|
||||
tencent: {
|
||||
title: 'Tencent APM',
|
||||
description: 'O Monitoramento de Desempenho de Aplicações da Tencent fornece rastreamento abrangente e análise multidimensional para aplicações LLM.',
|
||||
|
|
|
|||
|
|
@ -163,6 +163,14 @@ const translation = {
|
|||
description: 'Platforma de observabilitate SaaS oferită de Alibaba Cloud permite monitorizarea, urmărirea și evaluarea aplicațiilor Dify din cutie.',
|
||||
title: 'Monitorizarea Cloud',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'Platformă LLMOps open source pentru urmărirea experimentelor, observabilitate și evaluare, pentru a construi aplicații AI/LLM cu încredere.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks oferă MLflow complet gestionat cu o puternică guvernanță și securitate pentru stocarea datelor de urmărire.',
|
||||
},
|
||||
tencent: {
|
||||
title: 'Tencent APM',
|
||||
description: 'Monitorizarea Performanței Aplicațiilor Tencent oferă trasabilitate cuprinzătoare și analiză multidimensională pentru aplicațiile LLM.',
|
||||
|
|
|
|||
|
|
@ -171,6 +171,14 @@ const translation = {
|
|||
title: 'Облачный монитор',
|
||||
description: 'Полностью управляемая и не требующая обслуживания платформа наблюдения, предоставляемая Alibaba Cloud, обеспечивает мониторинг, трассировку и оценку приложений Dify из коробки.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'Платформа LLMOps с открытым исходным кодом для отслеживания экспериментов, наблюдаемости и оценки, для создания приложений AI/LLM с уверенностью.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks предлагает полностью управляемый MLflow с сильным управлением и безопасностью для хранения данных трассировки.',
|
||||
},
|
||||
tencent: {
|
||||
title: 'Tencent APM',
|
||||
description: 'Мониторинг производительности приложений Tencent предоставляет всестороннее отслеживание и многомерный анализ для приложений LLM.',
|
||||
|
|
|
|||
|
|
@ -176,6 +176,14 @@ const translation = {
|
|||
title: 'Oblačni nadzor',
|
||||
description: 'Popolnoma upravljana in brez vzdrževanja platforma za opazovanje, ki jo zagotavlja Alibaba Cloud, omogoča takojšnje spremljanje, sledenje in ocenjevanje aplikacij Dify.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'Odprtokodna platforma LLMOps za sledenje eksperimentom, opazljivost in ocenjevanje, za gradnjo aplikacij AI/LLM z zaupanjem.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks ponuja popolnoma upravljan MLflow z močnim upravljanjem in varnostjo za shranjevanje podatkov sledenja.',
|
||||
},
|
||||
tencent: {
|
||||
description: 'Tencent Application Performance Monitoring zagotavlja celovito sledenje in večdimenzionalno analizo za aplikacije LLM.',
|
||||
title: 'Tencent APM',
|
||||
|
|
|
|||
|
|
@ -172,6 +172,14 @@ const translation = {
|
|||
title: 'การตรวจสอบคลาวด์',
|
||||
description: 'แพลตฟอร์มการสังเกตการณ์ที่จัดการโดย Alibaba Cloud ซึ่งไม่ต้องดูแลและบำรุงรักษา ช่วยให้สามารถติดตาม ตรวจสอบ และประเมินแอปพลิเคชัน Dify ได้ทันที',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'แพลตฟอร์ม LLMOps โอเพนซอร์สสำหรับการติดตามการทดลอง การสังเกตการณ์ และการประเมินผล เพื่อสร้างแอป AI/LLM ด้วยความมั่นใจ',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks ให้บริการ MLflow ที่จัดการแบบเต็มรูปแบบพร้อมการกำกับดูแลและความปลอดภัยที่แข็งแกร่งสำหรับการจัดเก็บข้อมูลการติดตาม',
|
||||
},
|
||||
tencent: {
|
||||
title: 'Tencent APM',
|
||||
description: 'การติดตามประสิทธิภาพแอปพลิเคชันของ Tencent มอบการตรวจสอบแบบครบวงจรและการวิเคราะห์หลายมิติสำหรับแอป LLM',
|
||||
|
|
|
|||
|
|
@ -167,6 +167,14 @@ const translation = {
|
|||
title: 'Bulut İzleyici',
|
||||
description: 'Alibaba Cloud tarafından sağlanan tamamen yönetilen ve bakım gerektirmeyen gözlemleme platformu, Dify uygulamalarının kutudan çıkar çıkmaz izlenmesi, takip edilmesi ve değerlendirilmesine olanak tanır.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'Deney takibi, gözlemlenebilirlik ve değerlendirme için açık kaynaklı LLMOps platformu, AI/LLM uygulamalarını güvenle oluşturmak için.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks, iz veri depolama için güçlü yönetişim ve güvenlik ile tamamen yönetilen MLflow sunar.',
|
||||
},
|
||||
tencent: {
|
||||
title: 'Tencent APM',
|
||||
description: 'Tencent Uygulama Performans İzleme, LLM uygulamaları için kapsamlı izleme ve çok boyutlu analiz sağlar.',
|
||||
|
|
|
|||
|
|
@ -163,6 +163,14 @@ const translation = {
|
|||
title: 'Моніторинг Хмари',
|
||||
description: 'Повністю керовані та без обслуговування платформи спостереження, надані Alibaba Cloud, дозволяють миттєвий моніторинг, трасування та оцінку застосувань Dify.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'Платформа LLMOps з відкритим кодом для відстеження експериментів, спостережуваності та оцінки, для створення додатків AI/LLM з впевненістю.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks пропонує повністю керований MLflow з сильною управлінням та безпекою для зберігання даних трасування.',
|
||||
},
|
||||
tencent: {
|
||||
title: 'Tencent APM',
|
||||
description: 'Сервіс моніторингу продуктивності додатків Tencent забезпечує комплексне трасування та багатовимірний аналіз додатків LLM.',
|
||||
|
|
|
|||
|
|
@ -163,6 +163,14 @@ const translation = {
|
|||
title: 'Giám sát Đám mây',
|
||||
description: 'Nền tảng quan sát được quản lý hoàn toàn và không cần bảo trì do Alibaba Cloud cung cấp, cho phép giám sát, theo dõi và đánh giá các ứng dụng Dify ngay lập tức.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'Nền tảng LLMOps mã nguồn mở cho theo dõi thử nghiệm, khả năng quan sát và đánh giá, để xây dựng ứng dụng AI/LLM với sự tự tin.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks cung cấp MLflow được quản lý hoàn toàn với quản trị mạnh mẽ và bảo mật để lưu trữ dữ liệu theo dõi.',
|
||||
},
|
||||
tencent: {
|
||||
title: 'Tencent APM',
|
||||
description: 'Giám sát hiệu suất ứng dụng của Tencent cung cấp khả năng theo dõi toàn diện và phân tích đa chiều cho các ứng dụng LLM.',
|
||||
|
|
|
|||
|
|
@ -192,6 +192,14 @@ const translation = {
|
|||
title: '云监控',
|
||||
description: '阿里云提供的全托管免运维可观测平台,一键开启Dify应用的监控追踪和评估',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: '开源LLMOps平台,提供实验跟踪、可观测性和评估功能,帮助您自信地构建AI/LLM应用。',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks提供完全托管的MLflow,具有强大的治理和安全功能,用于存储跟踪数据。',
|
||||
},
|
||||
tencent: {
|
||||
title: '腾讯云 APM',
|
||||
description: '腾讯云应用性能监控,提供 LLM 应用全链路追踪和多维分析',
|
||||
|
|
|
|||
|
|
@ -162,6 +162,14 @@ const translation = {
|
|||
title: '雲端監控',
|
||||
description: '阿里雲提供的完全管理且無需維護的可觀察性平台,支持即時監控、追蹤和評估 Dify 應用程序。',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: '開源LLMOps平台,提供實驗追蹤、可觀測性和評估功能,幫助您自信地構建AI/LLM應用。',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks提供完全託管的MLflow,具有強大的治理和安全功能,用於存儲追蹤數據。',
|
||||
},
|
||||
tencent: {
|
||||
title: '騰訊 APM',
|
||||
description: '騰訊應用性能監控為大型語言模型應用提供全面的追蹤和多維分析。',
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
import type {
|
||||
AliyunConfig,
|
||||
ArizeConfig,
|
||||
DatabricksConfig,
|
||||
LangFuseConfig,
|
||||
LangSmithConfig,
|
||||
MLflowConfig,
|
||||
OpikConfig,
|
||||
PhoenixConfig,
|
||||
TencentConfig,
|
||||
|
|
@ -119,7 +121,7 @@ export type TracingStatus = {
|
|||
|
||||
export type TracingConfig = {
|
||||
tracing_provider: TracingProvider
|
||||
tracing_config: ArizeConfig | PhoenixConfig | LangSmithConfig | LangFuseConfig | OpikConfig | WeaveConfig | AliyunConfig | TencentConfig
|
||||
tracing_config: ArizeConfig | PhoenixConfig | LangSmithConfig | LangFuseConfig | DatabricksConfig | MLflowConfig | OpikConfig | WeaveConfig | AliyunConfig | TencentConfig
|
||||
}
|
||||
|
||||
export type WebhookTriggerResponse = {
|
||||
|
|
|
|||
Loading…
Reference in New Issue