mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-13 04:08:58 +08:00
fix LangSmith project config error (#7996)
This commit is contained in:
parent
d542b15cc0
commit
feefeb44d7
@ -1,9 +1,11 @@
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import uuid
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from langsmith import Client
|
from langsmith import Client
|
||||||
|
from langsmith.schemas import RunBase
|
||||||
|
|
||||||
from core.ops.base_trace_instance import BaseTraceInstance
|
from core.ops.base_trace_instance import BaseTraceInstance
|
||||||
from core.ops.entities.config_entity import LangSmithConfig
|
from core.ops.entities.config_entity import LangSmithConfig
|
||||||
@ -371,3 +373,24 @@ class LangSmithDataTrace(BaseTraceInstance):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.debug(f"LangSmith API check failed: {str(e)}")
|
logger.debug(f"LangSmith API check failed: {str(e)}")
|
||||||
raise ValueError(f"LangSmith API check failed: {str(e)}")
|
raise ValueError(f"LangSmith API check failed: {str(e)}")
|
||||||
|
|
||||||
|
def get_project_url(self):
|
||||||
|
try:
|
||||||
|
run_data = RunBase(
|
||||||
|
id=uuid.uuid4(),
|
||||||
|
name="tool",
|
||||||
|
inputs={"input": "test"},
|
||||||
|
outputs={"output": "test"},
|
||||||
|
run_type=LangSmithRunType.tool,
|
||||||
|
start_time=datetime.now(),
|
||||||
|
)
|
||||||
|
|
||||||
|
project_url = self.langsmith_client.get_run_url(run=run_data,
|
||||||
|
project_id=self.project_id,
|
||||||
|
project_name=self.project_name)
|
||||||
|
return project_url.split('/r/')[0]
|
||||||
|
except Exception as e:
|
||||||
|
logger.debug(f"LangSmith get run url failed: {str(e)}")
|
||||||
|
raise ValueError(f"LangSmith get run url failed: {str(e)}")
|
||||||
|
|
||||||
|
|
||||||
|
@ -264,6 +264,19 @@ class OpsTraceManager:
|
|||||||
tracing_config = config_type(**tracing_config)
|
tracing_config = config_type(**tracing_config)
|
||||||
return trace_instance(tracing_config).get_project_key()
|
return trace_instance(tracing_config).get_project_key()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_trace_config_project_url(tracing_config: dict, tracing_provider: str):
|
||||||
|
"""
|
||||||
|
get trace config is project key
|
||||||
|
:param tracing_config: tracing config
|
||||||
|
:param tracing_provider: tracing provider
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
config_type, trace_instance = provider_config_map[tracing_provider]['config_class'], \
|
||||||
|
provider_config_map[tracing_provider]['trace_instance']
|
||||||
|
tracing_config = config_type(**tracing_config)
|
||||||
|
return trace_instance(tracing_config).get_project_url()
|
||||||
|
|
||||||
|
|
||||||
class TraceTask:
|
class TraceTask:
|
||||||
def __init__(
|
def __init__(
|
||||||
|
@ -32,7 +32,15 @@ class OpsService:
|
|||||||
"project_key" not in decrypt_tracing_config or not decrypt_tracing_config.get("project_key")
|
"project_key" not in decrypt_tracing_config or not decrypt_tracing_config.get("project_key")
|
||||||
):
|
):
|
||||||
project_key = OpsTraceManager.get_trace_config_project_key(decrypt_tracing_config, tracing_provider)
|
project_key = OpsTraceManager.get_trace_config_project_key(decrypt_tracing_config, tracing_provider)
|
||||||
new_decrypt_tracing_config.update({"project_key": project_key})
|
new_decrypt_tracing_config.update(
|
||||||
|
{"project_url": "{host}/project/{key}".format(host=decrypt_tracing_config.get("host"), key=project_key)}
|
||||||
|
)
|
||||||
|
|
||||||
|
if tracing_provider == "langsmith" and (
|
||||||
|
"project_url" not in decrypt_tracing_config or not decrypt_tracing_config.get("project_url")
|
||||||
|
):
|
||||||
|
project_url = OpsTraceManager.get_trace_config_project_url(decrypt_tracing_config, tracing_provider)
|
||||||
|
new_decrypt_tracing_config.update({"project_url": project_url})
|
||||||
|
|
||||||
trace_config_data.tracing_config = new_decrypt_tracing_config
|
trace_config_data.tracing_config = new_decrypt_tracing_config
|
||||||
return trace_config_data.to_dict()
|
return trace_config_data.to_dict()
|
||||||
@ -62,8 +70,14 @@ class OpsService:
|
|||||||
if not OpsTraceManager.check_trace_config_is_effective(tracing_config, tracing_provider):
|
if not OpsTraceManager.check_trace_config_is_effective(tracing_config, tracing_provider):
|
||||||
return {"error": "Invalid Credentials"}
|
return {"error": "Invalid Credentials"}
|
||||||
|
|
||||||
# get project key
|
# get project url
|
||||||
project_key = OpsTraceManager.get_trace_config_project_key(tracing_config, tracing_provider)
|
if tracing_provider == "langfuse":
|
||||||
|
project_key = OpsTraceManager.get_trace_config_project_key(tracing_config, tracing_provider)
|
||||||
|
project_url = "{host}/project/{key}".format(host=tracing_config.get("host"), key=project_key)
|
||||||
|
elif tracing_provider == "langsmith":
|
||||||
|
project_url = OpsTraceManager.get_trace_config_project_url(tracing_config, tracing_provider)
|
||||||
|
else:
|
||||||
|
project_url = None
|
||||||
|
|
||||||
# check if trace config already exists
|
# check if trace config already exists
|
||||||
trace_config_data: TraceAppConfig = (
|
trace_config_data: TraceAppConfig = (
|
||||||
@ -78,8 +92,8 @@ class OpsService:
|
|||||||
# get tenant id
|
# get tenant id
|
||||||
tenant_id = db.session.query(App).filter(App.id == app_id).first().tenant_id
|
tenant_id = db.session.query(App).filter(App.id == app_id).first().tenant_id
|
||||||
tracing_config = OpsTraceManager.encrypt_tracing_config(tenant_id, tracing_provider, tracing_config)
|
tracing_config = OpsTraceManager.encrypt_tracing_config(tenant_id, tracing_provider, tracing_config)
|
||||||
if tracing_provider == "langfuse" and project_key:
|
if project_url:
|
||||||
tracing_config["project_key"] = project_key
|
tracing_config["project_url"] = project_url
|
||||||
trace_config_data = TraceAppConfig(
|
trace_config_data = TraceAppConfig(
|
||||||
app_id=app_id,
|
app_id=app_id,
|
||||||
tracing_provider=tracing_provider,
|
tracing_provider=tracing_provider,
|
||||||
|
@ -48,9 +48,10 @@ const ProviderPanel: FC<Props> = ({
|
|||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
|
|
||||||
const url = `${config?.host}/project/${config?.project_key}`
|
const url = config?.project_url
|
||||||
window.open(url, '_blank', 'noopener,noreferrer')
|
if (url)
|
||||||
}, [])
|
window.open(url, '_blank', 'noopener,noreferrer')
|
||||||
|
}, [config?.project_url])
|
||||||
|
|
||||||
const handleChosen = useCallback((e: React.MouseEvent) => {
|
const handleChosen = useCallback((e: React.MouseEvent) => {
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user