@proofhound/core 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/channels/mcp/annotation.tools.d.ts.map +1 -1
- package/dist/server/channels/mcp/annotation.tools.js +18 -5
- package/dist/server/channels/mcp/annotation.tools.js.map +1 -1
- package/dist/server/channels/mcp/canary-release.tools.d.ts.map +1 -1
- package/dist/server/channels/mcp/canary-release.tools.js +2 -1
- package/dist/server/channels/mcp/canary-release.tools.js.map +1 -1
- package/dist/server/channels/mcp/dataset.tools.d.ts.map +1 -1
- package/dist/server/channels/mcp/dataset.tools.js +49 -1
- package/dist/server/channels/mcp/dataset.tools.js.map +1 -1
- package/dist/server/channels/mcp/mcp-server.factory.d.ts +9 -1
- package/dist/server/channels/mcp/mcp-server.factory.d.ts.map +1 -1
- package/dist/server/channels/mcp/mcp-server.factory.js +28 -3
- package/dist/server/channels/mcp/mcp-server.factory.js.map +1 -1
- package/dist/server/channels/mcp/prompt.tools.d.ts.map +1 -1
- package/dist/server/channels/mcp/prompt.tools.js +34 -2
- package/dist/server/channels/mcp/prompt.tools.js.map +1 -1
- package/dist/server/channels/mcp/release-line.tools.d.ts.map +1 -1
- package/dist/server/channels/mcp/release-line.tools.js +292 -4
- package/dist/server/channels/mcp/release-line.tools.js.map +1 -1
- package/dist/server/channels/mcp/run-result.tools.d.ts.map +1 -1
- package/dist/server/channels/mcp/run-result.tools.js +7 -5
- package/dist/server/channels/mcp/run-result.tools.js.map +1 -1
- package/dist/server/common/contracts/index.d.ts +1 -0
- package/dist/server/common/contracts/index.d.ts.map +1 -1
- package/dist/server/common/contracts/index.js +1 -0
- package/dist/server/common/contracts/index.js.map +1 -1
- package/dist/server/common/contracts/local-contracts.module.d.ts.map +1 -1
- package/dist/server/common/contracts/local-contracts.module.js +3 -0
- package/dist/server/common/contracts/local-contracts.module.js.map +1 -1
- package/dist/server/common/contracts/usage-metering.hook.d.ts +33 -0
- package/dist/server/common/contracts/usage-metering.hook.d.ts.map +1 -0
- package/dist/server/common/contracts/usage-metering.hook.js +43 -0
- package/dist/server/common/contracts/usage-metering.hook.js.map +1 -0
- package/dist/server/infrastructure/llm/run-result-writer.d.ts +4 -1
- package/dist/server/infrastructure/llm/run-result-writer.d.ts.map +1 -1
- package/dist/server/infrastructure/llm/run-result-writer.js +66 -14
- package/dist/server/infrastructure/llm/run-result-writer.js.map +1 -1
- package/dist/server/modules/annotation/annotation.controller.d.ts +28 -13
- package/dist/server/modules/annotation/annotation.controller.d.ts.map +1 -1
- package/dist/server/modules/annotation/annotation.repository.d.ts +6 -2
- package/dist/server/modules/annotation/annotation.repository.d.ts.map +1 -1
- package/dist/server/modules/annotation/annotation.repository.js +340 -96
- package/dist/server/modules/annotation/annotation.repository.js.map +1 -1
- package/dist/server/modules/annotation/annotation.service.d.ts.map +1 -1
- package/dist/server/modules/annotation/annotation.service.js +62 -10
- package/dist/server/modules/annotation/annotation.service.js.map +1 -1
- package/dist/server/modules/canary-release/canary-release.controller.d.ts +63 -42
- package/dist/server/modules/canary-release/canary-release.controller.d.ts.map +1 -1
- package/dist/server/modules/canary-release/canary-release.repository.d.ts +23 -5
- package/dist/server/modules/canary-release/canary-release.repository.d.ts.map +1 -1
- package/dist/server/modules/canary-release/canary-release.repository.js +28 -12
- package/dist/server/modules/canary-release/canary-release.repository.js.map +1 -1
- package/dist/server/modules/canary-release/canary-release.service.d.ts.map +1 -1
- package/dist/server/modules/canary-release/canary-release.service.js +32 -10
- package/dist/server/modules/canary-release/canary-release.service.js.map +1 -1
- package/dist/server/modules/canary-release/canary-runtime.d.ts +11 -1
- package/dist/server/modules/canary-release/canary-runtime.d.ts.map +1 -1
- package/dist/server/modules/canary-release/canary-runtime.js +63 -8
- package/dist/server/modules/canary-release/canary-runtime.js.map +1 -1
- package/dist/server/modules/dataset/dataset-deletion.hook.d.ts +16 -0
- package/dist/server/modules/dataset/dataset-deletion.hook.d.ts.map +1 -0
- package/dist/server/modules/dataset/dataset-deletion.hook.js +57 -0
- package/dist/server/modules/dataset/dataset-deletion.hook.js.map +1 -0
- package/dist/server/modules/dataset/dataset-import.controller.d.ts +2 -0
- package/dist/server/modules/dataset/dataset-import.controller.d.ts.map +1 -1
- package/dist/server/modules/dataset/dataset-import.service.d.ts.map +1 -1
- package/dist/server/modules/dataset/dataset-import.service.js +7 -0
- package/dist/server/modules/dataset/dataset-import.service.js.map +1 -1
- package/dist/server/modules/dataset/dataset.controller.d.ts +98 -0
- package/dist/server/modules/dataset/dataset.controller.d.ts.map +1 -1
- package/dist/server/modules/dataset/dataset.controller.js +36 -0
- package/dist/server/modules/dataset/dataset.controller.js.map +1 -1
- package/dist/server/modules/dataset/dataset.module.d.ts.map +1 -1
- package/dist/server/modules/dataset/dataset.module.js +8 -1
- package/dist/server/modules/dataset/dataset.module.js.map +1 -1
- package/dist/server/modules/dataset/dataset.repository.d.ts +19 -0
- package/dist/server/modules/dataset/dataset.repository.d.ts.map +1 -1
- package/dist/server/modules/dataset/dataset.repository.js +248 -9
- package/dist/server/modules/dataset/dataset.repository.js.map +1 -1
- package/dist/server/modules/dataset/dataset.service.d.ts +45 -1
- package/dist/server/modules/dataset/dataset.service.d.ts.map +1 -1
- package/dist/server/modules/dataset/dataset.service.js +132 -7
- package/dist/server/modules/dataset/dataset.service.js.map +1 -1
- package/dist/server/modules/experiment/experiment.controller.d.ts +8 -8
- package/dist/server/modules/experiment/experiment.repository.d.ts.map +1 -1
- package/dist/server/modules/experiment/experiment.repository.js +28 -0
- package/dist/server/modules/experiment/experiment.repository.js.map +1 -1
- package/dist/server/modules/experiment/experiment.service.d.ts.map +1 -1
- package/dist/server/modules/experiment/experiment.service.js +6 -3
- package/dist/server/modules/experiment/experiment.service.js.map +1 -1
- package/dist/server/modules/model/model.service.d.ts +5 -1
- package/dist/server/modules/model/model.service.d.ts.map +1 -1
- package/dist/server/modules/model/model.service.js +65 -3
- package/dist/server/modules/model/model.service.js.map +1 -1
- package/dist/server/modules/model/project-model.controller.d.ts +5 -5
- package/dist/server/modules/monitoring/monitoring.repository.js +1 -1
- package/dist/server/modules/optimization/optimization.controller.d.ts +12 -12
- package/dist/server/modules/optimization/optimization.repository.d.ts +6 -0
- package/dist/server/modules/optimization/optimization.repository.d.ts.map +1 -1
- package/dist/server/modules/optimization/optimization.repository.js +96 -4
- package/dist/server/modules/optimization/optimization.repository.js.map +1 -1
- package/dist/server/modules/optimization/optimization.service.d.ts.map +1 -1
- package/dist/server/modules/optimization/optimization.service.js +13 -4
- package/dist/server/modules/optimization/optimization.service.js.map +1 -1
- package/dist/server/modules/optimization/optimization.workflow.js +1 -1
- package/dist/server/modules/optimization/optimization.workflow.js.map +1 -1
- package/dist/server/modules/production-release/production-release.controller.d.ts +12 -9
- package/dist/server/modules/production-release/production-release.controller.d.ts.map +1 -1
- package/dist/server/modules/production-release/production-release.repository.d.ts +2 -1
- package/dist/server/modules/production-release/production-release.repository.d.ts.map +1 -1
- package/dist/server/modules/production-release/production-release.repository.js +3 -1
- package/dist/server/modules/production-release/production-release.repository.js.map +1 -1
- package/dist/server/modules/production-release/production-release.service.d.ts.map +1 -1
- package/dist/server/modules/production-release/production-release.service.js +10 -1
- package/dist/server/modules/production-release/production-release.service.js.map +1 -1
- package/dist/server/modules/prompt/prompt-deletion.hook.d.ts +18 -0
- package/dist/server/modules/prompt/prompt-deletion.hook.d.ts.map +1 -0
- package/dist/server/modules/prompt/prompt-deletion.hook.js +69 -0
- package/dist/server/modules/prompt/prompt-deletion.hook.js.map +1 -0
- package/dist/server/modules/prompt/prompt.controller.d.ts +146 -38
- package/dist/server/modules/prompt/prompt.controller.d.ts.map +1 -1
- package/dist/server/modules/prompt/prompt.controller.js +24 -0
- package/dist/server/modules/prompt/prompt.controller.js.map +1 -1
- package/dist/server/modules/prompt/prompt.module.d.ts.map +1 -1
- package/dist/server/modules/prompt/prompt.module.js +7 -1
- package/dist/server/modules/prompt/prompt.module.js.map +1 -1
- package/dist/server/modules/prompt/prompt.repository.d.ts +33 -3
- package/dist/server/modules/prompt/prompt.repository.d.ts.map +1 -1
- package/dist/server/modules/prompt/prompt.repository.js +267 -39
- package/dist/server/modules/prompt/prompt.repository.js.map +1 -1
- package/dist/server/modules/prompt/prompt.service.d.ts +78 -6
- package/dist/server/modules/prompt/prompt.service.d.ts.map +1 -1
- package/dist/server/modules/prompt/prompt.service.js +79 -49
- package/dist/server/modules/prompt/prompt.service.js.map +1 -1
- package/dist/server/modules/quick-start/quick-start.controller.d.ts +1 -1
- package/dist/server/modules/quick-start/quick-start.service.d.ts +1 -1
- package/dist/server/modules/release-line/release-line-deletion.hook.d.ts +16 -0
- package/dist/server/modules/release-line/release-line-deletion.hook.d.ts.map +1 -0
- package/dist/server/modules/release-line/release-line-deletion.hook.js +60 -0
- package/dist/server/modules/release-line/release-line-deletion.hook.js.map +1 -0
- package/dist/server/modules/release-line/release-line.controller.d.ts +2503 -82
- package/dist/server/modules/release-line/release-line.controller.d.ts.map +1 -1
- package/dist/server/modules/release-line/release-line.controller.js +169 -0
- package/dist/server/modules/release-line/release-line.controller.js.map +1 -1
- package/dist/server/modules/release-line/release-line.module.d.ts.map +1 -1
- package/dist/server/modules/release-line/release-line.module.js +8 -1
- package/dist/server/modules/release-line/release-line.module.js.map +1 -1
- package/dist/server/modules/release-line/release-line.repository.d.ts +55 -3
- package/dist/server/modules/release-line/release-line.repository.d.ts.map +1 -1
- package/dist/server/modules/release-line/release-line.repository.js +797 -111
- package/dist/server/modules/release-line/release-line.repository.js.map +1 -1
- package/dist/server/modules/release-line/release-line.service.d.ts +25 -5
- package/dist/server/modules/release-line/release-line.service.d.ts.map +1 -1
- package/dist/server/modules/release-line/release-line.service.js +312 -4
- package/dist/server/modules/release-line/release-line.service.js.map +1 -1
- package/dist/server/modules/release-line/release-runner.repository.d.ts +2 -1
- package/dist/server/modules/release-line/release-runner.repository.d.ts.map +1 -1
- package/dist/server/modules/release-line/release-runner.repository.js +14 -10
- package/dist/server/modules/release-line/release-runner.repository.js.map +1 -1
- package/dist/server/modules/release-line/release-runner.service.d.ts +6 -2
- package/dist/server/modules/release-line/release-runner.service.d.ts.map +1 -1
- package/dist/server/modules/release-line/release-runner.service.js +138 -11
- package/dist/server/modules/release-line/release-runner.service.js.map +1 -1
- package/dist/server/modules/release-line/release-variable-mapping.d.ts +9 -0
- package/dist/server/modules/release-line/release-variable-mapping.d.ts.map +1 -0
- package/dist/server/modules/release-line/release-variable-mapping.js +83 -0
- package/dist/server/modules/release-line/release-variable-mapping.js.map +1 -0
- package/dist/server/modules/run-result/run-result.controller.d.ts +10 -7
- package/dist/server/modules/run-result/run-result.controller.d.ts.map +1 -1
- package/dist/server/modules/run-result/run-result.repository.d.ts.map +1 -1
- package/dist/server/modules/run-result/run-result.repository.js +43 -18
- package/dist/server/modules/run-result/run-result.repository.js.map +1 -1
- package/dist/webhook/channels/webhook/webhook.controller.d.ts +4 -0
- package/dist/webhook/channels/webhook/webhook.controller.d.ts.map +1 -1
- package/dist/webhook/channels/webhook/webhook.service.d.ts +2 -0
- package/dist/webhook/channels/webhook/webhook.service.d.ts.map +1 -1
- package/dist/webhook/channels/webhook/webhook.service.js +6 -0
- package/dist/webhook/channels/webhook/webhook.service.js.map +1 -1
- package/dist/worker/consumers/llm.consumer.d.ts +4 -1
- package/dist/worker/consumers/llm.consumer.d.ts.map +1 -1
- package/dist/worker/consumers/llm.consumer.js +41 -6
- package/dist/worker/consumers/llm.consumer.js.map +1 -1
- package/dist/worker/consumers/probe.consumer.d.ts +4 -1
- package/dist/worker/consumers/probe.consumer.d.ts.map +1 -1
- package/dist/worker/consumers/probe.consumer.js +35 -3
- package/dist/worker/consumers/probe.consumer.js.map +1 -1
- package/dist/worker/runners/llm-runner.d.ts +3 -1
- package/dist/worker/runners/llm-runner.d.ts.map +1 -1
- package/dist/worker/runners/llm-runner.js +110 -55
- package/dist/worker/runners/llm-runner.js.map +1 -1
- package/dist/worker/runners/probe-runner.d.ts +9 -2
- package/dist/worker/runners/probe-runner.d.ts.map +1 -1
- package/dist/worker/runners/probe-runner.js +46 -2
- package/dist/worker/runners/probe-runner.js.map +1 -1
- package/dist/worker/runners/run-result-writer.d.ts +4 -1
- package/dist/worker/runners/run-result-writer.d.ts.map +1 -1
- package/dist/worker/runners/run-result-writer.js +63 -13
- package/dist/worker/runners/run-result-writer.js.map +1 -1
- package/package.json +12 -12
|
@@ -18,17 +18,20 @@ const bullmq_1 = require("@nestjs/bullmq");
|
|
|
18
18
|
const limiter_1 = require("@proofhound/limiter");
|
|
19
19
|
const logger_1 = require("@proofhound/logger");
|
|
20
20
|
const orchestration_shared_1 = require("@proofhound/orchestration-shared");
|
|
21
|
+
const shared_1 = require("@proofhound/shared");
|
|
21
22
|
const bullmq_2 = require("bullmq");
|
|
22
23
|
const limiter_key_strategy_1 = require("../../server/common/contracts/limiter-key.strategy");
|
|
23
24
|
const quota_policy_hook_1 = require("../../server/common/contracts/quota-policy.hook");
|
|
24
25
|
const runtime_limits_provider_1 = require("../../server/common/contracts/runtime-limits.provider");
|
|
26
|
+
const usage_metering_hook_1 = require("../../server/common/contracts/usage-metering.hook");
|
|
25
27
|
const database_constants_1 = require("../../shared/database/database.constants");
|
|
26
28
|
const model_secret_provider_1 = require("../infrastructure/llm/model-secret.provider");
|
|
27
29
|
const redis_constants_1 = require("../../shared/redis/redis.constants");
|
|
28
30
|
const probe_runner_1 = require("../runners/probe-runner");
|
|
29
31
|
let ProbeConsumer = class ProbeConsumer extends bullmq_1.WorkerHost {
|
|
30
|
-
constructor(db, limiter, modelSecretResolver, limiterKeyStrategy, quotaPolicy, runtimeLimitsProvider) {
|
|
32
|
+
constructor(db, limiter, modelSecretResolver, limiterKeyStrategy, quotaPolicy, runtimeLimitsProvider, usageMetering) {
|
|
31
33
|
super();
|
|
34
|
+
this.usageMetering = usageMetering;
|
|
32
35
|
this.logger = (0, logger_1.createLogger)('worker.probe', { service: 'worker' });
|
|
33
36
|
this.runProbeJob = (0, probe_runner_1.createProbeRunner)({
|
|
34
37
|
db,
|
|
@@ -36,6 +39,7 @@ let ProbeConsumer = class ProbeConsumer extends bullmq_1.WorkerHost {
|
|
|
36
39
|
limiterKeyStrategy,
|
|
37
40
|
quotaPolicy,
|
|
38
41
|
runtimeLimitsProvider,
|
|
42
|
+
usageMetering,
|
|
39
43
|
logger: this.logger,
|
|
40
44
|
modelSecretResolver,
|
|
41
45
|
});
|
|
@@ -43,11 +47,16 @@ let ProbeConsumer = class ProbeConsumer extends bullmq_1.WorkerHost {
|
|
|
43
47
|
async process(job, token) {
|
|
44
48
|
const payload = orchestration_shared_1.probeJobPayloadSchema.parse(job.data);
|
|
45
49
|
try {
|
|
46
|
-
return await this.runProbeJob(payload
|
|
50
|
+
return await this.runProbeJob(payload, {
|
|
51
|
+
bullmqJobId: String(job.id),
|
|
52
|
+
bullmqQueue: 'probe',
|
|
53
|
+
attempt: job.attemptsMade + 1,
|
|
54
|
+
});
|
|
47
55
|
}
|
|
48
56
|
catch (error) {
|
|
49
57
|
if (error instanceof limiter_1.RateLimitExceededError) {
|
|
50
58
|
const delayMs = Math.max(error.retryAfterMs, 1_000);
|
|
59
|
+
await this.recordRateLimited(payload, job, error, delayMs);
|
|
51
60
|
this.logger.info({
|
|
52
61
|
bullmqJobId: String(job.id),
|
|
53
62
|
modelId: payload.modelId,
|
|
@@ -61,6 +70,28 @@ let ProbeConsumer = class ProbeConsumer extends bullmq_1.WorkerHost {
|
|
|
61
70
|
throw error;
|
|
62
71
|
}
|
|
63
72
|
}
|
|
73
|
+
async recordRateLimited(payload, job, error, delayMs) {
|
|
74
|
+
const attempt = job.attemptsMade + 1;
|
|
75
|
+
await (0, usage_metering_hook_1.safeRecordUsageEvent)(this.usageMetering, {
|
|
76
|
+
idempotencyKey: `job:probe:${String(job.id)}:${attempt}:job.rate_limited`,
|
|
77
|
+
dimension: 'job',
|
|
78
|
+
eventType: 'job.rate_limited',
|
|
79
|
+
projectId: payload.projectId ?? shared_1.LOCAL_PROJECT_ID,
|
|
80
|
+
occurredAt: new Date(),
|
|
81
|
+
source: 'worker',
|
|
82
|
+
payload: {
|
|
83
|
+
queue: 'probe',
|
|
84
|
+
jobId: String(job.id),
|
|
85
|
+
attempt,
|
|
86
|
+
modelId: payload.modelId,
|
|
87
|
+
source: 'probe',
|
|
88
|
+
status: 'rate_limited',
|
|
89
|
+
errorKind: error.reason,
|
|
90
|
+
retryAfterMs: error.retryAfterMs,
|
|
91
|
+
delayMs,
|
|
92
|
+
},
|
|
93
|
+
}, this.logger);
|
|
94
|
+
}
|
|
64
95
|
};
|
|
65
96
|
exports.ProbeConsumer = ProbeConsumer;
|
|
66
97
|
exports.ProbeConsumer = ProbeConsumer = __decorate([
|
|
@@ -71,6 +102,7 @@ exports.ProbeConsumer = ProbeConsumer = __decorate([
|
|
|
71
102
|
__param(2, (0, common_1.Inject)(model_secret_provider_1.MODEL_SECRET_RESOLVER)),
|
|
72
103
|
__metadata("design:paramtypes", [Object, Object, Object, limiter_key_strategy_1.LimiterKeyStrategy,
|
|
73
104
|
quota_policy_hook_1.QuotaPolicyHook,
|
|
74
|
-
runtime_limits_provider_1.RuntimeLimitsProvider
|
|
105
|
+
runtime_limits_provider_1.RuntimeLimitsProvider,
|
|
106
|
+
usage_metering_hook_1.UsageMeteringHook])
|
|
75
107
|
], ProbeConsumer);
|
|
76
108
|
//# sourceMappingURL=probe.consumer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.consumer.js","sourceRoot":"","sources":["../../../src/worker/consumers/probe.consumer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,2CAAuD;AAEvD,iDAA+E;AAE/E,+CAAkD;AAClD,2EAA+F;AAC/F,mCAAgD;AAChD,6FAAwF;AACxF,uFAAkF;AAClF,mGAA8F;AAC9F,iFAA2E;AAC3E,uFAAoF;AACpF,wEAAmE;AACnE,0DAA4D;AAKrD,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,mBAAU;IAI3C,YAC2B,EAAY,EACd,OAAoB,EACZ,mBAAwC,EACvE,kBAAsC,EACtC,WAA4B,EAC5B,qBAA4C;
|
|
1
|
+
{"version":3,"file":"probe.consumer.js","sourceRoot":"","sources":["../../../src/worker/consumers/probe.consumer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { DbClient } from '@proofhound/db';
|
|
2
|
-
import type
|
|
2
|
+
import { type RateLimiter } from '@proofhound/limiter';
|
|
3
3
|
import { type LLMCallLogger, type ModelInvocationConfig } from '@proofhound/llm-client';
|
|
4
4
|
import type { LlmJobPayload } from '@proofhound/orchestration-shared';
|
|
5
5
|
import type { LimiterKeyStrategy } from '../../server/common/contracts/limiter-key.strategy';
|
|
6
6
|
import type { QuotaPolicyHook } from '../../server/common/contracts/quota-policy.hook';
|
|
7
7
|
import type { RuntimeLimitsProvider } from '../../server/common/contracts/runtime-limits.provider';
|
|
8
|
+
import { type UsageMeteringHook } from '../../server/common/contracts/usage-metering.hook';
|
|
8
9
|
import type { ModelSecretResolver } from './model-secret';
|
|
9
10
|
export interface LlmRunnerDependencies {
|
|
10
11
|
db: DbClient;
|
|
@@ -12,6 +13,7 @@ export interface LlmRunnerDependencies {
|
|
|
12
13
|
limiterKeyStrategy: LimiterKeyStrategy;
|
|
13
14
|
quotaPolicy: QuotaPolicyHook;
|
|
14
15
|
runtimeLimitsProvider: RuntimeLimitsProvider;
|
|
16
|
+
usageMetering: UsageMeteringHook;
|
|
15
17
|
logger: LLMCallLogger;
|
|
16
18
|
modelSecretResolver: ModelSecretResolver;
|
|
17
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-runner.d.ts","sourceRoot":"","sources":["../../../src/worker/runners/llm-runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"llm-runner.d.ts","sourceRoot":"","sources":["../../../src/worker/runners/llm-runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAIL,KAAK,aAAa,EAIlB,KAAK,qBAAqB,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AACvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AACnG,OAAO,EAAwB,KAAK,iBAAiB,EAAE,MAAM,mDAAmD,CAAC;AAEjH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,QAAQ,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,WAAW,EAAE,eAAe,CAAC;IAC7B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,aAAa,EAAE,iBAAiB,CAAC;IACjC,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,qBAAqB,IAGzB,OAAO,aAAa,EAAE,YAAY,mBAAmB,KAAG,OAAO,CAAC,eAAe,CAAC,CAoKjH;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,GAAG,qBAAqB,CAAC,EAC/D,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,CAAC,CAsBhC;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAC9B,qBAAqB,CAEvB"}
|
|
@@ -7,13 +7,32 @@ const node_crypto_1 = require("node:crypto");
|
|
|
7
7
|
const drizzle_orm_1 = require("drizzle-orm");
|
|
8
8
|
const db_1 = require("@proofhound/db");
|
|
9
9
|
const judgment_1 = require("@proofhound/judgment");
|
|
10
|
+
const limiter_1 = require("@proofhound/limiter");
|
|
10
11
|
const llm_client_1 = require("@proofhound/llm-client");
|
|
12
|
+
const usage_metering_hook_1 = require("../../server/common/contracts/usage-metering.hook");
|
|
11
13
|
const runtime_limits_1 = require("../../shared/llm/runtime-limits");
|
|
12
14
|
const run_result_writer_1 = require("./run-result-writer");
|
|
13
15
|
function createLlmRunner(deps) {
|
|
14
|
-
const runResultWriter = new run_result_writer_1.DrizzleRunResultWriter(deps.db, deps.quotaPolicy);
|
|
16
|
+
const runResultWriter = new run_result_writer_1.DrizzleRunResultWriter(deps.db, deps.quotaPolicy, deps.usageMetering);
|
|
15
17
|
return async function runLlmJob(input, jobContext) {
|
|
16
18
|
const runResultId = input.runResultId ?? (0, node_crypto_1.randomUUID)();
|
|
19
|
+
const basePayload = {
|
|
20
|
+
queue: jobContext.bullmqQueue,
|
|
21
|
+
jobId: jobContext.bullmqJobId,
|
|
22
|
+
attempt: jobContext.attempt,
|
|
23
|
+
runResultId,
|
|
24
|
+
modelId: input.modelId,
|
|
25
|
+
source: input.source,
|
|
26
|
+
};
|
|
27
|
+
const recordJobEvent = (eventType, payload) => (0, usage_metering_hook_1.safeRecordUsageEvent)(deps.usageMetering, {
|
|
28
|
+
idempotencyKey: `job:${jobContext.bullmqQueue}:${jobContext.bullmqJobId}:${jobContext.attempt}:${eventType}`,
|
|
29
|
+
dimension: 'job',
|
|
30
|
+
eventType,
|
|
31
|
+
projectId: input.projectId,
|
|
32
|
+
occurredAt: new Date(),
|
|
33
|
+
source: 'worker',
|
|
34
|
+
payload: { ...basePayload, ...payload },
|
|
35
|
+
}, deps.logger);
|
|
17
36
|
const model = await loadModelInvocationConfig(deps, input.modelId);
|
|
18
37
|
// Fold any deployment-level runtime caps (a SaaS org plan's ceiling, SPEC 08 §3.10) into the per-call limits at the
|
|
19
38
|
// single worker enforcement point, so every job source (experiment / optimization child / release / webhook) is
|
|
@@ -28,6 +47,7 @@ function createLlmRunner(deps) {
|
|
|
28
47
|
// a positive runtime cap still applies. Concurrency remains a positive min(model, runtime) value.
|
|
29
48
|
const effectiveModel = applyExperimentLimits(model, mergedLimits);
|
|
30
49
|
const expectedOutput = input.judgment?.expectedOutput ?? null;
|
|
50
|
+
const hasExpectedOutput = input.judgment?.expectedOutput !== undefined && input.judgment.expectedOutput !== null;
|
|
31
51
|
const evaluateJudgmentHook = input.judgment
|
|
32
52
|
? ({ parsed }) => {
|
|
33
53
|
const outcome = (0, judgment_1.evaluateJudgment)('classification', parsed, {
|
|
@@ -35,66 +55,101 @@ function createLlmRunner(deps) {
|
|
|
35
55
|
judgmentRules: input.judgment.judgmentRules,
|
|
36
56
|
expectedOutput: input.judgment.expectedOutput,
|
|
37
57
|
});
|
|
58
|
+
if (input.source === 'release' && !hasExpectedOutput) {
|
|
59
|
+
return {
|
|
60
|
+
decisionOutput: outcome.decisionOutput,
|
|
61
|
+
isCorrect: null,
|
|
62
|
+
judgmentStatus: outcome.judgmentStatus === 'parse_error' ? 'parse_error' : null,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
38
65
|
return outcome;
|
|
39
66
|
}
|
|
40
67
|
: undefined;
|
|
41
68
|
// Build the rate-limit key at the runtime layer (§3.7); llm-client/limiter stay project-unaware (§8).
|
|
42
69
|
const project = { projectId: input.projectId, orgId: input.orgId, source: 'local' };
|
|
43
70
|
const limiterKey = deps.limiterKeyStrategy.buildModelKey(project, input.modelId);
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
71
|
+
let result;
|
|
72
|
+
try {
|
|
73
|
+
result = await deps.quotaPolicy.withExecutionSlot({ project, source: input.source, modelId: input.modelId, requestId: input.requestId }, () => (0, llm_client_1.invokeLLM)({
|
|
74
|
+
model: effectiveModel,
|
|
75
|
+
limiterKey,
|
|
76
|
+
messages: input.renderedPrompt.messages,
|
|
77
|
+
prompt: input.renderedPrompt.prompt,
|
|
78
|
+
params: {
|
|
79
|
+
temperature: input.inference?.temperature,
|
|
80
|
+
maxTokens: input.inference?.maxTokens,
|
|
81
|
+
topP: input.inference?.topP,
|
|
82
|
+
tools: input.renderedPrompt.tools,
|
|
83
|
+
responseFormat: input.renderedPrompt.responseFormat,
|
|
84
|
+
imageRefs: input.renderedPrompt.imageRefs,
|
|
85
|
+
apiVersion: input.inference?.apiVersion,
|
|
86
|
+
},
|
|
87
|
+
maxRetries: input.retry?.maxRetries,
|
|
88
|
+
context: {
|
|
89
|
+
requestId: input.requestId,
|
|
90
|
+
dbosWorkflowId: jobContext.dbosWorkflowId,
|
|
91
|
+
bullmqJobId: jobContext.bullmqJobId,
|
|
92
|
+
bullmqQueue: jobContext.bullmqQueue,
|
|
93
|
+
stepName: jobContext.stepName,
|
|
94
|
+
runResultId,
|
|
95
|
+
promptId: input.promptId,
|
|
96
|
+
promptVersionId: input.promptVersionId,
|
|
97
|
+
source: input.source,
|
|
98
|
+
attempt: jobContext.attempt,
|
|
99
|
+
},
|
|
100
|
+
runResult: {
|
|
101
|
+
id: runResultId,
|
|
102
|
+
projectId: input.projectId,
|
|
103
|
+
source: input.source,
|
|
104
|
+
sourceId: input.sourceId,
|
|
105
|
+
releaseVersionId: input.releaseVersionId ?? null,
|
|
106
|
+
promptVersionId: input.promptVersionId,
|
|
107
|
+
modelId: input.modelId,
|
|
108
|
+
sampleId: input.sampleId ?? null,
|
|
109
|
+
externalId: input.externalId ?? null,
|
|
110
|
+
renderedPrompt: normalizeRenderedPrompt(input.renderedPrompt),
|
|
111
|
+
inputVariables: input.inputVariables,
|
|
112
|
+
expectedOutput: expectedOutputAsString(expectedOutput),
|
|
113
|
+
dbosWorkflowId: jobContext.dbosWorkflowId,
|
|
114
|
+
bullmqJobId: jobContext.bullmqJobId,
|
|
115
|
+
attempt: jobContext.attempt,
|
|
116
|
+
webhookTokenId: input.webhookTokenId ?? null,
|
|
117
|
+
},
|
|
118
|
+
// The judgment strategy expects a parsed[expected_field]-style structure; when parseResponse is not provided, parsed=undefined,
|
|
119
|
+
// and the whole metrics is unreliable. Parse strict JSON first; on failure, fall back to parsing a Markdown JSON fence.
|
|
120
|
+
parseResponse: llm_client_1.parseJsonResponseWithMarkdownFallback,
|
|
121
|
+
evaluateJudgment: evaluateJudgmentHook,
|
|
122
|
+
}, {
|
|
123
|
+
limiter: deps.limiter,
|
|
124
|
+
logger: deps.logger,
|
|
125
|
+
runResultWriter,
|
|
126
|
+
onLimiterAcquired: (context) => {
|
|
127
|
+
const acquireResult = context.acquireResult && typeof context.acquireResult === 'object' ? context.acquireResult : null;
|
|
128
|
+
return recordJobEvent('job.started', {
|
|
129
|
+
status: 'started',
|
|
130
|
+
limiterKey: context.key,
|
|
131
|
+
estimatedTokens: context.estimatedTokens,
|
|
132
|
+
effectiveConcurrency: acquireResult?.effectiveConcurrency ?? null,
|
|
133
|
+
});
|
|
134
|
+
},
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (error instanceof limiter_1.RateLimitExceededError)
|
|
139
|
+
throw error;
|
|
140
|
+
await recordJobEvent('job.attempt_failed', {
|
|
141
|
+
status: 'failed',
|
|
142
|
+
errorKind: error instanceof Error ? error.name : 'Error',
|
|
143
|
+
});
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
146
|
+
await recordJobEvent('job.completed', {
|
|
147
|
+
status: 'completed',
|
|
148
|
+
latencyMs: result.durationMs,
|
|
149
|
+
inputTokens: result.usage.inputTokens,
|
|
150
|
+
outputTokens: result.usage.outputTokens,
|
|
151
|
+
costEstimate: result.costEstimate,
|
|
152
|
+
});
|
|
98
153
|
return {
|
|
99
154
|
runResultId,
|
|
100
155
|
content: result.content,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-runner.js","sourceRoot":"","sources":["../../../src/worker/runners/llm-runner.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"llm-runner.js","sourceRoot":"","sources":["../../../src/worker/runners/llm-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { DbClient } from '@proofhound/db';
|
|
2
|
-
import type
|
|
2
|
+
import { type RateLimiter } from '@proofhound/limiter';
|
|
3
3
|
import { type LLMCallLogger, type ModelConnectivityProbeResult } from '@proofhound/llm-client';
|
|
4
4
|
import type { ProbeJobPayload } from '@proofhound/orchestration-shared';
|
|
5
5
|
import type { LimiterKeyStrategy } from '../../server/common/contracts/limiter-key.strategy';
|
|
6
6
|
import type { QuotaPolicyHook } from '../../server/common/contracts/quota-policy.hook';
|
|
7
7
|
import type { RuntimeLimitsProvider } from '../../server/common/contracts/runtime-limits.provider';
|
|
8
|
+
import { type UsageMeteringHook } from '../../server/common/contracts/usage-metering.hook';
|
|
8
9
|
import type { ModelSecretResolver } from './model-secret';
|
|
9
10
|
export interface ProbeRunnerDependencies {
|
|
10
11
|
db: DbClient;
|
|
@@ -12,10 +13,16 @@ export interface ProbeRunnerDependencies {
|
|
|
12
13
|
limiterKeyStrategy: LimiterKeyStrategy;
|
|
13
14
|
quotaPolicy: QuotaPolicyHook;
|
|
14
15
|
runtimeLimitsProvider: RuntimeLimitsProvider;
|
|
16
|
+
usageMetering: UsageMeteringHook;
|
|
15
17
|
logger: LLMCallLogger;
|
|
16
18
|
modelSecretResolver: ModelSecretResolver;
|
|
17
19
|
}
|
|
18
|
-
export
|
|
20
|
+
export interface ProbeRunnerJobContext {
|
|
21
|
+
bullmqJobId: string;
|
|
22
|
+
bullmqQueue: string;
|
|
23
|
+
attempt: number;
|
|
24
|
+
}
|
|
25
|
+
export declare function createProbeRunner(deps: ProbeRunnerDependencies): (input: ProbeJobPayload, jobContext: ProbeRunnerJobContext) => Promise<ModelConnectivityProbeResult>;
|
|
19
26
|
export declare function listActiveModelIdsForProbe(db: DbClient, options?: {
|
|
20
27
|
limit?: number;
|
|
21
28
|
}): Promise<string[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe-runner.d.ts","sourceRoot":"","sources":["../../../src/worker/runners/probe-runner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"probe-runner.d.ts","sourceRoot":"","sources":["../../../src/worker/runners/probe-runner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAyB,KAAK,aAAa,EAAE,KAAK,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAEtH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AACvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AACnG,OAAO,EAAwB,KAAK,iBAAiB,EAAE,MAAM,mDAAmD,CAAC;AAGjH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,QAAQ,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,WAAW,EAAE,eAAe,CAAC;IAC7B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,aAAa,EAAE,iBAAiB,CAAC;IACjC,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,uBAAuB,IAE3D,OAAO,eAAe,EACtB,YAAY,qBAAqB,KAChC,OAAO,CAAC,4BAA4B,CAAC,CA8EzC;AAWD,wBAAsB,0BAA0B,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASlH"}
|
|
@@ -4,14 +4,32 @@ exports.createProbeRunner = createProbeRunner;
|
|
|
4
4
|
exports.listActiveModelIdsForProbe = listActiveModelIdsForProbe;
|
|
5
5
|
const drizzle_orm_1 = require("drizzle-orm");
|
|
6
6
|
const db_1 = require("@proofhound/db");
|
|
7
|
+
const limiter_1 = require("@proofhound/limiter");
|
|
7
8
|
const llm_client_1 = require("@proofhound/llm-client");
|
|
8
9
|
const shared_1 = require("@proofhound/shared");
|
|
10
|
+
const usage_metering_hook_1 = require("../../server/common/contracts/usage-metering.hook");
|
|
9
11
|
const runtime_limits_1 = require("../../shared/llm/runtime-limits");
|
|
10
12
|
const llm_runner_1 = require("./llm-runner");
|
|
11
13
|
function createProbeRunner(deps) {
|
|
12
|
-
return async function runProbeJob(input) {
|
|
14
|
+
return async function runProbeJob(input, jobContext) {
|
|
13
15
|
const model = await (0, llm_runner_1.loadModelInvocationConfig)(deps, input.modelId);
|
|
14
16
|
const project = toProbeProjectContext(input);
|
|
17
|
+
const recordJobEvent = (eventType, payload) => (0, usage_metering_hook_1.safeRecordUsageEvent)(deps.usageMetering, {
|
|
18
|
+
idempotencyKey: `job:${jobContext.bullmqQueue}:${jobContext.bullmqJobId}:${jobContext.attempt}:${eventType}`,
|
|
19
|
+
dimension: 'job',
|
|
20
|
+
eventType,
|
|
21
|
+
projectId: project.projectId,
|
|
22
|
+
occurredAt: new Date(),
|
|
23
|
+
source: 'worker',
|
|
24
|
+
payload: {
|
|
25
|
+
queue: jobContext.bullmqQueue,
|
|
26
|
+
jobId: jobContext.bullmqJobId,
|
|
27
|
+
attempt: jobContext.attempt,
|
|
28
|
+
modelId: input.modelId,
|
|
29
|
+
source: 'probe',
|
|
30
|
+
...payload,
|
|
31
|
+
},
|
|
32
|
+
}, deps.logger);
|
|
15
33
|
const mergedLimits = await deps.runtimeLimitsProvider.mergeLlmLimits({
|
|
16
34
|
project,
|
|
17
35
|
modelId: input.modelId,
|
|
@@ -20,7 +38,33 @@ function createProbeRunner(deps) {
|
|
|
20
38
|
const effectiveModel = (0, runtime_limits_1.applyRuntimeLimits)(model, mergedLimits);
|
|
21
39
|
// Same key as the LLM runner so a probe shares the model's rate-limit counting space (§3.7).
|
|
22
40
|
const limiterKey = deps.limiterKeyStrategy.buildModelKey(project, input.modelId);
|
|
23
|
-
|
|
41
|
+
let result;
|
|
42
|
+
try {
|
|
43
|
+
result = await deps.quotaPolicy.withExecutionSlot({ project, source: 'probe', modelId: input.modelId, requestId: input.requestId }, () => (0, llm_client_1.testModelConnectivity)({ model: effectiveModel, limiterKey, requestId: input.requestId, timeoutMs: input.timeoutMs }, {
|
|
44
|
+
limiter: deps.limiter,
|
|
45
|
+
logger: deps.logger,
|
|
46
|
+
rethrowRateLimit: true,
|
|
47
|
+
onLimiterAcquired: (context) => recordJobEvent('job.started', {
|
|
48
|
+
status: 'started',
|
|
49
|
+
limiterKey: context.key,
|
|
50
|
+
estimatedTokens: context.estimatedTokens,
|
|
51
|
+
}),
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
if (error instanceof limiter_1.RateLimitExceededError)
|
|
56
|
+
throw error;
|
|
57
|
+
await recordJobEvent('job.failed', {
|
|
58
|
+
status: 'failed',
|
|
59
|
+
errorKind: error instanceof Error ? error.name : 'Error',
|
|
60
|
+
});
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
63
|
+
await recordJobEvent('job.completed', {
|
|
64
|
+
status: result.ok ? 'completed' : 'failed',
|
|
65
|
+
latencyMs: result.durationMs,
|
|
66
|
+
errorKind: result.ok ? null : (result.errorClass ?? 'probe_failed'),
|
|
67
|
+
});
|
|
24
68
|
await deps.db
|
|
25
69
|
.update(db_1.schema.models)
|
|
26
70
|
.set({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe-runner.js","sourceRoot":"","sources":["../../../src/worker/runners/probe-runner.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"probe-runner.js","sourceRoot":"","sources":["../../../src/worker/runners/probe-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { DbClient } from '@proofhound/db';
|
|
2
2
|
import type { LLMRunResultRecord, LLMRunResultWriter } from '@proofhound/llm-client';
|
|
3
3
|
import type { QuotaPolicyHook } from '../../server/common/contracts/quota-policy.hook';
|
|
4
|
+
import { type UsageMeteringHook } from '../../server/common/contracts/usage-metering.hook';
|
|
4
5
|
export declare class DrizzleRunResultWriter implements LLMRunResultWriter {
|
|
5
6
|
private readonly db;
|
|
6
7
|
private readonly quotaPolicy;
|
|
7
|
-
|
|
8
|
+
private readonly usageMetering?;
|
|
9
|
+
private readonly logger;
|
|
10
|
+
constructor(db: DbClient, quotaPolicy: QuotaPolicyHook, usageMetering?: UsageMeteringHook | undefined);
|
|
8
11
|
writeRunResult(record: LLMRunResultRecord): Promise<void>;
|
|
9
12
|
}
|
|
10
13
|
//# sourceMappingURL=run-result-writer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-result-writer.d.ts","sourceRoot":"","sources":["../../../src/worker/runners/run-result-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-result-writer.d.ts","sourceRoot":"","sources":["../../../src/worker/runners/run-result-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAErF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AACvF,OAAO,EAAwB,KAAK,iBAAiB,EAAE,MAAM,mDAAmD,CAAC;AAMjH,qBAAa,sBAAuB,YAAW,kBAAkB;IAI7D,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IALjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmE;gBAGvE,EAAE,EAAE,QAAQ,EACZ,WAAW,EAAE,eAAe,EAC5B,aAAa,CAAC,EAAE,iBAAiB,YAAA;IAG9C,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CA2FhE"}
|