| start_time=convert_datetime_to_nanoseconds(trace_info.start_time), | start_time=convert_datetime_to_nanoseconds(trace_info.start_time), | ||||
| end_time=convert_datetime_to_nanoseconds(trace_info.end_time), | end_time=convert_datetime_to_nanoseconds(trace_info.end_time), | ||||
| attributes={ | attributes={ | ||||
| GEN_AI_SESSION_ID: trace_info.metadata.get("conversation_id", ""), | |||||
| GEN_AI_SESSION_ID: trace_info.metadata.get("conversation_id") or "", | |||||
| GEN_AI_USER_ID: str(user_id), | GEN_AI_USER_ID: str(user_id), | ||||
| GEN_AI_SPAN_KIND: GenAISpanKind.CHAIN.value, | GEN_AI_SPAN_KIND: GenAISpanKind.CHAIN.value, | ||||
| GEN_AI_FRAMEWORK: "dify", | GEN_AI_FRAMEWORK: "dify", | ||||
| start_time=convert_datetime_to_nanoseconds(trace_info.start_time), | start_time=convert_datetime_to_nanoseconds(trace_info.start_time), | ||||
| end_time=convert_datetime_to_nanoseconds(trace_info.end_time), | end_time=convert_datetime_to_nanoseconds(trace_info.end_time), | ||||
| attributes={ | attributes={ | ||||
| GEN_AI_SESSION_ID: trace_info.metadata.get("conversation_id", ""), | |||||
| GEN_AI_SESSION_ID: trace_info.metadata.get("conversation_id") or "", | |||||
| GEN_AI_USER_ID: str(user_id), | GEN_AI_USER_ID: str(user_id), | ||||
| GEN_AI_SPAN_KIND: GenAISpanKind.LLM.value, | GEN_AI_SPAN_KIND: GenAISpanKind.LLM.value, | ||||
| GEN_AI_FRAMEWORK: "dify", | GEN_AI_FRAMEWORK: "dify", | ||||
| GEN_AI_MODEL_NAME: trace_info.metadata.get("ls_model_name", ""), | |||||
| GEN_AI_SYSTEM: trace_info.metadata.get("ls_provider", ""), | |||||
| GEN_AI_MODEL_NAME: trace_info.metadata.get("ls_model_name") or "", | |||||
| GEN_AI_SYSTEM: trace_info.metadata.get("ls_provider") or "", | |||||
| GEN_AI_USAGE_INPUT_TOKENS: str(trace_info.message_tokens), | GEN_AI_USAGE_INPUT_TOKENS: str(trace_info.message_tokens), | ||||
| GEN_AI_USAGE_OUTPUT_TOKENS: str(trace_info.answer_tokens), | GEN_AI_USAGE_OUTPUT_TOKENS: str(trace_info.answer_tokens), | ||||
| GEN_AI_USAGE_TOTAL_TOKENS: str(trace_info.total_tokens), | GEN_AI_USAGE_TOTAL_TOKENS: str(trace_info.total_tokens), | ||||
| GEN_AI_SESSION_ID: trace_info.metadata.get("conversation_id") or "", | GEN_AI_SESSION_ID: trace_info.metadata.get("conversation_id") or "", | ||||
| GEN_AI_SPAN_KIND: GenAISpanKind.LLM.value, | GEN_AI_SPAN_KIND: GenAISpanKind.LLM.value, | ||||
| GEN_AI_FRAMEWORK: "dify", | GEN_AI_FRAMEWORK: "dify", | ||||
| GEN_AI_MODEL_NAME: process_data.get("model_name", ""), | |||||
| GEN_AI_SYSTEM: process_data.get("model_provider", ""), | |||||
| GEN_AI_MODEL_NAME: process_data.get("model_name") or "", | |||||
| GEN_AI_SYSTEM: process_data.get("model_provider") or "", | |||||
| GEN_AI_USAGE_INPUT_TOKENS: str(usage_data.get("prompt_tokens", 0)), | GEN_AI_USAGE_INPUT_TOKENS: str(usage_data.get("prompt_tokens", 0)), | ||||
| GEN_AI_USAGE_OUTPUT_TOKENS: str(usage_data.get("completion_tokens", 0)), | GEN_AI_USAGE_OUTPUT_TOKENS: str(usage_data.get("completion_tokens", 0)), | ||||
| GEN_AI_USAGE_TOTAL_TOKENS: str(usage_data.get("total_tokens", 0)), | GEN_AI_USAGE_TOTAL_TOKENS: str(usage_data.get("total_tokens", 0)), | ||||
| GEN_AI_PROMPT: json.dumps(process_data.get("prompts", []), ensure_ascii=False), | GEN_AI_PROMPT: json.dumps(process_data.get("prompts", []), ensure_ascii=False), | ||||
| GEN_AI_COMPLETION: str(outputs.get("text", "")), | GEN_AI_COMPLETION: str(outputs.get("text", "")), | ||||
| GEN_AI_RESPONSE_FINISH_REASON: outputs.get("finish_reason", ""), | |||||
| GEN_AI_RESPONSE_FINISH_REASON: outputs.get("finish_reason") or "", | |||||
| INPUT_VALUE: json.dumps(process_data.get("prompts", []), ensure_ascii=False), | INPUT_VALUE: json.dumps(process_data.get("prompts", []), ensure_ascii=False), | ||||
| OUTPUT_VALUE: str(outputs.get("text", "")), | OUTPUT_VALUE: str(outputs.get("text", "")), | ||||
| }, | }, | ||||
| GEN_AI_USER_ID: str(user_id), | GEN_AI_USER_ID: str(user_id), | ||||
| GEN_AI_SPAN_KIND: GenAISpanKind.CHAIN.value, | GEN_AI_SPAN_KIND: GenAISpanKind.CHAIN.value, | ||||
| GEN_AI_FRAMEWORK: "dify", | GEN_AI_FRAMEWORK: "dify", | ||||
| INPUT_VALUE: trace_info.workflow_run_inputs.get("sys.query", ""), | |||||
| INPUT_VALUE: trace_info.workflow_run_inputs.get("sys.query") or "", | |||||
| OUTPUT_VALUE: json.dumps(trace_info.workflow_run_outputs, ensure_ascii=False), | OUTPUT_VALUE: json.dumps(trace_info.workflow_run_outputs, ensure_ascii=False), | ||||
| }, | }, | ||||
| status=status, | status=status, | ||||
| attributes={ | attributes={ | ||||
| GEN_AI_SPAN_KIND: GenAISpanKind.LLM.value, | GEN_AI_SPAN_KIND: GenAISpanKind.LLM.value, | ||||
| GEN_AI_FRAMEWORK: "dify", | GEN_AI_FRAMEWORK: "dify", | ||||
| GEN_AI_MODEL_NAME: trace_info.metadata.get("ls_model_name", ""), | |||||
| GEN_AI_SYSTEM: trace_info.metadata.get("ls_provider", ""), | |||||
| GEN_AI_MODEL_NAME: trace_info.metadata.get("ls_model_name") or "", | |||||
| GEN_AI_SYSTEM: trace_info.metadata.get("ls_provider") or "", | |||||
| GEN_AI_PROMPT: json.dumps(trace_info.inputs, ensure_ascii=False), | GEN_AI_PROMPT: json.dumps(trace_info.inputs, ensure_ascii=False), | ||||
| GEN_AI_COMPLETION: json.dumps(trace_info.suggested_question, ensure_ascii=False), | GEN_AI_COMPLETION: json.dumps(trace_info.suggested_question, ensure_ascii=False), | ||||
| INPUT_VALUE: json.dumps(trace_info.inputs, ensure_ascii=False), | INPUT_VALUE: json.dumps(trace_info.inputs, ensure_ascii=False), |