@proofhound/llm-client 0.1.6

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.
Files changed (50) hide show
  1. package/LICENSE +190 -0
  2. package/dist/cost.d.ts +10 -0
  3. package/dist/cost.d.ts.map +1 -0
  4. package/dist/cost.js +31 -0
  5. package/dist/cost.js.map +1 -0
  6. package/dist/image-preprocess.d.ts +6 -0
  7. package/dist/image-preprocess.d.ts.map +1 -0
  8. package/dist/image-preprocess.js +286 -0
  9. package/dist/image-preprocess.js.map +1 -0
  10. package/dist/index.d.ts +8 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +26 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/invoke-streaming.d.ts +2 -0
  15. package/dist/invoke-streaming.d.ts.map +1 -0
  16. package/dist/invoke-streaming.js +3 -0
  17. package/dist/invoke-streaming.js.map +1 -0
  18. package/dist/invoke.d.ts +13 -0
  19. package/dist/invoke.d.ts.map +1 -0
  20. package/dist/invoke.js +706 -0
  21. package/dist/invoke.js.map +1 -0
  22. package/dist/json-parse.d.ts +2 -0
  23. package/dist/json-parse.d.ts.map +1 -0
  24. package/dist/json-parse.js +35 -0
  25. package/dist/json-parse.js.map +1 -0
  26. package/dist/payload-cap.d.ts +15 -0
  27. package/dist/payload-cap.d.ts.map +1 -0
  28. package/dist/payload-cap.js +27 -0
  29. package/dist/payload-cap.js.map +1 -0
  30. package/dist/providers/anthropic.adapter.d.ts +5 -0
  31. package/dist/providers/anthropic.adapter.d.ts.map +1 -0
  32. package/dist/providers/anthropic.adapter.js +145 -0
  33. package/dist/providers/anthropic.adapter.js.map +1 -0
  34. package/dist/providers/azure-openai.adapter.d.ts +4 -0
  35. package/dist/providers/azure-openai.adapter.d.ts.map +1 -0
  36. package/dist/providers/azure-openai.adapter.js +39 -0
  37. package/dist/providers/azure-openai.adapter.js.map +1 -0
  38. package/dist/providers/openai.adapter.d.ts +11 -0
  39. package/dist/providers/openai.adapter.d.ts.map +1 -0
  40. package/dist/providers/openai.adapter.js +126 -0
  41. package/dist/providers/openai.adapter.js.map +1 -0
  42. package/dist/token-estimate.d.ts +15 -0
  43. package/dist/token-estimate.d.ts.map +1 -0
  44. package/dist/token-estimate.js +25 -0
  45. package/dist/token-estimate.js.map +1 -0
  46. package/dist/types.d.ts +245 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +3 -0
  49. package/dist/types.js.map +1 -0
  50. package/package.json +46 -0
@@ -0,0 +1,245 @@
1
+ import type { PromptLanguageDto } from '@proofhound/shared';
2
+ export type LLMSource = 'experiment' | 'optimization_analysis' | 'optimization_generate' | 'release';
3
+ export type LLMRunStatus = 'success' | 'error' | 'timeout' | 'rate_limited';
4
+ export interface LLMMessage {
5
+ role: 'system' | 'user' | 'assistant' | 'tool';
6
+ content: string | Array<Record<string, unknown>>;
7
+ name?: string;
8
+ toolCallId?: string;
9
+ }
10
+ export interface LLMInferenceParams {
11
+ temperature?: number;
12
+ maxTokens?: number;
13
+ topP?: number;
14
+ tools?: unknown;
15
+ responseFormat?: unknown;
16
+ imageRefs?: unknown;
17
+ imagePreprocess?: LLMImagePreprocessOptions | false;
18
+ apiVersion?: string;
19
+ }
20
+ export interface LLMImagePreprocessOptions {
21
+ maxEdgePixels?: number;
22
+ maxOutputBytes?: number;
23
+ maxInputBytes?: number;
24
+ jpegQuality?: number;
25
+ minJpegQuality?: number;
26
+ }
27
+ export interface ModelInvocationConfig {
28
+ id: string;
29
+ providerType: string;
30
+ providerModelId: string;
31
+ endpoint: string;
32
+ apiKey: string;
33
+ capabilities?: ModelInvocationCapabilities;
34
+ rpmLimit: number;
35
+ tpmLimit: number;
36
+ concurrencyLimit: number;
37
+ autoConcurrency: boolean;
38
+ inputTokenPricePerMillion: number | string;
39
+ outputTokenPricePerMillion: number | string;
40
+ extraBody?: Record<string, unknown>;
41
+ }
42
+ export type ModelImageCapability = 'none' | 'url' | 'base64' | 'both';
43
+ export interface ModelInvocationCapabilities {
44
+ image: ModelImageCapability;
45
+ }
46
+ export interface LLMCallContext {
47
+ requestId?: string;
48
+ dbosWorkflowId?: string;
49
+ bullmqJobId?: string;
50
+ bullmqQueue?: string;
51
+ stepName?: string;
52
+ runResultId?: string;
53
+ promptId?: string;
54
+ promptVersionId?: string;
55
+ promptLanguage?: PromptLanguageDto;
56
+ source?: LLMSource;
57
+ attempt?: number;
58
+ }
59
+ export interface RunResultContext {
60
+ id: string;
61
+ projectId: string;
62
+ source: LLMSource;
63
+ sourceId: string;
64
+ releaseVariantId?: string | null;
65
+ promptVersionId: string;
66
+ modelId: string;
67
+ sampleId?: string | null;
68
+ externalId?: string | null;
69
+ renderedPrompt: unknown;
70
+ inputVariables?: unknown;
71
+ expectedOutput?: string | null;
72
+ dbosWorkflowId?: string | null;
73
+ bullmqJobId?: string | null;
74
+ attempt: number;
75
+ roundIndex?: number | null;
76
+ webhookTokenId?: string | null;
77
+ }
78
+ export interface LLMJudgmentOutcome {
79
+ decisionOutput?: string | null;
80
+ isCorrect?: boolean | null;
81
+ judgmentStatus?: LLMJudgmentStatus | null;
82
+ }
83
+ export interface InvokeLLMArgs {
84
+ model: ModelInvocationConfig;
85
+ /**
86
+ * Opaque rate-limit key, built by the caller via LimiterKeyStrategy (SPEC 08 §3.7).
87
+ * llm-client forwards it to the limiter and never inspects project/actor.
88
+ */
89
+ limiterKey: string;
90
+ messages?: LLMMessage[];
91
+ prompt?: string;
92
+ params?: LLMInferenceParams;
93
+ context?: LLMCallContext;
94
+ runResult?: RunResultContext;
95
+ timeoutMs?: number;
96
+ /**
97
+ * Per-sample internal retry count (applies to retryable HTTP statuses + network errors).
98
+ * Does not affect BullMQ job-level attempts; RateLimitExceededError passes through and is not swallowed.
99
+ * Defaults to 0 (backward compatible).
100
+ */
101
+ maxRetries?: number;
102
+ parseResponse?: (content: string) => unknown;
103
+ evaluateJudgment?: (args: {
104
+ parsed: unknown;
105
+ rawResponse: string;
106
+ }) => LLMJudgmentOutcome;
107
+ }
108
+ export interface AdapterInvokeArgs {
109
+ model: ModelInvocationConfig;
110
+ messages?: LLMMessage[];
111
+ prompt?: string;
112
+ params: LLMInferenceParams;
113
+ signal?: AbortSignal;
114
+ }
115
+ export interface AdapterInvokeResult {
116
+ content: string;
117
+ rawResponse: unknown;
118
+ finishReason?: string | null;
119
+ usage: {
120
+ inputTokens?: number | null;
121
+ outputTokens?: number | null;
122
+ };
123
+ }
124
+ export interface AdapterRequestLog {
125
+ method: string;
126
+ url: string;
127
+ body?: unknown;
128
+ headers?: Record<string, string>;
129
+ }
130
+ export interface LLMAdapter {
131
+ providerType: string;
132
+ invoke(args: AdapterInvokeArgs): Promise<AdapterInvokeResult>;
133
+ buildRequestLog?(args: AdapterInvokeArgs): AdapterRequestLog;
134
+ }
135
+ export type LLMJudgmentStatus = 'correct' | 'incorrect' | 'parse_error' | 'judge_error';
136
+ export interface LLMRunResultRecord {
137
+ id: string;
138
+ projectId: string;
139
+ source: LLMSource;
140
+ sourceId: string;
141
+ releaseVariantId?: string | null;
142
+ promptVersionId: string;
143
+ modelId: string;
144
+ sampleId?: string | null;
145
+ externalId?: string | null;
146
+ renderedPrompt: unknown;
147
+ inputVariables?: unknown;
148
+ rawResponse?: string | null;
149
+ parsedOutput?: unknown;
150
+ decisionOutput?: string | null;
151
+ expectedOutput?: string | null;
152
+ isCorrect?: boolean | null;
153
+ judgmentStatus?: LLMJudgmentStatus | null;
154
+ status: LLMRunStatus;
155
+ errorClass?: string | null;
156
+ errorMessage?: string | null;
157
+ latencyMs?: number | null;
158
+ inputTokens?: number | null;
159
+ outputTokens?: number | null;
160
+ costEstimate?: number | null;
161
+ attempt: number;
162
+ dbosWorkflowId?: string | null;
163
+ bullmqJobId?: string | null;
164
+ roundIndex?: number | null;
165
+ webhookTokenId?: string | null;
166
+ }
167
+ export interface LLMRunResultWriter {
168
+ writeRunResult(record: LLMRunResultRecord): Promise<void>;
169
+ }
170
+ export interface RateLimiterAcquireResult {
171
+ effectiveConcurrency: number;
172
+ backoffFactor: number;
173
+ latencyEwmaMs: number;
174
+ }
175
+ export interface RateLimiterLike {
176
+ acquire(args: {
177
+ key: string;
178
+ estimatedTokens: number;
179
+ limits: {
180
+ rpmLimit: number;
181
+ tpmLimit: number;
182
+ concurrencyLimit: number;
183
+ };
184
+ autoConcurrency?: boolean;
185
+ }): Promise<RateLimiterAcquireResult | void>;
186
+ release(args: {
187
+ key: string;
188
+ }): Promise<void>;
189
+ reportOutcome?(args: {
190
+ key: string;
191
+ kind: 'success' | 'upstream_throttle';
192
+ latencyMs?: number;
193
+ tokens?: number;
194
+ }): Promise<void>;
195
+ }
196
+ export interface LLMCallLogger {
197
+ debug?(payload: Record<string, unknown>, message: string): void;
198
+ info(payload: Record<string, unknown>, message: string): void;
199
+ error(payload: Record<string, unknown>, message: string): void;
200
+ }
201
+ export interface InvokeLLMDependencies {
202
+ limiter: RateLimiterLike;
203
+ logger: LLMCallLogger;
204
+ runResultWriter?: LLMRunResultWriter;
205
+ adapters?: LLMAdapter[];
206
+ now?: () => number;
207
+ }
208
+ export interface InvokeLLMResult {
209
+ runResultId?: string;
210
+ content: string;
211
+ rawResponse: unknown;
212
+ parsed?: unknown;
213
+ decisionOutput?: string | null;
214
+ isCorrect?: boolean | null;
215
+ judgmentStatus?: LLMJudgmentStatus | null;
216
+ finishReason?: string | null;
217
+ usage: {
218
+ inputTokens: number;
219
+ outputTokens: number;
220
+ };
221
+ costEstimate: number;
222
+ durationMs: number;
223
+ }
224
+ export interface ModelConnectivityProbeArgs {
225
+ model: ModelInvocationConfig;
226
+ /** Opaque rate-limit key built by the caller via LimiterKeyStrategy (SPEC 08 §3.7). */
227
+ limiterKey: string;
228
+ requestId?: string;
229
+ timeoutMs?: number;
230
+ }
231
+ export interface ModelConnectivityProbeResult {
232
+ ok: boolean;
233
+ modelId: string;
234
+ providerType: string;
235
+ providerModelId: string;
236
+ endpoint: string;
237
+ durationMs: number;
238
+ checkedAt: string;
239
+ responsePreview?: string;
240
+ errorClass?: string;
241
+ errorMessage?: string;
242
+ httpStatus?: number;
243
+ providerErrorBody?: string;
244
+ }
245
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@proofhound/llm-client",
3
+ "version": "0.1.6",
4
+ "description": "LLM 调用包装 — 含 docs/specs/05-logging.md §5.6 日志契约 + 限流前置",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": "./dist/index.js"
9
+ },
10
+ "dependencies": {
11
+ "sharp": "^0.34.5",
12
+ "@proofhound/db": "0.1.6",
13
+ "@proofhound/limiter": "0.1.6",
14
+ "@proofhound/shared": "0.1.6",
15
+ "@proofhound/logger": "0.1.6"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^24.12.4",
19
+ "typescript": "^6.0.3",
20
+ "vitest": "^4.1.6"
21
+ },
22
+ "license": "Apache-2.0",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "https://github.com/proofhound/proofhound",
26
+ "directory": "packages/llm-client"
27
+ },
28
+ "homepage": "https://github.com/proofhound/proofhound/tree/master/packages/llm-client#readme",
29
+ "files": [
30
+ "dist",
31
+ "README.md",
32
+ "LICENSE"
33
+ ],
34
+ "publishConfig": {
35
+ "access": "public",
36
+ "registry": "https://registry.npmjs.org/"
37
+ },
38
+ "scripts": {
39
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
40
+ "typecheck": "tsc --noEmit",
41
+ "lint": "eslint \"src/**/*.ts\"",
42
+ "test": "vitest run",
43
+ "test:unit": "vitest run",
44
+ "clean": "rm -rf dist .turbo"
45
+ }
46
+ }