Skip to content

Commit a072650

Browse files
committed
Improved logic
1 parent fb2c350 commit a072650

File tree

3 files changed

+36
-4
lines changed

3 files changed

+36
-4
lines changed

bot/engine/src/main/kotlin/engine/config/RAGAnswerHandler.kt

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import ai.tock.genai.orchestratorclient.responses.TextWithFootnotes
3737
import ai.tock.genai.orchestratorclient.retrofit.GenAIOrchestratorBusinessError
3838
import ai.tock.genai.orchestratorclient.retrofit.GenAIOrchestratorValidationError
3939
import ai.tock.genai.orchestratorclient.services.RAGService
40+
import ai.tock.genai.orchestratorcore.models.observability.LangfuseObservabilitySetting
4041
import ai.tock.genai.orchestratorcore.utils.VectorStoreUtils
4142
import ai.tock.shared.*
4243
import engine.config.AbstractProactiveAnswerHandler
@@ -76,6 +77,35 @@ object RAGAnswerHandler : AbstractProactiveAnswerHandler {
7677
// Handle the RAG answer
7778
if (noAnswerStory == null && answer != null) {
7879
logger.info { "Send RAG answer." }
80+
81+
val publicTraceUrl = observabilityInfo?.let {
82+
// Get observability configuration
83+
val observabilityConfig = botDefinition.observabilityConfiguration
84+
// If observability configuration exists and contain a public URL, replace the trace URL
85+
if (observabilityConfig?.enabled == true && observabilityConfig.setting is LangfuseObservabilitySetting<*>) {
86+
val publicUrl = (observabilityConfig.setting as LangfuseObservabilitySetting<*>).publicUrl
87+
if (!publicUrl.isNullOrBlank()) {
88+
it.traceUrl.replace(
89+
(observabilityConfig.setting as LangfuseObservabilitySetting<*>).url,
90+
publicUrl
91+
)
92+
} else {
93+
it.traceUrl
94+
}
95+
} else {
96+
it.traceUrl
97+
}
98+
}
99+
100+
// Modified ObservabilityInfo
101+
val modifiedObservabilityInfo = observabilityInfo?.let {
102+
ObservabilityInfo(
103+
traceId = it.traceId,
104+
traceName = it.traceName,
105+
traceUrl = publicTraceUrl ?: it.traceUrl
106+
)
107+
}
108+
79109
send(
80110
SendSentenceWithFootnotes(
81111
botId, applicationId, userId, text = answer.text, footnotes = answer.footnotes.map {
@@ -85,7 +115,7 @@ object RAGAnswerHandler : AbstractProactiveAnswerHandler {
85115
it.score
86116
)
87117
}.toMutableList(),
88-
metadata = ActionMetadata(isGenAiRagAnswer = true, observabilityInfo = observabilityInfo)
118+
metadata = ActionMetadata(isGenAiRagAnswer = true, observabilityInfo = modifiedObservabilityInfo)
89119
)
90120
)
91121
} else {

gen-ai/orchestrator-server/src/main/python/server/src/gen_ai_orchestrator/routers/responses/responses.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@ class ObservabilityInfo(BaseModel):
118118
trace_url: str = Field(
119119
description='The observability trace url.'
120120
)
121+
public_trace_url: Optional[str] = Field(
122+
None, description="The public observability trace url."
123+
)
121124

122125
class RagResponse(BaseModel):
123126
"""The RAG response model"""

gen-ai/orchestrator-server/src/main/python/server/src/gen_ai_orchestrator/services/langchain/factories/callback_handlers/langfuse_callback_handler_factory.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,9 @@ def check_observability_setting(self) -> bool:
6363
return True
6464

6565
def _fetch_settings(self):
66-
host = str(self.setting.public_url or self.setting.url)
67-
logger.info(f"Using Langfuse host: {host}")
6866
return {
69-
'host': host,
67+
'host': str(self.setting.url),
68+
'public_key': self.setting.public_key,
7069
'secret_key': fetch_secret_key_value(self.setting.secret_key),
7170
'timeout': application_settings.observability_provider_timeout,
7271
'max_retries': application_settings.observability_provider_max_retries

0 commit comments

Comments
 (0)