Skip to content

Commit a1492b8

Browse files
authored
Trigger live evaluations on every interaction (#1878)
1 parent 2558611 commit a1492b8

File tree

4 files changed

+38
-12
lines changed

4 files changed

+38
-12
lines changed

packages/core/src/events/events.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export type Events =
3232
| 'workspaceCreated'
3333
| 'projectCreated'
3434
| 'documentLogCreated'
35+
| 'documentLogInteracted'
3536
| 'documentSuggestionCreated'
3637
| 'documentSuggestionApplied'
3738
| 'documentSuggestionDiscarded'
@@ -171,6 +172,11 @@ export type DocumentLogCreatedEvent = LatitudeEventGeneric<
171172
Pick<DocumentLog, 'id'> & { workspaceId: number }
172173
>
173174

175+
export type DocumentLogInteractedEvent = LatitudeEventGeneric<
176+
'documentLogInteracted',
177+
Pick<DocumentLog, 'id'> & { workspaceId: number }
178+
>
179+
174180
export type DocumentSuggestionCreatedEvent = LatitudeEventGeneric<
175181
'documentSuggestionCreated',
176182
{
@@ -734,6 +740,7 @@ export type LatitudeEvent =
734740
| WorkspaceCreatedEvent
735741
| ProjectCreatedEvent
736742
| DocumentLogCreatedEvent
743+
| DocumentLogInteractedEvent
737744
| DocumentSuggestionCreatedEvent
738745
| DocumentSuggestionAppliedEvent
739746
| DocumentSuggestionDiscardedEvent
@@ -802,6 +809,7 @@ export interface IEventsHandlers {
802809
workspaceCreated: EventHandler<WorkspaceCreatedEvent>[]
803810
projectCreated: EventHandler<ProjectCreatedEvent>[]
804811
documentLogCreated: EventHandler<DocumentLogCreatedEvent>[]
812+
documentLogInteracted: EventHandler<DocumentLogInteractedEvent>[]
805813
documentSuggestionCreated: EventHandler<DocumentSuggestionCreatedEvent>[]
806814
documentSuggestionApplied: EventHandler<DocumentSuggestionAppliedEvent>[]
807815
documentSuggestionDiscarded: EventHandler<DocumentSuggestionDiscardedEvent>[]

packages/core/src/events/handlers/evaluateLiveLog.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { LogSources } from '../../constants'
2-
import { findWorkspaceFromDocumentLog } from '../../data-access/workspaces'
32
import { findLastProviderLogFromDocumentLogUuid } from '../../data-access/providerLogs'
3+
import { findWorkspaceFromDocumentLog } from '../../data-access/workspaces'
44
import { runEvaluationV2JobKey } from '../../jobs/job-definitions'
55
import { queues } from '../../jobs/queues'
66
import { NotFoundError } from '../../lib/errors'
@@ -10,7 +10,7 @@ import {
1010
EvaluationsV2Repository,
1111
} from '../../repositories'
1212
import { getEvaluationMetricSpecification } from '../../services/evaluationsV2/specifications'
13-
import { DocumentLogCreatedEvent } from '../events'
13+
import { DocumentLogCreatedEvent, DocumentLogInteractedEvent } from '../events'
1414

1515
const LIVE_EVALUABLE_LOG_SOURCES = Object.values(LogSources).filter(
1616
(source) => source !== 'evaluation' && source !== 'experiment',
@@ -19,7 +19,7 @@ const LIVE_EVALUABLE_LOG_SOURCES = Object.values(LogSources).filter(
1919
export const evaluateLiveLogJob = async ({
2020
data: event,
2121
}: {
22-
data: DocumentLogCreatedEvent
22+
data: DocumentLogCreatedEvent | DocumentLogInteractedEvent
2323
}) => {
2424
const { id, workspaceId } = event.data
2525
const repo = new DocumentLogsRepository(workspaceId)

packages/core/src/events/handlers/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export const EventHandlers: IEventsHandlers = {
3434
datasetUploaded: [createDatasetRowsJob],
3535
documentCreated: [],
3636
documentLogCreated: [evaluateLiveLogJob, notifyToClientDocumentLogCreatedJob],
37+
documentLogInteracted: [evaluateLiveLogJob],
3738
experimentVariantsCreated: [],
3839
documentSuggestionCreated: [
3940
notifyClientOfDocumentSuggestionCreated,

packages/core/src/services/documentLogs/addMessages/index.ts

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
import { type Message } from '@latitude-data/constants/legacyCompiler'
2-
31
import { NotFoundError } from '@latitude-data/constants/errors'
42
import { LatitudePromptConfig } from '@latitude-data/constants/latitudePromptSchema'
5-
import { buildConversation } from '../../../helpers'
3+
import { type Message } from '@latitude-data/constants/legacyCompiler'
64
import { LogSources } from '../../../constants'
7-
import { type Workspace } from '../../../schema/models/types/Workspace'
85
import { unsafelyFindProviderApiKey } from '../../../data-access/providerApiKeys'
6+
import { publisher } from '../../../events/publisher'
7+
import { buildConversation } from '../../../helpers'
98
import { Result } from '../../../lib/Result'
109
import { ToolHandler } from '../../../lib/streamManager/clientTools/handlers'
1110
import { DefaultStreamManager } from '../../../lib/streamManager/defaultStreamManager'
@@ -15,9 +14,11 @@ import {
1514
DocumentVersionsRepository,
1615
ProviderLogsRepository,
1716
} from '../../../repositories'
17+
import { type Workspace } from '../../../schema/models/types/Workspace'
1818
import { BACKGROUND, telemetry, TelemetryContext } from '../../../telemetry'
1919
import { getInputSchema, getOutputType } from '../../chains/ChainValidator'
2020
import { scanDocumentContent } from '../../documents'
21+
import { isErrorRetryable } from '../../evaluationsV2/run'
2122
import serializeProviderLog from '../../providerLogs/serialize'
2223

2324
type AddMessagesArgs = {
@@ -48,7 +49,8 @@ export async function addMessages({
4849
documentLogUuid,
4950
})
5051
if (dataResult.error) return dataResult
51-
const { document, commit, providerLog, globalConfig } = dataResult.unwrap()
52+
const { document, commit, documentLog, providerLog, globalConfig } =
53+
dataResult.unwrap()
5254

5355
const $prompt = telemetry.prompt(context, {
5456
documentLogUuid,
@@ -105,9 +107,24 @@ export async function addMessages({
105107

106108
start()
107109

108-
streamResult.error.then((error) =>
109-
error ? $prompt.fail(error) : $prompt.end(),
110-
)
110+
streamResult.response.then(async (response) => {
111+
const error = await streamResult.error
112+
if (error) {
113+
$prompt.fail(error)
114+
115+
if (isErrorRetryable(error)) return response
116+
} else {
117+
$prompt.end()
118+
}
119+
120+
await publisher.publishLater({
121+
type: 'documentLogInteracted',
122+
data: {
123+
id: documentLog.id,
124+
workspaceId: workspace.id,
125+
},
126+
})
127+
})
111128

112129
return Result.ok(streamResult)
113130
}
@@ -150,5 +167,5 @@ async function retrieveData({
150167
if (metadataResult.error) return metadataResult
151168
const globalConfig = metadataResult.value.config as LatitudePromptConfig
152169

153-
return Result.ok({ commit, document, providerLog, globalConfig })
170+
return Result.ok({ commit, document, documentLog, providerLog, globalConfig })
154171
}

0 commit comments

Comments
 (0)