feat: 接入langfuse
This commit is contained in:
+35
-28
@@ -77,34 +77,41 @@ class DecisionEngine:
|
||||
| {"type": question.type}
|
||||
for name, question in request.decisions.items()
|
||||
}
|
||||
try:
|
||||
response = await client.system_one(
|
||||
state=request.state,
|
||||
questions=questions,
|
||||
model=request.model,
|
||||
extra_body=request.extra_body or None,
|
||||
)
|
||||
except TypeSafeAPIResponseValidationError as error:
|
||||
raise DecisionError(
|
||||
"Jev 返回的数据格式无效",
|
||||
kind="response_validation",
|
||||
status=error.status,
|
||||
request_id=error.request_id,
|
||||
) from error
|
||||
except TypeSafeAPIError as error:
|
||||
raise DecisionError(
|
||||
f"Jev 请求失败(HTTP {error.status})",
|
||||
kind="api",
|
||||
status=error.status,
|
||||
request_id=error.request_id,
|
||||
) from error
|
||||
except TypeSafeAPITimeoutError as error:
|
||||
raise DecisionError("Jev 请求超时", kind="timeout") from error
|
||||
except TypeSafeAPIConnectionError as error:
|
||||
raise DecisionError("无法连接 Jev 服务", kind="connection") from error
|
||||
except TypeSafeError as error:
|
||||
raise DecisionError("Jev SDK 调用失败", kind="sdk") from error
|
||||
return self._parse_response(request, response)
|
||||
from app.observability.tracing import observe_decision, record_decision
|
||||
|
||||
# 观测包在请求外面:成功才记结果,失败仍抛原来的 DecisionError
|
||||
# generation 为 None 时 record_decision 什么都不做
|
||||
with observe_decision(request) as generation:
|
||||
try:
|
||||
response = await client.system_one(
|
||||
state=request.state,
|
||||
questions=questions,
|
||||
model=request.model,
|
||||
extra_body=request.extra_body or None,
|
||||
)
|
||||
except TypeSafeAPIResponseValidationError as error:
|
||||
raise DecisionError(
|
||||
"Jev 返回的数据格式无效",
|
||||
kind="response_validation",
|
||||
status=error.status,
|
||||
request_id=error.request_id,
|
||||
) from error
|
||||
except TypeSafeAPIError as error:
|
||||
raise DecisionError(
|
||||
f"Jev 请求失败(HTTP {error.status})",
|
||||
kind="api",
|
||||
status=error.status,
|
||||
request_id=error.request_id,
|
||||
) from error
|
||||
except TypeSafeAPITimeoutError as error:
|
||||
raise DecisionError("Jev 请求超时", kind="timeout") from error
|
||||
except TypeSafeAPIConnectionError as error:
|
||||
raise DecisionError("无法连接 Jev 服务", kind="connection") from error
|
||||
except TypeSafeError as error:
|
||||
raise DecisionError("Jev SDK 调用失败", kind="sdk") from error
|
||||
parsed = self._parse_response(request, response)
|
||||
record_decision(generation, parsed)
|
||||
return parsed
|
||||
|
||||
@staticmethod
|
||||
def _parse_response(
|
||||
|
||||
Reference in New Issue
Block a user