truthguard-ai 0.1.0
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.
Potentially problematic release.
This version of truthguard-ai might be problematic. Click here for more details.
- package/LICENSE +21 -0
- package/README.md +363 -0
- package/dist/Advisor/index.d.ts +78 -0
- package/dist/Advisor/index.d.ts.map +1 -0
- package/dist/Advisor/index.js +539 -0
- package/dist/Advisor/index.js.map +1 -0
- package/dist/Alerting/index.d.ts +35 -0
- package/dist/Alerting/index.d.ts.map +1 -0
- package/dist/Alerting/index.js +76 -0
- package/dist/Alerting/index.js.map +1 -0
- package/dist/Auth/index.d.ts +82 -0
- package/dist/Auth/index.d.ts.map +1 -0
- package/dist/Auth/index.js +242 -0
- package/dist/Auth/index.js.map +1 -0
- package/dist/Baseline/index.d.ts +43 -0
- package/dist/Baseline/index.d.ts.map +1 -0
- package/dist/Baseline/index.js +195 -0
- package/dist/Baseline/index.js.map +1 -0
- package/dist/Claims/index.d.ts +73 -0
- package/dist/Claims/index.d.ts.map +1 -0
- package/dist/Claims/index.js +1669 -0
- package/dist/Claims/index.js.map +1 -0
- package/dist/Client/index.d.ts +90 -0
- package/dist/Client/index.d.ts.map +1 -0
- package/dist/Client/index.js +186 -0
- package/dist/Client/index.js.map +1 -0
- package/dist/Config/index.d.ts +41 -0
- package/dist/Config/index.d.ts.map +1 -0
- package/dist/Config/index.js +129 -0
- package/dist/Config/index.js.map +1 -0
- package/dist/Coverage/index.d.ts +28 -0
- package/dist/Coverage/index.d.ts.map +1 -0
- package/dist/Coverage/index.js +134 -0
- package/dist/Coverage/index.js.map +1 -0
- package/dist/Demo/index.d.ts +16 -0
- package/dist/Demo/index.d.ts.map +1 -0
- package/dist/Demo/index.js +189 -0
- package/dist/Demo/index.js.map +1 -0
- package/dist/Gate/index.d.ts +39 -0
- package/dist/Gate/index.d.ts.map +1 -0
- package/dist/Gate/index.js +207 -0
- package/dist/Gate/index.js.map +1 -0
- package/dist/Grounding/index.d.ts +40 -0
- package/dist/Grounding/index.d.ts.map +1 -0
- package/dist/Grounding/index.js +1433 -0
- package/dist/Grounding/index.js.map +1 -0
- package/dist/L2/index.d.ts +93 -0
- package/dist/L2/index.d.ts.map +1 -0
- package/dist/L2/index.js +1773 -0
- package/dist/L2/index.js.map +1 -0
- package/dist/MCP/index.d.ts +139 -0
- package/dist/MCP/index.d.ts.map +1 -0
- package/dist/MCP/index.js +1250 -0
- package/dist/MCP/index.js.map +1 -0
- package/dist/Matchers/index.d.ts +101 -0
- package/dist/Matchers/index.d.ts.map +1 -0
- package/dist/Matchers/index.js +690 -0
- package/dist/Matchers/index.js.map +1 -0
- package/dist/Middleware/index.d.ts +146 -0
- package/dist/Middleware/index.d.ts.map +1 -0
- package/dist/Middleware/index.js +239 -0
- package/dist/Middleware/index.js.map +1 -0
- package/dist/Mode/index.d.ts +87 -0
- package/dist/Mode/index.d.ts.map +1 -0
- package/dist/Mode/index.js +117 -0
- package/dist/Mode/index.js.map +1 -0
- package/dist/Policy/index.d.ts +89 -0
- package/dist/Policy/index.d.ts.map +1 -0
- package/dist/Policy/index.js +143 -0
- package/dist/Policy/index.js.map +1 -0
- package/dist/Proxy/SessionStore.d.ts +94 -0
- package/dist/Proxy/SessionStore.d.ts.map +1 -0
- package/dist/Proxy/SessionStore.js +225 -0
- package/dist/Proxy/SessionStore.js.map +1 -0
- package/dist/Proxy/index.d.ts +166 -0
- package/dist/Proxy/index.d.ts.map +1 -0
- package/dist/Proxy/index.js +531 -0
- package/dist/Proxy/index.js.map +1 -0
- package/dist/Registry/index.d.ts +93 -0
- package/dist/Registry/index.d.ts.map +1 -0
- package/dist/Registry/index.js +818 -0
- package/dist/Registry/index.js.map +1 -0
- package/dist/Reports/index.d.ts +38 -0
- package/dist/Reports/index.d.ts.map +1 -0
- package/dist/Reports/index.js +149 -0
- package/dist/Reports/index.js.map +1 -0
- package/dist/Rules/index.d.ts +587 -0
- package/dist/Rules/index.d.ts.map +1 -0
- package/dist/Rules/index.js +6236 -0
- package/dist/Rules/index.js.map +1 -0
- package/dist/Rules/intents.d.ts +22 -0
- package/dist/Rules/intents.d.ts.map +1 -0
- package/dist/Rules/intents.js +242 -0
- package/dist/Rules/intents.js.map +1 -0
- package/dist/Runner/index.d.ts +39 -0
- package/dist/Runner/index.d.ts.map +1 -0
- package/dist/Runner/index.js +185 -0
- package/dist/Runner/index.js.map +1 -0
- package/dist/SDK/anthropic.d.ts +102 -0
- package/dist/SDK/anthropic.d.ts.map +1 -0
- package/dist/SDK/anthropic.js +425 -0
- package/dist/SDK/anthropic.js.map +1 -0
- package/dist/SDK/openai.d.ts +164 -0
- package/dist/SDK/openai.d.ts.map +1 -0
- package/dist/SDK/openai.js +557 -0
- package/dist/SDK/openai.js.map +1 -0
- package/dist/Store/index.d.ts +72 -0
- package/dist/Store/index.d.ts.map +1 -0
- package/dist/Store/index.js +136 -0
- package/dist/Store/index.js.map +1 -0
- package/dist/Telemetry/index.d.ts +84 -0
- package/dist/Telemetry/index.d.ts.map +1 -0
- package/dist/Telemetry/index.js +239 -0
- package/dist/Telemetry/index.js.map +1 -0
- package/dist/Trace/index.d.ts +219 -0
- package/dist/Trace/index.d.ts.map +1 -0
- package/dist/Trace/index.js +763 -0
- package/dist/Trace/index.js.map +1 -0
- package/dist/TraceReadiness/index.d.ts +42 -0
- package/dist/TraceReadiness/index.d.ts.map +1 -0
- package/dist/TraceReadiness/index.js +169 -0
- package/dist/TraceReadiness/index.js.map +1 -0
- package/dist/cli/index.d.ts +15 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +807 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/i18n/index.d.ts +44 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +124 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +218 -0
- package/dist/index.js.map +1 -0
- package/dist/thin.d.ts +39 -0
- package/dist/thin.d.ts.map +1 -0
- package/dist/thin.js +120 -0
- package/dist/thin.js.map +1 -0
- package/dist/types/index.d.ts +498 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +17 -0
- package/dist/types/index.js.map +1 -0
- package/dist-npm/Alerting/index.d.ts +35 -0
- package/dist-npm/Alerting/index.d.ts.map +1 -0
- package/dist-npm/Alerting/index.js +76 -0
- package/dist-npm/Alerting/index.js.map +1 -0
- package/dist-npm/Auth/index.d.ts +82 -0
- package/dist-npm/Auth/index.d.ts.map +1 -0
- package/dist-npm/Auth/index.js +242 -0
- package/dist-npm/Auth/index.js.map +1 -0
- package/dist-npm/Client/index.d.ts +90 -0
- package/dist-npm/Client/index.d.ts.map +1 -0
- package/dist-npm/Client/index.js +186 -0
- package/dist-npm/Client/index.js.map +1 -0
- package/dist-npm/Demo/index.d.ts +16 -0
- package/dist-npm/Demo/index.d.ts.map +1 -0
- package/dist-npm/Demo/index.js +189 -0
- package/dist-npm/Demo/index.js.map +1 -0
- package/dist-npm/Middleware/index.d.ts +146 -0
- package/dist-npm/Middleware/index.d.ts.map +1 -0
- package/dist-npm/Middleware/index.js +239 -0
- package/dist-npm/Middleware/index.js.map +1 -0
- package/dist-npm/Proxy/SessionStore.d.ts +94 -0
- package/dist-npm/Proxy/SessionStore.d.ts.map +1 -0
- package/dist-npm/Proxy/SessionStore.js +225 -0
- package/dist-npm/Proxy/SessionStore.js.map +1 -0
- package/dist-npm/Proxy/index.d.ts +166 -0
- package/dist-npm/Proxy/index.d.ts.map +1 -0
- package/dist-npm/Proxy/index.js +531 -0
- package/dist-npm/Proxy/index.js.map +1 -0
- package/dist-npm/SDK/anthropic.d.ts +102 -0
- package/dist-npm/SDK/anthropic.d.ts.map +1 -0
- package/dist-npm/SDK/anthropic.js +425 -0
- package/dist-npm/SDK/anthropic.js.map +1 -0
- package/dist-npm/SDK/openai.d.ts +164 -0
- package/dist-npm/SDK/openai.d.ts.map +1 -0
- package/dist-npm/SDK/openai.js +557 -0
- package/dist-npm/SDK/openai.js.map +1 -0
- package/dist-npm/Store/index.d.ts +72 -0
- package/dist-npm/Store/index.d.ts.map +1 -0
- package/dist-npm/Store/index.js +136 -0
- package/dist-npm/Store/index.js.map +1 -0
- package/dist-npm/Telemetry/index.d.ts +84 -0
- package/dist-npm/Telemetry/index.d.ts.map +1 -0
- package/dist-npm/Telemetry/index.js +239 -0
- package/dist-npm/Telemetry/index.js.map +1 -0
- package/dist-npm/Trace/index.d.ts +219 -0
- package/dist-npm/Trace/index.d.ts.map +1 -0
- package/dist-npm/Trace/index.js +763 -0
- package/dist-npm/Trace/index.js.map +1 -0
- package/dist-npm/thin.d.ts +39 -0
- package/dist-npm/thin.d.ts.map +1 -0
- package/dist-npm/thin.js +120 -0
- package/dist-npm/thin.js.map +1 -0
- package/dist-npm/types/index.d.ts +498 -0
- package/dist-npm/types/index.d.ts.map +1 -0
- package/dist-npm/types/index.js +17 -0
- package/dist-npm/types/index.js.map +1 -0
- package/package.json +114 -0
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ai-rcp OpenAI SDK Wrapper
|
|
4
|
+
*
|
|
5
|
+
* Wraps an OpenAI client to automatically capture tool-calling traces
|
|
6
|
+
* and run them through the grounding pipeline.
|
|
7
|
+
*
|
|
8
|
+
* This is the "zero-config" integration: import, wrap, and you get
|
|
9
|
+
* grounding evaluation on every tool-calling conversation.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import OpenAI from 'openai';
|
|
14
|
+
* import { wrapOpenAI } from 'ai-rcp';
|
|
15
|
+
*
|
|
16
|
+
* const openai = wrapOpenAI(new OpenAI(), {
|
|
17
|
+
* mode: 'warn',
|
|
18
|
+
* threshold: 0.8,
|
|
19
|
+
* onEvaluate: (report) => console.log('Score:', report.groundingScore),
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // Use exactly like the normal OpenAI client
|
|
23
|
+
* const response = await openai.chat.completions.create({
|
|
24
|
+
* model: 'gpt-4',
|
|
25
|
+
* messages: [{ role: 'user', content: 'What appointments do I have?' }],
|
|
26
|
+
* tools: [...],
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* // ai-rcp has already evaluated the trace in the background.
|
|
30
|
+
* // In 'block' mode, a GroundingError is thrown if the score is too low.
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
34
|
+
if (k2 === undefined) k2 = k;
|
|
35
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
36
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
37
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
38
|
+
}
|
|
39
|
+
Object.defineProperty(o, k2, desc);
|
|
40
|
+
}) : (function(o, m, k, k2) {
|
|
41
|
+
if (k2 === undefined) k2 = k;
|
|
42
|
+
o[k2] = m[k];
|
|
43
|
+
}));
|
|
44
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
45
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
46
|
+
}) : function(o, v) {
|
|
47
|
+
o["default"] = v;
|
|
48
|
+
});
|
|
49
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
50
|
+
var ownKeys = function(o) {
|
|
51
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
52
|
+
var ar = [];
|
|
53
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
54
|
+
return ar;
|
|
55
|
+
};
|
|
56
|
+
return ownKeys(o);
|
|
57
|
+
};
|
|
58
|
+
return function (mod) {
|
|
59
|
+
if (mod && mod.__esModule) return mod;
|
|
60
|
+
var result = {};
|
|
61
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
62
|
+
__setModuleDefault(result, mod);
|
|
63
|
+
return result;
|
|
64
|
+
};
|
|
65
|
+
})();
|
|
66
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
67
|
+
exports.GroundingError = void 0;
|
|
68
|
+
exports.buildTraceFromOpenAI = buildTraceFromOpenAI;
|
|
69
|
+
exports.buildErrorTrace = buildErrorTrace;
|
|
70
|
+
exports.reportUnavailable = reportUnavailable;
|
|
71
|
+
exports.wrapOpenAI = wrapOpenAI;
|
|
72
|
+
/**
|
|
73
|
+
* Error thrown in block mode when a response fails grounding.
|
|
74
|
+
*/
|
|
75
|
+
class GroundingError extends Error {
|
|
76
|
+
constructor(message, report, trace) {
|
|
77
|
+
super(message);
|
|
78
|
+
this.report = report;
|
|
79
|
+
this.trace = trace;
|
|
80
|
+
this.name = 'GroundingError';
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.GroundingError = GroundingError;
|
|
84
|
+
function roleToTraceRole(role) {
|
|
85
|
+
switch (role) {
|
|
86
|
+
case 'system':
|
|
87
|
+
return 'system_prompt';
|
|
88
|
+
case 'user':
|
|
89
|
+
return 'user_input';
|
|
90
|
+
case 'assistant':
|
|
91
|
+
return 'final_response'; // overridden for tool_call below
|
|
92
|
+
case 'tool':
|
|
93
|
+
return 'tool_output';
|
|
94
|
+
default:
|
|
95
|
+
return 'llm_call';
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
let traceCounter = 0;
|
|
99
|
+
/**
|
|
100
|
+
* Build an ai-rcp Trace from the OpenAI messages array and the final response.
|
|
101
|
+
*/
|
|
102
|
+
function buildTraceFromOpenAI(messages,
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
104
|
+
response) {
|
|
105
|
+
const traceId = `openai-${Date.now()}-${++traceCounter}`;
|
|
106
|
+
try {
|
|
107
|
+
return _buildTraceFromOpenAIInner(traceId, messages, response);
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
return {
|
|
111
|
+
traceId,
|
|
112
|
+
steps: [{
|
|
113
|
+
stepId: 'step-error',
|
|
114
|
+
role: 'final_response',
|
|
115
|
+
content: `[TruthGuard Trace Error] ${e instanceof Error ? e.message : String(e)}`,
|
|
116
|
+
metadata: { traceError: true, errorType: e instanceof Error ? e.name : 'UnknownError' },
|
|
117
|
+
}],
|
|
118
|
+
startedAt: new Date().toISOString(),
|
|
119
|
+
metadata: { provider: 'openai', traceError: true },
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function _buildTraceFromOpenAIInner(traceId, messages,
|
|
124
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
125
|
+
response) {
|
|
126
|
+
const steps = [];
|
|
127
|
+
let stepCounter = 0;
|
|
128
|
+
// Convert input messages to trace steps
|
|
129
|
+
for (const msg of messages) {
|
|
130
|
+
const stepId = `step-${++stepCounter}`;
|
|
131
|
+
if (msg.role === 'assistant' && msg.tool_calls?.length) {
|
|
132
|
+
// Assistant message with tool calls
|
|
133
|
+
steps.push({
|
|
134
|
+
stepId,
|
|
135
|
+
role: 'tool_call',
|
|
136
|
+
content: msg.content ?? '',
|
|
137
|
+
toolCalls: msg.tool_calls.map((tc) => {
|
|
138
|
+
let params = {};
|
|
139
|
+
try {
|
|
140
|
+
params = JSON.parse(tc.function?.arguments ?? '{}');
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
params = { _raw: tc.function?.arguments };
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
toolName: tc.function?.name ?? 'unknown',
|
|
147
|
+
parameters: params,
|
|
148
|
+
};
|
|
149
|
+
}),
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
else if (msg.role === 'tool') {
|
|
153
|
+
// Tool response
|
|
154
|
+
let output = msg.content;
|
|
155
|
+
try {
|
|
156
|
+
output = JSON.parse(msg.content ?? '');
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// keep as string
|
|
160
|
+
}
|
|
161
|
+
steps.push({
|
|
162
|
+
stepId,
|
|
163
|
+
role: 'tool_output',
|
|
164
|
+
content: msg.content ?? '',
|
|
165
|
+
toolOutputs: [
|
|
166
|
+
{
|
|
167
|
+
toolName: msg.name ?? 'unknown',
|
|
168
|
+
output,
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
// system, user, or plain assistant
|
|
175
|
+
steps.push({
|
|
176
|
+
stepId,
|
|
177
|
+
role: roleToTraceRole(msg.role),
|
|
178
|
+
content: msg.content ?? '',
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Add the final assistant response from the API
|
|
183
|
+
const choice = response?.choices?.[0];
|
|
184
|
+
if (choice?.message) {
|
|
185
|
+
const msg = choice.message;
|
|
186
|
+
if (msg.tool_calls?.length) {
|
|
187
|
+
steps.push({
|
|
188
|
+
stepId: `step-${++stepCounter}`,
|
|
189
|
+
role: 'tool_call',
|
|
190
|
+
content: msg.content ?? '',
|
|
191
|
+
toolCalls: msg.tool_calls.map((tc) => {
|
|
192
|
+
let params = {};
|
|
193
|
+
try {
|
|
194
|
+
params = JSON.parse(tc.function?.arguments ?? '{}');
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
params = { _raw: tc.function?.arguments };
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
toolName: tc.function?.name ?? 'unknown',
|
|
201
|
+
parameters: params,
|
|
202
|
+
};
|
|
203
|
+
}),
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
steps.push({
|
|
208
|
+
stepId: `step-${++stepCounter}`,
|
|
209
|
+
role: 'final_response',
|
|
210
|
+
content: msg.content ?? '',
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Token usage + finish reason
|
|
215
|
+
const usage = response?.usage;
|
|
216
|
+
const lastChoice = response?.choices?.[0];
|
|
217
|
+
const finishReason = lastChoice?.finish_reason;
|
|
218
|
+
const tokens = usage
|
|
219
|
+
? {
|
|
220
|
+
prompt: usage.prompt_tokens ?? 0,
|
|
221
|
+
completion: usage.completion_tokens ?? 0,
|
|
222
|
+
total: usage.total_tokens ?? 0,
|
|
223
|
+
...(finishReason ? { finishReason } : {}),
|
|
224
|
+
}
|
|
225
|
+
: undefined;
|
|
226
|
+
// Attach tokens to the last step
|
|
227
|
+
if (tokens && steps.length > 0) {
|
|
228
|
+
steps[steps.length - 1].tokens = tokens;
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
traceId,
|
|
232
|
+
steps,
|
|
233
|
+
startedAt: new Date().toISOString(),
|
|
234
|
+
metadata: {
|
|
235
|
+
model: response?.model,
|
|
236
|
+
provider: 'openai',
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Build an ai-rcp Trace when the OpenAI API call fails (rate limit, timeout, etc.).
|
|
242
|
+
* Records the conversation context + the error so TruthGuard can still evaluate
|
|
243
|
+
* whatever fallback response the caller surfaces to the user.
|
|
244
|
+
*/
|
|
245
|
+
function buildErrorTrace(messages, error) {
|
|
246
|
+
const traceId = `openai-err-${Date.now()}-${++traceCounter}`;
|
|
247
|
+
try {
|
|
248
|
+
return _buildErrorTraceInner(traceId, messages, error);
|
|
249
|
+
}
|
|
250
|
+
catch (e) {
|
|
251
|
+
return {
|
|
252
|
+
traceId,
|
|
253
|
+
steps: [{
|
|
254
|
+
stepId: 'step-error',
|
|
255
|
+
role: 'final_response',
|
|
256
|
+
content: `[TruthGuard Trace Error] ${e instanceof Error ? e.message : String(e)}`,
|
|
257
|
+
metadata: { traceError: true, errorType: e instanceof Error ? e.name : 'UnknownError' },
|
|
258
|
+
}],
|
|
259
|
+
startedAt: new Date().toISOString(),
|
|
260
|
+
metadata: { provider: 'openai', traceError: true },
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
function _buildErrorTraceInner(traceId, messages, error) {
|
|
265
|
+
const steps = [];
|
|
266
|
+
let stepCounter = 0;
|
|
267
|
+
// Convert input messages to trace steps (same as buildTraceFromOpenAI)
|
|
268
|
+
for (const msg of messages) {
|
|
269
|
+
const stepId = `step-${++stepCounter}`;
|
|
270
|
+
if (msg.role === 'assistant' && msg.tool_calls?.length) {
|
|
271
|
+
steps.push({
|
|
272
|
+
stepId,
|
|
273
|
+
role: 'tool_call',
|
|
274
|
+
content: msg.content ?? '',
|
|
275
|
+
toolCalls: msg.tool_calls.map((tc) => {
|
|
276
|
+
let params = {};
|
|
277
|
+
try {
|
|
278
|
+
params = JSON.parse(tc.function?.arguments ?? '{}');
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
params = { _raw: tc.function?.arguments };
|
|
282
|
+
}
|
|
283
|
+
return {
|
|
284
|
+
toolName: tc.function?.name ?? 'unknown',
|
|
285
|
+
parameters: params,
|
|
286
|
+
};
|
|
287
|
+
}),
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
else if (msg.role === 'tool') {
|
|
291
|
+
let output = msg.content;
|
|
292
|
+
try {
|
|
293
|
+
output = JSON.parse(msg.content ?? '');
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
// keep as string
|
|
297
|
+
}
|
|
298
|
+
steps.push({
|
|
299
|
+
stepId,
|
|
300
|
+
role: 'tool_output',
|
|
301
|
+
content: msg.content ?? '',
|
|
302
|
+
toolOutputs: [
|
|
303
|
+
{
|
|
304
|
+
toolName: msg.name ?? 'unknown',
|
|
305
|
+
output,
|
|
306
|
+
},
|
|
307
|
+
],
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
steps.push({
|
|
312
|
+
stepId,
|
|
313
|
+
role: roleToTraceRole(msg.role),
|
|
314
|
+
content: msg.content ?? '',
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// Add a synthetic final_response step recording the API error
|
|
319
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
320
|
+
const errName = error instanceof Error ? error.name : 'UnknownError';
|
|
321
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
322
|
+
const statusCode = error?.status ?? error?.statusCode;
|
|
323
|
+
steps.push({
|
|
324
|
+
stepId: `step-${++stepCounter}`,
|
|
325
|
+
role: 'final_response',
|
|
326
|
+
content: `[API Error] ${errName}: ${errMsg}`,
|
|
327
|
+
metadata: {
|
|
328
|
+
apiError: true,
|
|
329
|
+
errorType: errName,
|
|
330
|
+
errorMessage: errMsg,
|
|
331
|
+
...(statusCode ? { statusCode } : {}),
|
|
332
|
+
},
|
|
333
|
+
});
|
|
334
|
+
return {
|
|
335
|
+
traceId,
|
|
336
|
+
steps,
|
|
337
|
+
startedAt: new Date().toISOString(),
|
|
338
|
+
metadata: {
|
|
339
|
+
provider: 'openai',
|
|
340
|
+
apiError: true,
|
|
341
|
+
errorType: errName,
|
|
342
|
+
},
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Build a trace for scenarios where the AI service was unavailable.
|
|
347
|
+
*
|
|
348
|
+
* Use this when your application catches an error **before or instead of**
|
|
349
|
+
* calling the AI API, and shows an error message to the user. This ensures
|
|
350
|
+
* the event appears in TruthGuard's Live Observe dashboard.
|
|
351
|
+
*
|
|
352
|
+
* @example
|
|
353
|
+
* ```ts
|
|
354
|
+
* import { reportUnavailable } from 'ai-rcp';
|
|
355
|
+
*
|
|
356
|
+
* try {
|
|
357
|
+
* const response = await callAI(userMessage);
|
|
358
|
+
* } catch (err) {
|
|
359
|
+
* const trace = reportUnavailable({
|
|
360
|
+
* userMessage: 'Daj mi izveštaj za mart',
|
|
361
|
+
* errorMessage: 'AI server trenutno nije dostupan',
|
|
362
|
+
* reason: 'timeout',
|
|
363
|
+
* provider: 'anthropic',
|
|
364
|
+
* });
|
|
365
|
+
* // Send to TruthGuard: await fetch('/api/ingest', { body: JSON.stringify({ trace }) });
|
|
366
|
+
* }
|
|
367
|
+
* ```
|
|
368
|
+
*/
|
|
369
|
+
function reportUnavailable(options) {
|
|
370
|
+
const traceId = `unavailable-${Date.now()}-${++traceCounter}`;
|
|
371
|
+
const steps = [];
|
|
372
|
+
let stepCounter = 0;
|
|
373
|
+
if (options.systemPrompt) {
|
|
374
|
+
steps.push({
|
|
375
|
+
stepId: `step-${++stepCounter}`,
|
|
376
|
+
role: 'system_prompt',
|
|
377
|
+
content: options.systemPrompt,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
steps.push({
|
|
381
|
+
stepId: `step-${++stepCounter}`,
|
|
382
|
+
role: 'user_input',
|
|
383
|
+
content: options.userMessage,
|
|
384
|
+
});
|
|
385
|
+
const reason = options.reason ?? 'unknown';
|
|
386
|
+
const errorType = reason === 'timeout' ? 'TimeoutError'
|
|
387
|
+
: reason === 'overloaded' ? 'ServiceOverloaded'
|
|
388
|
+
: reason === 'rate_limit' ? 'RateLimitError'
|
|
389
|
+
: reason === 'quota' ? 'QuotaExhausted'
|
|
390
|
+
: reason === 'network' ? 'NetworkError'
|
|
391
|
+
: 'AIUnavailable';
|
|
392
|
+
steps.push({
|
|
393
|
+
stepId: `step-${++stepCounter}`,
|
|
394
|
+
role: 'final_response',
|
|
395
|
+
content: `[API Error] ${errorType}: ${options.errorMessage}`,
|
|
396
|
+
metadata: {
|
|
397
|
+
apiError: true,
|
|
398
|
+
errorType,
|
|
399
|
+
errorMessage: options.errorMessage,
|
|
400
|
+
...(options.statusCode ? { statusCode: options.statusCode } : {}),
|
|
401
|
+
reason,
|
|
402
|
+
},
|
|
403
|
+
});
|
|
404
|
+
return {
|
|
405
|
+
traceId,
|
|
406
|
+
steps,
|
|
407
|
+
startedAt: new Date().toISOString(),
|
|
408
|
+
metadata: {
|
|
409
|
+
provider: options.provider ?? 'unknown',
|
|
410
|
+
apiError: true,
|
|
411
|
+
errorType,
|
|
412
|
+
reason,
|
|
413
|
+
},
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
function buildEvaluator(options, mode) {
|
|
417
|
+
// Remote evaluation via TruthGuardClient (thin-client mode)
|
|
418
|
+
if (options.client) {
|
|
419
|
+
const client = options.client;
|
|
420
|
+
const threshold = options.threshold;
|
|
421
|
+
return async (trace) => {
|
|
422
|
+
const result = await client.evaluate(trace, { mode, threshold });
|
|
423
|
+
options.onEvaluate?.(result.report, trace);
|
|
424
|
+
return result;
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
// Local evaluation via Pipeline (server-side / full engine mode)
|
|
428
|
+
if (options._pipeline) {
|
|
429
|
+
const pipeline = options._pipeline;
|
|
430
|
+
return async (trace) => {
|
|
431
|
+
const result = await pipeline.evaluate(trace);
|
|
432
|
+
options.onEvaluate?.(result.report, trace);
|
|
433
|
+
return result;
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
// Fallback: try dynamic import of Pipeline (will fail in thin-client build — that's expected)
|
|
437
|
+
let lazyPipeline = null;
|
|
438
|
+
return async (trace) => {
|
|
439
|
+
if (!lazyPipeline) {
|
|
440
|
+
try {
|
|
441
|
+
// Dynamic import so thin-client build doesn't bundle the engine
|
|
442
|
+
const { Pipeline } = await Promise.resolve().then(() => __importStar(require('../Mode')));
|
|
443
|
+
lazyPipeline = new Pipeline({ ...options, mode });
|
|
444
|
+
}
|
|
445
|
+
catch {
|
|
446
|
+
throw new Error('TruthGuard: No evaluation backend available. ' +
|
|
447
|
+
'Provide a `client` option (TruthGuardClient) for remote evaluation, ' +
|
|
448
|
+
'or install the full engine for local evaluation.');
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
const result = await lazyPipeline.evaluate(trace);
|
|
452
|
+
options.onEvaluate?.(result.report, trace);
|
|
453
|
+
return result;
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
// ---------------------------------------------------------------------------
|
|
457
|
+
// SDK Wrapper
|
|
458
|
+
// ---------------------------------------------------------------------------
|
|
459
|
+
/**
|
|
460
|
+
* Wraps an OpenAI client instance to auto-capture traces and evaluate grounding.
|
|
461
|
+
*
|
|
462
|
+
* Returns a proxy that intercepts `client.chat.completions.create()`.
|
|
463
|
+
* All other methods pass through unchanged.
|
|
464
|
+
*
|
|
465
|
+
* In thin-client mode (when `client` option is provided), traces are sent to
|
|
466
|
+
* the TruthGuard server for evaluation — no engine code runs locally.
|
|
467
|
+
*/
|
|
468
|
+
function wrapOpenAI(client, options = {}) {
|
|
469
|
+
const mode = options.mode ?? 'observe';
|
|
470
|
+
const shouldBlock = mode === 'block';
|
|
471
|
+
const awaitEval = options.awaitEvaluation ?? shouldBlock;
|
|
472
|
+
// Build the evaluator — either remote (client) or local (_pipeline)
|
|
473
|
+
const evaluator = buildEvaluator(options, mode);
|
|
474
|
+
// We need to intercept client.chat.completions.create
|
|
475
|
+
// Use a Proxy to transparently wrap the client
|
|
476
|
+
return new Proxy(client, {
|
|
477
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
478
|
+
get(target, prop) {
|
|
479
|
+
if (prop === 'chat') {
|
|
480
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
481
|
+
return new Proxy(target.chat, {
|
|
482
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
483
|
+
get(chatTarget, chatProp) {
|
|
484
|
+
if (chatProp === 'completions') {
|
|
485
|
+
return new Proxy(chatTarget.completions, {
|
|
486
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
487
|
+
get(compTarget, compProp) {
|
|
488
|
+
if (compProp === 'create') {
|
|
489
|
+
return async function wrappedCreate(
|
|
490
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
491
|
+
params,
|
|
492
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
493
|
+
...rest) {
|
|
494
|
+
let response;
|
|
495
|
+
let apiError;
|
|
496
|
+
try {
|
|
497
|
+
response = await compTarget.create.call(compTarget, params, ...rest);
|
|
498
|
+
}
|
|
499
|
+
catch (err) {
|
|
500
|
+
apiError = err;
|
|
501
|
+
}
|
|
502
|
+
const messages = params.messages ?? [];
|
|
503
|
+
const hasToolContext = messages.some((m) => m.role === 'tool' ||
|
|
504
|
+
(m.role === 'assistant' && m.tool_calls?.length));
|
|
505
|
+
if (apiError) {
|
|
506
|
+
// API failed — still build a trace so TruthGuard
|
|
507
|
+
// can evaluate whatever the caller surfaces to the user
|
|
508
|
+
if (hasToolContext) {
|
|
509
|
+
const trace = buildErrorTrace(messages, apiError);
|
|
510
|
+
if (awaitEval) {
|
|
511
|
+
const result = await evaluator(trace);
|
|
512
|
+
options.onResult?.(result, trace);
|
|
513
|
+
}
|
|
514
|
+
else {
|
|
515
|
+
evaluator(trace).then((result) => options.onResult?.(result, trace), () => { });
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
// Re-throw so the caller still sees the original error
|
|
519
|
+
throw apiError;
|
|
520
|
+
}
|
|
521
|
+
// Happy path — evaluate if this is a final response
|
|
522
|
+
const choice = response
|
|
523
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
524
|
+
? response?.choices?.[0]
|
|
525
|
+
: undefined;
|
|
526
|
+
const isFinalResponse = choice?.message && !choice.message.tool_calls?.length;
|
|
527
|
+
if (hasToolContext && isFinalResponse) {
|
|
528
|
+
const trace = buildTraceFromOpenAI(messages, response);
|
|
529
|
+
if (awaitEval) {
|
|
530
|
+
const result = await evaluator(trace);
|
|
531
|
+
options.onResult?.(result, trace);
|
|
532
|
+
if (shouldBlock && !result.allowed) {
|
|
533
|
+
throw new GroundingError(result.fallbackResponse ??
|
|
534
|
+
'Response blocked due to low grounding score', result.report, trace);
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
else {
|
|
538
|
+
// Fire-and-forget: evaluate async
|
|
539
|
+
evaluator(trace).then((result) => options.onResult?.(result, trace), () => { });
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
return response;
|
|
543
|
+
};
|
|
544
|
+
}
|
|
545
|
+
return compTarget[compProp];
|
|
546
|
+
},
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
return chatTarget[chatProp];
|
|
550
|
+
},
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
return target[prop];
|
|
554
|
+
},
|
|
555
|
+
});
|
|
556
|
+
}
|
|
557
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/SDK/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace Store — Persistence layer for traces and grounding reports.
|
|
3
|
+
*
|
|
4
|
+
* Provides a pluggable interface with a file-based (JSONL) default implementation.
|
|
5
|
+
* Used by observe / warn / block modes to persist evaluation history.
|
|
6
|
+
*/
|
|
7
|
+
import type { GroundingReport, Trace } from '../types';
|
|
8
|
+
/** A stored record combining trace + report + metadata. */
|
|
9
|
+
export interface StoredRecord {
|
|
10
|
+
/** ISO-8601 timestamp when the record was stored. */
|
|
11
|
+
storedAt: string;
|
|
12
|
+
/** The original trace. */
|
|
13
|
+
trace: Trace;
|
|
14
|
+
/** The grounding report produced by the engine. */
|
|
15
|
+
report: GroundingReport;
|
|
16
|
+
/** Organization ID (for tenant isolation). */
|
|
17
|
+
orgId?: string;
|
|
18
|
+
/** Project ID (for tenant isolation). */
|
|
19
|
+
projectId?: string;
|
|
20
|
+
/** Environment tag (e.g. "testing", "production"). */
|
|
21
|
+
environment?: string;
|
|
22
|
+
/** User ID who created this trace (for per-user isolation). */
|
|
23
|
+
userId?: string;
|
|
24
|
+
}
|
|
25
|
+
/** Abstract interface for trace persistence. */
|
|
26
|
+
export interface TraceStore {
|
|
27
|
+
/** Persist a trace and its report. */
|
|
28
|
+
save(trace: Trace, report: GroundingReport, meta?: {
|
|
29
|
+
orgId?: string;
|
|
30
|
+
projectId?: string;
|
|
31
|
+
environment?: string;
|
|
32
|
+
userId?: string;
|
|
33
|
+
}): Promise<void>;
|
|
34
|
+
/** Load stored records (most recent first). */
|
|
35
|
+
list(limit?: number, offset?: number): Promise<StoredRecord[]>;
|
|
36
|
+
/** Load a single record by traceId. */
|
|
37
|
+
get(traceId: string): Promise<StoredRecord | null>;
|
|
38
|
+
/** Count total stored records. */
|
|
39
|
+
count(): Promise<number>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Appends trace+report records as JSONL lines.
|
|
43
|
+
* Simple, requires no dependencies, works everywhere.
|
|
44
|
+
*/
|
|
45
|
+
export declare class FileStore implements TraceStore {
|
|
46
|
+
private readonly filePath;
|
|
47
|
+
constructor(filePath: string);
|
|
48
|
+
save(trace: Trace, report: GroundingReport, meta?: {
|
|
49
|
+
orgId?: string;
|
|
50
|
+
projectId?: string;
|
|
51
|
+
environment?: string;
|
|
52
|
+
userId?: string;
|
|
53
|
+
}): Promise<void>;
|
|
54
|
+
list(limit?: number, offset?: number): Promise<StoredRecord[]>;
|
|
55
|
+
get(traceId: string): Promise<StoredRecord | null>;
|
|
56
|
+
count(): Promise<number>;
|
|
57
|
+
}
|
|
58
|
+
export declare class InMemoryStore implements TraceStore {
|
|
59
|
+
private records;
|
|
60
|
+
save(trace: Trace, report: GroundingReport, meta?: {
|
|
61
|
+
orgId?: string;
|
|
62
|
+
projectId?: string;
|
|
63
|
+
environment?: string;
|
|
64
|
+
userId?: string;
|
|
65
|
+
}): Promise<void>;
|
|
66
|
+
list(limit?: number, offset?: number): Promise<StoredRecord[]>;
|
|
67
|
+
get(traceId: string): Promise<StoredRecord | null>;
|
|
68
|
+
count(): Promise<number>;
|
|
69
|
+
/** Clear all records (useful in tests). */
|
|
70
|
+
clear(): void;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Store/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAMvD,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,mDAAmD;IACnD,MAAM,EAAE,eAAe,CAAC;IACxB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,sCAAsC;IACtC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjJ,+CAA+C;IAC/C,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAE/D,uCAAuC;IACvC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAEnD,kCAAkC;IAClC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1B;AAMD;;;GAGG;AACH,qBAAa,SAAU,YAAW,UAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,QAAQ,EAAE,MAAM;IAQtB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAchJ,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAczD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAKlD,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAM/B;AAMD,qBAAa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,OAAO,CAAsB;IAE/B,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAYhJ,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAMzD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAIlD,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9B,2CAA2C;IAC3C,KAAK,IAAI,IAAI;CAGd"}
|