@morphllm/morphsdk 0.2.172 → 0.2.174
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/{chunk-GJZXDRH5.js → chunk-2OHOIGNC.js} +17 -3
- package/dist/chunk-2OHOIGNC.js.map +1 -0
- package/dist/{chunk-QQXNZIVK.js → chunk-2VMJYD6W.js} +2 -2
- package/dist/{chunk-XJDXV5VX.js → chunk-34NQGT2I.js} +2 -2
- package/dist/{chunk-5DA6SZQJ.js → chunk-4IO2Z7US.js} +2 -2
- package/dist/{chunk-IJ33I7P5.js → chunk-4SQU273Z.js} +2 -2
- package/dist/{chunk-U4J3BVAQ.js → chunk-7D7FJY7Y.js} +2 -2
- package/dist/{chunk-AE7M2I52.js → chunk-ABMYD6QV.js} +2 -2
- package/dist/{chunk-UADW6FYD.js → chunk-APVS7EAO.js} +2 -2
- package/dist/{chunk-QAXXE4AD.js → chunk-B2GSQO2U.js} +2 -2
- package/dist/{chunk-QZR7SJ5N.js → chunk-CBPPR3OM.js} +2 -2
- package/dist/{chunk-53ZJMCWU.js → chunk-DHFFOBSV.js} +3 -3
- package/dist/{chunk-7PVVPLRL.js → chunk-DK442LPX.js} +6 -6
- package/dist/{chunk-FOIDGIY4.js → chunk-GWRJD5WE.js} +4 -4
- package/dist/chunk-IDS4XQ4T.js +143 -0
- package/dist/chunk-IDS4XQ4T.js.map +1 -0
- package/dist/{chunk-SJVLAGUL.js → chunk-J5XHHP5X.js} +2 -2
- package/dist/{chunk-VBARKJWL.js → chunk-L6LYTTZR.js} +2 -2
- package/dist/{chunk-VLZ6PNAD.js → chunk-LN7GNFET.js} +7 -7
- package/dist/{chunk-XYTYIAMQ.js → chunk-M35HA2EQ.js} +2 -2
- package/dist/{chunk-Z4GJVN52.js → chunk-MB6ZYZ3V.js} +2 -2
- package/dist/chunk-MQMRIQNU.js +130 -0
- package/dist/chunk-MQMRIQNU.js.map +1 -0
- package/dist/{chunk-NI7PWQ3B.js → chunk-OERNLFLW.js} +2 -2
- package/dist/{chunk-JWZ5DLAS.js → chunk-OKBNOGD5.js} +2 -2
- package/dist/{chunk-QFE5523Q.js → chunk-OYQT243T.js} +2 -2
- package/dist/chunk-PICGNBUE.js +35 -0
- package/dist/chunk-PICGNBUE.js.map +1 -0
- package/dist/{chunk-CQF76HJC.js → chunk-QW3ARPU3.js} +10 -10
- package/dist/{chunk-66OHYI24.js → chunk-RH2E2PTB.js} +3 -3
- package/dist/{chunk-IN2U7AAI.js → chunk-RM2U5DE4.js} +31 -31
- package/dist/{chunk-U4MRSZQQ.js → chunk-S3GAUEV6.js} +2 -2
- package/dist/{chunk-2SNAXTUJ.js → chunk-SSGEZ4GK.js} +2 -2
- package/dist/{chunk-MO6S2LRD.js → chunk-WKNYYI2G.js} +2 -2
- package/dist/{chunk-453ZV2AX.js → chunk-XBUHHKHX.js} +4 -4
- package/dist/chunk-XQ4T5QDT.js +39 -0
- package/dist/chunk-XQ4T5QDT.js.map +1 -0
- package/dist/{chunk-6X6QMRQG.js → chunk-XVNI3Y3O.js} +4 -4
- package/dist/{chunk-6X6QMRQG.js.map → chunk-XVNI3Y3O.js.map} +1 -1
- package/dist/{chunk-ZLSNL6M2.js → chunk-ZG6JEYEG.js} +3 -3
- package/dist/{chunk-QZ3V2BP7.js → chunk-ZHWVJ7SF.js} +2 -2
- package/dist/{chunk-ESXCQBMU.js → chunk-ZRPPKRKS.js} +2 -2
- package/dist/client.cjs +17 -3
- package/dist/client.cjs.map +1 -1
- package/dist/client.js +32 -32
- package/dist/core/client.cjs +16 -2
- package/dist/core/client.cjs.map +1 -1
- package/dist/core/client.js +4 -4
- package/dist/core/error.cjs +16 -2
- package/dist/core/error.cjs.map +1 -1
- package/dist/core/error.js +3 -3
- package/dist/core/index.cjs +16 -2
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.js +4 -4
- package/dist/edge.cjs +16 -2
- package/dist/edge.cjs.map +1 -1
- package/dist/edge.js +7 -7
- package/dist/git/client.cjs +16 -2
- package/dist/git/client.cjs.map +1 -1
- package/dist/git/client.js +5 -5
- package/dist/git/index.cjs +16 -2
- package/dist/git/index.cjs.map +1 -1
- package/dist/git/index.js +5 -5
- package/dist/index.cjs +17 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +37 -37
- package/dist/modelrouter/core.cjs +16 -2
- package/dist/modelrouter/core.cjs.map +1 -1
- package/dist/modelrouter/core.js +5 -5
- package/dist/modelrouter/index.cjs +16 -2
- package/dist/modelrouter/index.cjs.map +1 -1
- package/dist/modelrouter/index.js +5 -5
- package/dist/otel-Dt36jfxw.d.ts +45 -0
- package/dist/subagents/anthropic.cjs +16 -2
- package/dist/subagents/anthropic.cjs.map +1 -1
- package/dist/subagents/anthropic.js +11 -11
- package/dist/subagents/vercel.cjs +16 -2
- package/dist/subagents/vercel.cjs.map +1 -1
- package/dist/subagents/vercel.js +11 -11
- package/dist/tools/browser/anthropic.cjs +16 -2
- package/dist/tools/browser/anthropic.cjs.map +1 -1
- package/dist/tools/browser/anthropic.js +8 -8
- package/dist/tools/browser/core.cjs +16 -2
- package/dist/tools/browser/core.cjs.map +1 -1
- package/dist/tools/browser/core.js +7 -7
- package/dist/tools/browser/index.cjs +16 -2
- package/dist/tools/browser/index.cjs.map +1 -1
- package/dist/tools/browser/index.js +15 -15
- package/dist/tools/browser/openai.cjs +16 -2
- package/dist/tools/browser/openai.cjs.map +1 -1
- package/dist/tools/browser/openai.js +8 -8
- package/dist/tools/browser/profiles/core.cjs +16 -2
- package/dist/tools/browser/profiles/core.cjs.map +1 -1
- package/dist/tools/browser/profiles/core.js +3 -3
- package/dist/tools/browser/profiles/index.cjs +16 -2
- package/dist/tools/browser/profiles/index.cjs.map +1 -1
- package/dist/tools/browser/profiles/index.js +3 -3
- package/dist/tools/browser/vercel.cjs +16 -2
- package/dist/tools/browser/vercel.cjs.map +1 -1
- package/dist/tools/browser/vercel.js +8 -8
- package/dist/tools/codebase_search/anthropic.cjs +16 -2
- package/dist/tools/codebase_search/anthropic.cjs.map +1 -1
- package/dist/tools/codebase_search/anthropic.js +6 -6
- package/dist/tools/codebase_search/core.cjs +16 -2
- package/dist/tools/codebase_search/core.cjs.map +1 -1
- package/dist/tools/codebase_search/core.js +5 -5
- package/dist/tools/codebase_search/index.cjs +16 -2
- package/dist/tools/codebase_search/index.cjs.map +1 -1
- package/dist/tools/codebase_search/index.js +10 -10
- package/dist/tools/codebase_search/openai.cjs +16 -2
- package/dist/tools/codebase_search/openai.cjs.map +1 -1
- package/dist/tools/codebase_search/openai.js +6 -6
- package/dist/tools/codebase_search/vercel.cjs +16 -2
- package/dist/tools/codebase_search/vercel.cjs.map +1 -1
- package/dist/tools/codebase_search/vercel.js +6 -6
- package/dist/tools/compact/core.cjs +16 -2
- package/dist/tools/compact/core.cjs.map +1 -1
- package/dist/tools/compact/core.js +5 -5
- package/dist/tools/compact/index.cjs +16 -2
- package/dist/tools/compact/index.cjs.map +1 -1
- package/dist/tools/compact/index.js +6 -6
- package/dist/tools/fastapply/anthropic.cjs +16 -2
- package/dist/tools/fastapply/anthropic.cjs.map +1 -1
- package/dist/tools/fastapply/anthropic.js +7 -7
- package/dist/tools/fastapply/apply.cjs +16 -2
- package/dist/tools/fastapply/apply.cjs.map +1 -1
- package/dist/tools/fastapply/apply.js +2 -2
- package/dist/tools/fastapply/core.cjs +16 -2
- package/dist/tools/fastapply/core.cjs.map +1 -1
- package/dist/tools/fastapply/core.js +6 -6
- package/dist/tools/fastapply/index.cjs +16 -2
- package/dist/tools/fastapply/index.cjs.map +1 -1
- package/dist/tools/fastapply/index.js +11 -11
- package/dist/tools/fastapply/openai.cjs +16 -2
- package/dist/tools/fastapply/openai.cjs.map +1 -1
- package/dist/tools/fastapply/openai.js +7 -7
- package/dist/tools/fastapply/vercel.cjs +16 -2
- package/dist/tools/fastapply/vercel.cjs.map +1 -1
- package/dist/tools/fastapply/vercel.js +7 -7
- package/dist/tools/index.cjs +16 -2
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.js +11 -11
- package/dist/tools/reflex/core.cjs +17 -3
- package/dist/tools/reflex/core.cjs.map +1 -1
- package/dist/tools/reflex/core.js +5 -5
- package/dist/tools/reflex/index.cjs +17 -3
- package/dist/tools/reflex/index.cjs.map +1 -1
- package/dist/tools/reflex/index.js +5 -5
- package/dist/tools/reflex/types.cjs.map +1 -1
- package/dist/tools/reflex/types.d.ts +2 -1
- package/dist/tools/utils/resilience.cjs +16 -2
- package/dist/tools/utils/resilience.cjs.map +1 -1
- package/dist/tools/utils/resilience.js +2 -2
- package/dist/tools/warp_grep/agent/runner.cjs +16 -2
- package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/runner.js +3 -3
- package/dist/tools/warp_grep/anthropic.cjs +16 -2
- package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
- package/dist/tools/warp_grep/anthropic.js +11 -11
- package/dist/tools/warp_grep/client.cjs +16 -2
- package/dist/tools/warp_grep/client.cjs.map +1 -1
- package/dist/tools/warp_grep/client.js +10 -10
- package/dist/tools/warp_grep/gemini.cjs +16 -2
- package/dist/tools/warp_grep/gemini.cjs.map +1 -1
- package/dist/tools/warp_grep/gemini.js +10 -10
- package/dist/tools/warp_grep/harness.js +6 -6
- package/dist/tools/warp_grep/index.cjs +16 -2
- package/dist/tools/warp_grep/index.cjs.map +1 -1
- package/dist/tools/warp_grep/index.js +16 -16
- package/dist/tools/warp_grep/openai.cjs +16 -2
- package/dist/tools/warp_grep/openai.cjs.map +1 -1
- package/dist/tools/warp_grep/openai.js +11 -11
- package/dist/tools/warp_grep/providers/local.js +2 -2
- package/dist/tools/warp_grep/vercel.cjs +16 -2
- package/dist/tools/warp_grep/vercel.cjs.map +1 -1
- package/dist/tools/warp_grep/vercel.js +11 -11
- package/dist/tracing/core.cjs +346 -0
- package/dist/tracing/core.cjs.map +1 -0
- package/dist/tracing/core.d.ts +50 -0
- package/dist/tracing/core.js +13 -0
- package/dist/tracing/core.js.map +1 -0
- package/dist/tracing/index.cjs +359 -0
- package/dist/tracing/index.cjs.map +1 -0
- package/dist/tracing/index.d.ts +5 -0
- package/dist/tracing/index.js +18 -0
- package/dist/tracing/index.js.map +1 -0
- package/dist/tracing/interaction.cjs +183 -0
- package/dist/tracing/interaction.cjs.map +1 -0
- package/dist/tracing/interaction.d.ts +26 -0
- package/dist/tracing/interaction.js +9 -0
- package/dist/tracing/interaction.js.map +1 -0
- package/dist/tracing/otel.cjs +53 -0
- package/dist/tracing/otel.cjs.map +1 -0
- package/dist/tracing/otel.d.ts +2 -0
- package/dist/tracing/otel.js +12 -0
- package/dist/tracing/otel.js.map +1 -0
- package/dist/tracing/signals.cjs +59 -0
- package/dist/tracing/signals.cjs.map +1 -0
- package/dist/tracing/signals.d.ts +13 -0
- package/dist/tracing/signals.js +8 -0
- package/dist/tracing/signals.js.map +1 -0
- package/dist/tracing/types.cjs +19 -0
- package/dist/tracing/types.cjs.map +1 -0
- package/dist/tracing/types.d.ts +134 -0
- package/dist/tracing/types.js +1 -0
- package/dist/tracing/types.js.map +1 -0
- package/dist/version.cjs +16 -2
- package/dist/version.cjs.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +16 -2
- package/dist/chunk-GJZXDRH5.js.map +0 -1
- /package/dist/{chunk-QQXNZIVK.js.map → chunk-2VMJYD6W.js.map} +0 -0
- /package/dist/{chunk-XJDXV5VX.js.map → chunk-34NQGT2I.js.map} +0 -0
- /package/dist/{chunk-5DA6SZQJ.js.map → chunk-4IO2Z7US.js.map} +0 -0
- /package/dist/{chunk-IJ33I7P5.js.map → chunk-4SQU273Z.js.map} +0 -0
- /package/dist/{chunk-U4J3BVAQ.js.map → chunk-7D7FJY7Y.js.map} +0 -0
- /package/dist/{chunk-AE7M2I52.js.map → chunk-ABMYD6QV.js.map} +0 -0
- /package/dist/{chunk-UADW6FYD.js.map → chunk-APVS7EAO.js.map} +0 -0
- /package/dist/{chunk-QAXXE4AD.js.map → chunk-B2GSQO2U.js.map} +0 -0
- /package/dist/{chunk-QZR7SJ5N.js.map → chunk-CBPPR3OM.js.map} +0 -0
- /package/dist/{chunk-53ZJMCWU.js.map → chunk-DHFFOBSV.js.map} +0 -0
- /package/dist/{chunk-7PVVPLRL.js.map → chunk-DK442LPX.js.map} +0 -0
- /package/dist/{chunk-FOIDGIY4.js.map → chunk-GWRJD5WE.js.map} +0 -0
- /package/dist/{chunk-SJVLAGUL.js.map → chunk-J5XHHP5X.js.map} +0 -0
- /package/dist/{chunk-VBARKJWL.js.map → chunk-L6LYTTZR.js.map} +0 -0
- /package/dist/{chunk-VLZ6PNAD.js.map → chunk-LN7GNFET.js.map} +0 -0
- /package/dist/{chunk-XYTYIAMQ.js.map → chunk-M35HA2EQ.js.map} +0 -0
- /package/dist/{chunk-Z4GJVN52.js.map → chunk-MB6ZYZ3V.js.map} +0 -0
- /package/dist/{chunk-NI7PWQ3B.js.map → chunk-OERNLFLW.js.map} +0 -0
- /package/dist/{chunk-JWZ5DLAS.js.map → chunk-OKBNOGD5.js.map} +0 -0
- /package/dist/{chunk-QFE5523Q.js.map → chunk-OYQT243T.js.map} +0 -0
- /package/dist/{chunk-CQF76HJC.js.map → chunk-QW3ARPU3.js.map} +0 -0
- /package/dist/{chunk-66OHYI24.js.map → chunk-RH2E2PTB.js.map} +0 -0
- /package/dist/{chunk-IN2U7AAI.js.map → chunk-RM2U5DE4.js.map} +0 -0
- /package/dist/{chunk-U4MRSZQQ.js.map → chunk-S3GAUEV6.js.map} +0 -0
- /package/dist/{chunk-2SNAXTUJ.js.map → chunk-SSGEZ4GK.js.map} +0 -0
- /package/dist/{chunk-MO6S2LRD.js.map → chunk-WKNYYI2G.js.map} +0 -0
- /package/dist/{chunk-453ZV2AX.js.map → chunk-XBUHHKHX.js.map} +0 -0
- /package/dist/{chunk-ZLSNL6M2.js.map → chunk-ZG6JEYEG.js.map} +0 -0
- /package/dist/{chunk-QZ3V2BP7.js.map → chunk-ZHWVJ7SF.js.map} +0 -0
- /package/dist/{chunk-ESXCQBMU.js.map → chunk-ZRPPKRKS.js.map} +0 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import {
|
|
2
|
+
metadata
|
|
3
|
+
} from "./chunk-XQ4T5QDT.js";
|
|
4
|
+
|
|
5
|
+
// tracing/interaction.ts
|
|
6
|
+
import { SpanStatusCode } from "@opentelemetry/api";
|
|
7
|
+
import * as traceloop from "@traceloop/node-server-sdk";
|
|
8
|
+
var ASSOC = "traceloop.association.properties.";
|
|
9
|
+
var ENTITY_INPUT = "traceloop.entity.input";
|
|
10
|
+
var ENTITY_OUTPUT = "traceloop.entity.output";
|
|
11
|
+
var ENTITY_NAME = "traceloop.entity.name";
|
|
12
|
+
var SPAN_KIND = "traceloop.span.kind";
|
|
13
|
+
function uuid() {
|
|
14
|
+
const c = globalThis.crypto;
|
|
15
|
+
if (c?.randomUUID) return c.randomUUID();
|
|
16
|
+
return "xxxxxxxxxxxx4xxxyxxx".replace(/[xy]/g, (ch) => {
|
|
17
|
+
const r = Math.random() * 16 | 0;
|
|
18
|
+
return (ch === "x" ? r : r & 3 | 8).toString(16);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function asString(v) {
|
|
22
|
+
if (v == null) return "";
|
|
23
|
+
return typeof v === "string" ? v : JSON.stringify(v);
|
|
24
|
+
}
|
|
25
|
+
function associationProps(ctx, extra) {
|
|
26
|
+
const props = { ...extra };
|
|
27
|
+
if (ctx.userId) props.user_id = ctx.userId;
|
|
28
|
+
if (ctx.convoId) props.convo_id = ctx.convoId;
|
|
29
|
+
if (ctx.eventId) props.event_id = ctx.eventId;
|
|
30
|
+
if (ctx.event) props.event_name = ctx.event;
|
|
31
|
+
return props;
|
|
32
|
+
}
|
|
33
|
+
function createInteractionApi(initial, traceContent) {
|
|
34
|
+
const ctx = {
|
|
35
|
+
...initial,
|
|
36
|
+
eventId: initial.eventId ?? uuid()
|
|
37
|
+
};
|
|
38
|
+
const properties = { ...initial.properties ?? {} };
|
|
39
|
+
let input = initial.input;
|
|
40
|
+
const withAssoc = (fn) => traceloop.withAssociationProperties(associationProps(ctx, properties), fn);
|
|
41
|
+
const toolName = (p) => typeof p === "string" ? p : p.name;
|
|
42
|
+
function startToolSpan(params) {
|
|
43
|
+
const name = toolName(params);
|
|
44
|
+
const span = traceloop.getTraceloopTracer().startSpan(name);
|
|
45
|
+
span.setAttribute(SPAN_KIND, "tool");
|
|
46
|
+
span.setAttribute(ENTITY_NAME, name);
|
|
47
|
+
for (const [k, v] of Object.entries(associationProps(ctx, properties))) {
|
|
48
|
+
span.setAttribute(ASSOC + k, v);
|
|
49
|
+
}
|
|
50
|
+
if (typeof params !== "string" && params.properties) {
|
|
51
|
+
for (const [k, v] of Object.entries(params.properties)) span.setAttribute(k, v);
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
setInput(value) {
|
|
55
|
+
if (traceContent) span.setAttribute(ENTITY_INPUT, asString(value));
|
|
56
|
+
},
|
|
57
|
+
setOutput(value) {
|
|
58
|
+
if (traceContent) span.setAttribute(ENTITY_OUTPUT, asString(value));
|
|
59
|
+
},
|
|
60
|
+
setError(error) {
|
|
61
|
+
const e = typeof error === "string" ? new Error(error) : error;
|
|
62
|
+
span.recordException(e);
|
|
63
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: e.message });
|
|
64
|
+
},
|
|
65
|
+
end() {
|
|
66
|
+
span.end();
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
getEventId: () => ctx.eventId,
|
|
72
|
+
setInput(value) {
|
|
73
|
+
input = value;
|
|
74
|
+
},
|
|
75
|
+
setProperty(key, value) {
|
|
76
|
+
properties[key] = value;
|
|
77
|
+
},
|
|
78
|
+
setProperties(props) {
|
|
79
|
+
Object.assign(properties, props);
|
|
80
|
+
},
|
|
81
|
+
vercelAiSdkMetadata() {
|
|
82
|
+
return metadata({
|
|
83
|
+
userId: ctx.userId ?? "unknown",
|
|
84
|
+
convoId: ctx.convoId,
|
|
85
|
+
eventName: ctx.event,
|
|
86
|
+
eventId: ctx.eventId
|
|
87
|
+
});
|
|
88
|
+
},
|
|
89
|
+
withSpan(params, fn) {
|
|
90
|
+
const name = typeof params === "string" ? params : params.name;
|
|
91
|
+
return Promise.resolve(withAssoc(() => traceloop.withTask({ name }, fn)));
|
|
92
|
+
},
|
|
93
|
+
withTool(params, fn) {
|
|
94
|
+
const name = toolName(params);
|
|
95
|
+
const version = typeof params === "string" ? void 0 : params.version;
|
|
96
|
+
return Promise.resolve(withAssoc(() => traceloop.withTool({ name, version }, fn)));
|
|
97
|
+
},
|
|
98
|
+
startToolSpan,
|
|
99
|
+
trackTool(params) {
|
|
100
|
+
const span = startToolSpan({ name: params.name, properties: params.properties });
|
|
101
|
+
if (params.input !== void 0) span.setInput(params.input);
|
|
102
|
+
if (params.output !== void 0) span.setOutput(params.output);
|
|
103
|
+
if (params.error) span.setError(params.error);
|
|
104
|
+
span.end();
|
|
105
|
+
},
|
|
106
|
+
async finish(opts) {
|
|
107
|
+
const output = typeof opts === "string" ? opts : opts.output;
|
|
108
|
+
if (typeof opts !== "string" && opts.properties) Object.assign(properties, opts.properties);
|
|
109
|
+
await Promise.resolve(
|
|
110
|
+
withAssoc(
|
|
111
|
+
() => traceloop.withTask({ name: ctx.event ?? "interaction" }, () => {
|
|
112
|
+
const span = traceloop.getTraceloopTracer().startSpan(ctx.event ?? "interaction");
|
|
113
|
+
span.setAttribute(SPAN_KIND, "workflow");
|
|
114
|
+
for (const [k, v] of Object.entries(associationProps(ctx, properties))) {
|
|
115
|
+
span.setAttribute(ASSOC + k, v);
|
|
116
|
+
}
|
|
117
|
+
if (traceContent && input) span.setAttribute(ENTITY_INPUT, input);
|
|
118
|
+
if (traceContent) span.setAttribute(ENTITY_OUTPUT, output);
|
|
119
|
+
span.end();
|
|
120
|
+
})
|
|
121
|
+
)
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export {
|
|
128
|
+
createInteractionApi
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=chunk-MQMRIQNU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../tracing/interaction.ts"],"sourcesContent":["/**\n * Morph Tracing — interactions, tools, and manual spans.\n *\n * An `Interaction` is one user turn / agent run. It threads association\n * properties (user_id / convo_id / event_id) onto every span created inside it —\n * including the auto-instrumented LLM spans — so a whole conversation stitches\n * together in the Morph UI. Built on Traceloop's `withTask` / `withTool` and a\n * manual tracer for already-completed tool spans.\n */\nimport { SpanStatusCode, type Span } from '@opentelemetry/api';\nimport * as traceloop from '@traceloop/node-server-sdk';\n\nimport { metadata as buildMetadata } from './otel.js';\nimport type {\n FinishOptions,\n SpanParams,\n ToolParams,\n ToolSpan,\n TrackToolParams,\n TraceContext,\n} from './types.js';\n\n// Traceloop semantic-convention attribute keys.\nconst ASSOC = 'traceloop.association.properties.';\nconst ENTITY_INPUT = 'traceloop.entity.input';\nconst ENTITY_OUTPUT = 'traceloop.entity.output';\nconst ENTITY_NAME = 'traceloop.entity.name';\nconst SPAN_KIND = 'traceloop.span.kind';\n\nfunction uuid(): string {\n const c = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (c?.randomUUID) return c.randomUUID();\n return 'xxxxxxxxxxxx4xxxyxxx'.replace(/[xy]/g, (ch) => {\n const r = (Math.random() * 16) | 0;\n return (ch === 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n}\n\nfunction asString(v: unknown): string {\n if (v == null) return '';\n return typeof v === 'string' ? v : JSON.stringify(v);\n}\n\nexport interface Interaction {\n getEventId(): string | undefined;\n setInput(input: string): void;\n setProperty(key: string, value: string): void;\n setProperties(props: Record<string, string>): void;\n /** Run `fn` inside a traced task span; LLM calls within inherit attribution. */\n withSpan<T>(params: SpanParams | string, fn: () => Promise<T> | T): Promise<T>;\n /** Run `fn` inside a traced tool span. */\n withTool<T>(params: ToolParams | string, fn: () => Promise<T> | T): Promise<T>;\n /** Start a tool span you end manually. */\n startToolSpan(params: ToolParams | string): ToolSpan;\n /** Record an already-completed tool invocation. */\n trackTool(params: TrackToolParams): void;\n /** Metadata for the Vercel AI SDK `experimental_telemetry.metadata`. */\n vercelAiSdkMetadata(): Record<string, string>;\n /** End the interaction with its final output. */\n finish(opts: FinishOptions | string): Promise<void>;\n}\n\nexport type Tracer = Pick<Interaction, 'withSpan' | 'withTool' | 'startToolSpan' | 'trackTool'>;\n\n/** Build the association-property bag Traceloop propagates onto child spans. */\nfunction associationProps(\n ctx: TraceContext & { userId?: string },\n extra: Record<string, string>,\n): Record<string, string> {\n const props: Record<string, string> = { ...extra };\n if (ctx.userId) props.user_id = ctx.userId;\n if (ctx.convoId) props.convo_id = ctx.convoId;\n if (ctx.eventId) props.event_id = ctx.eventId;\n if (ctx.event) props.event_name = ctx.event;\n return props;\n}\n\nexport function createInteractionApi(\n initial: TraceContext & { userId?: string },\n traceContent: boolean,\n): Interaction {\n const ctx: TraceContext & { userId?: string } = {\n ...initial,\n eventId: initial.eventId ?? uuid(),\n };\n const properties: Record<string, string> = { ...(initial.properties ?? {}) };\n let input = initial.input;\n\n const withAssoc = <T>(fn: () => Promise<T> | T): Promise<T> | T =>\n traceloop.withAssociationProperties(associationProps(ctx, properties), fn);\n\n const toolName = (p: ToolParams | string) => (typeof p === 'string' ? p : p.name);\n\n function startToolSpan(params: ToolParams | string): ToolSpan {\n const name = toolName(params);\n const span: Span = traceloop.getTraceloopTracer().startSpan(name);\n span.setAttribute(SPAN_KIND, 'tool');\n span.setAttribute(ENTITY_NAME, name);\n for (const [k, v] of Object.entries(associationProps(ctx, properties))) {\n span.setAttribute(ASSOC + k, v);\n }\n if (typeof params !== 'string' && params.properties) {\n for (const [k, v] of Object.entries(params.properties)) span.setAttribute(k, v);\n }\n return {\n setInput(value: unknown) {\n if (traceContent) span.setAttribute(ENTITY_INPUT, asString(value));\n },\n setOutput(value: unknown) {\n if (traceContent) span.setAttribute(ENTITY_OUTPUT, asString(value));\n },\n setError(error: Error | string) {\n const e = typeof error === 'string' ? new Error(error) : error;\n span.recordException(e);\n span.setStatus({ code: SpanStatusCode.ERROR, message: e.message });\n },\n end() {\n span.end();\n },\n };\n }\n\n return {\n getEventId: () => ctx.eventId,\n setInput(value: string) {\n input = value;\n },\n setProperty(key: string, value: string) {\n properties[key] = value;\n },\n setProperties(props: Record<string, string>) {\n Object.assign(properties, props);\n },\n vercelAiSdkMetadata() {\n return buildMetadata({\n userId: ctx.userId ?? 'unknown',\n convoId: ctx.convoId,\n eventName: ctx.event,\n eventId: ctx.eventId,\n });\n },\n withSpan(params, fn) {\n const name = typeof params === 'string' ? params : params.name;\n return Promise.resolve(withAssoc(() => traceloop.withTask({ name }, fn)));\n },\n withTool(params, fn) {\n const name = toolName(params);\n const version = typeof params === 'string' ? undefined : params.version;\n return Promise.resolve(withAssoc(() => traceloop.withTool({ name, version }, fn)));\n },\n startToolSpan,\n trackTool(params: TrackToolParams) {\n const span = startToolSpan({ name: params.name, properties: params.properties });\n if (params.input !== undefined) span.setInput(params.input);\n if (params.output !== undefined) span.setOutput(params.output);\n if (params.error) span.setError(params.error);\n span.end();\n },\n async finish(opts) {\n const output = typeof opts === 'string' ? opts : opts.output;\n if (typeof opts !== 'string' && opts.properties) Object.assign(properties, opts.properties);\n // Emit a top-level interaction span carrying input/output + attribution.\n await Promise.resolve(\n withAssoc(() =>\n traceloop.withTask({ name: ctx.event ?? 'interaction' }, () => {\n const span = traceloop.getTraceloopTracer().startSpan(ctx.event ?? 'interaction');\n span.setAttribute(SPAN_KIND, 'workflow');\n for (const [k, v] of Object.entries(associationProps(ctx, properties))) {\n span.setAttribute(ASSOC + k, v);\n }\n if (traceContent && input) span.setAttribute(ENTITY_INPUT, input);\n if (traceContent) span.setAttribute(ENTITY_OUTPUT, output);\n span.end();\n }),\n ),\n );\n },\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
executeEditFile
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MB6ZYZ3V.js";
|
|
4
4
|
import {
|
|
5
5
|
EDIT_FILE_SYSTEM_PROMPT,
|
|
6
6
|
EDIT_FILE_TOOL_DESCRIPTION
|
|
@@ -86,4 +86,4 @@ export {
|
|
|
86
86
|
vercel_default,
|
|
87
87
|
vercel_exports
|
|
88
88
|
};
|
|
89
|
-
//# sourceMappingURL=chunk-
|
|
89
|
+
//# sourceMappingURL=chunk-OERNLFLW.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MorphAPIClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XBUHHKHX.js";
|
|
4
4
|
import {
|
|
5
5
|
APIResource
|
|
6
6
|
} from "./chunk-LKFZBBTD.js";
|
|
@@ -558,4 +558,4 @@ var MorphGit = class extends APIResource {
|
|
|
558
558
|
export {
|
|
559
559
|
MorphGit
|
|
560
560
|
};
|
|
561
|
-
//# sourceMappingURL=chunk-
|
|
561
|
+
//# sourceMappingURL=chunk-OKBNOGD5.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-F3NCFNUX.js";
|
|
4
4
|
import {
|
|
5
5
|
SDK_VERSION
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2OHOIGNC.js";
|
|
7
7
|
|
|
8
8
|
// tools/fastapply/apply.ts
|
|
9
9
|
import { createTwoFilesPatch } from "diff";
|
|
@@ -145,4 +145,4 @@ export {
|
|
|
145
145
|
callMorphAPI,
|
|
146
146
|
applyEdit
|
|
147
147
|
};
|
|
148
|
-
//# sourceMappingURL=chunk-
|
|
148
|
+
//# sourceMappingURL=chunk-OYQT243T.js.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// tracing/signals.ts
|
|
2
|
+
async function shipSignal(endpoint, apiKey, signals, debug = false, timeoutMs = 1e4) {
|
|
3
|
+
if (signals.length === 0) return;
|
|
4
|
+
const controller = new AbortController();
|
|
5
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
6
|
+
try {
|
|
7
|
+
const res = await fetch(endpoint, {
|
|
8
|
+
method: "POST",
|
|
9
|
+
headers: {
|
|
10
|
+
"Content-Type": "application/json",
|
|
11
|
+
Authorization: `Bearer ${apiKey}`
|
|
12
|
+
},
|
|
13
|
+
body: JSON.stringify({ signals }),
|
|
14
|
+
signal: controller.signal
|
|
15
|
+
});
|
|
16
|
+
if (!res.ok) {
|
|
17
|
+
const body = await res.text().catch(() => "");
|
|
18
|
+
console.warn(`[morph-tracing] signal POST failed (${res.status}): ${body}`);
|
|
19
|
+
} else if (debug) {
|
|
20
|
+
console.log(`[morph-tracing] shipped ${signals.length} signal(s)`);
|
|
21
|
+
}
|
|
22
|
+
} catch (err) {
|
|
23
|
+
console.warn(
|
|
24
|
+
"[morph-tracing] signal POST error:",
|
|
25
|
+
err instanceof Error ? err.message : err
|
|
26
|
+
);
|
|
27
|
+
} finally {
|
|
28
|
+
clearTimeout(timer);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export {
|
|
33
|
+
shipSignal
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=chunk-PICGNBUE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../tracing/signals.ts"],"sourcesContent":["/**\n * Morph Tracing — feedback signals.\n *\n * Signals (👍/👎, free-text feedback, user edits) attach to an interaction by\n * `eventId` and ship directly over HTTP — they are low-volume and need no OTel\n * pipeline. Mirrors the request shape of `tools/fastapply/core.ts`.\n */\nimport type { SignalEvent } from './types.js';\n\nexport async function shipSignal(\n endpoint: string,\n apiKey: string,\n signals: SignalEvent[],\n debug = false,\n timeoutMs = 10_000,\n): Promise<void> {\n if (signals.length === 0) return;\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const res = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ signals }),\n signal: controller.signal,\n });\n if (!res.ok) {\n const body = await res.text().catch(() => '');\n // Signals are best-effort; never throw into the caller's hot path.\n console.warn(`[morph-tracing] signal POST failed (${res.status}): ${body}`);\n } else if (debug) {\n console.log(`[morph-tracing] shipped ${signals.length} signal(s)`);\n }\n } catch (err) {\n console.warn(\n '[morph-tracing] signal POST error:',\n err instanceof Error ? err.message : err,\n );\n } finally {\n clearTimeout(timer);\n }\n}\n"],"mappings":";AASA,eAAsB,WACpB,UACA,QACA,SACA,QAAQ,OACR,YAAY,KACG;AACf,MAAI,QAAQ,WAAW,EAAG;AAE1B,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,QAAQ,WAAW,MAAM,WAAW,MAAM,GAAG,SAAS;AAC5D,MAAI;AACF,UAAM,MAAM,MAAM,MAAM,UAAU;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eAAe,UAAU,MAAM;AAAA,MACjC;AAAA,MACA,MAAM,KAAK,UAAU,EAAE,QAAQ,CAAC;AAAA,MAChC,QAAQ,WAAW;AAAA,IACrB,CAAC;AACD,QAAI,CAAC,IAAI,IAAI;AACX,YAAM,OAAO,MAAM,IAAI,KAAK,EAAE,MAAM,MAAM,EAAE;AAE5C,cAAQ,KAAK,uCAAuC,IAAI,MAAM,MAAM,IAAI,EAAE;AAAA,IAC5E,WAAW,OAAO;AAChB,cAAQ,IAAI,2BAA2B,QAAQ,MAAM,YAAY;AAAA,IACnE;AAAA,EACF,SAAS,KAAK;AACZ,YAAQ;AAAA,MACN;AAAA,MACA,eAAe,QAAQ,IAAI,UAAU;AAAA,IACvC;AAAA,EACF,UAAE;AACA,iBAAa,KAAK;AAAA,EACpB;AACF;","names":[]}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
parseGitHubUrl
|
|
3
|
-
} from "./chunk-63VHBANJ.js";
|
|
4
|
-
import {
|
|
5
|
-
runWarpGrep,
|
|
6
|
-
runWarpGrepStreaming
|
|
7
|
-
} from "./chunk-7PVVPLRL.js";
|
|
8
1
|
import {
|
|
9
2
|
createCodeStorageHttpCommands
|
|
10
3
|
} from "./chunk-GVGJIXV2.js";
|
|
11
4
|
import {
|
|
12
5
|
RemoteCommandsProvider
|
|
13
6
|
} from "./chunk-A4D2CIIT.js";
|
|
7
|
+
import {
|
|
8
|
+
parseGitHubUrl
|
|
9
|
+
} from "./chunk-63VHBANJ.js";
|
|
10
|
+
import {
|
|
11
|
+
runWarpGrep,
|
|
12
|
+
runWarpGrepStreaming
|
|
13
|
+
} from "./chunk-DK442LPX.js";
|
|
14
14
|
import {
|
|
15
15
|
compactFileContexts
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-B2GSQO2U.js";
|
|
17
17
|
import {
|
|
18
18
|
MorphAPIClient
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-XBUHHKHX.js";
|
|
20
20
|
import {
|
|
21
21
|
logger
|
|
22
22
|
} from "./chunk-F3NCFNUX.js";
|
|
@@ -321,4 +321,4 @@ export {
|
|
|
321
321
|
formatGitHubReadFileResult,
|
|
322
322
|
formatResult
|
|
323
323
|
};
|
|
324
|
-
//# sourceMappingURL=chunk-
|
|
324
|
+
//# sourceMappingURL=chunk-QW3ARPU3.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MorphAPIClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XBUHHKHX.js";
|
|
4
4
|
import {
|
|
5
5
|
MorphError
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-M35HA2EQ.js";
|
|
7
7
|
import {
|
|
8
8
|
APIResource
|
|
9
9
|
} from "./chunk-LKFZBBTD.js";
|
|
@@ -75,4 +75,4 @@ var CompactClient = class extends APIResource {
|
|
|
75
75
|
export {
|
|
76
76
|
CompactClient
|
|
77
77
|
};
|
|
78
|
-
//# sourceMappingURL=chunk-
|
|
78
|
+
//# sourceMappingURL=chunk-RH2E2PTB.js.map
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createGitHubSearchTool,
|
|
3
|
-
createWarpGrepTool
|
|
4
|
-
} from "./chunk-U4MRSZQQ.js";
|
|
5
1
|
import {
|
|
6
2
|
createGitHubSearchTool as createGitHubSearchTool3,
|
|
7
3
|
createWarpGrepTool as createWarpGrepTool3
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import {
|
|
10
|
-
ReflexClient
|
|
11
|
-
} from "./chunk-6X6QMRQG.js";
|
|
4
|
+
} from "./chunk-WKNYYI2G.js";
|
|
12
5
|
import {
|
|
13
6
|
createGitHubSearchTool as createGitHubSearchTool2,
|
|
14
7
|
createWarpGrepTool as createWarpGrepTool2
|
|
15
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-4IO2Z7US.js";
|
|
16
9
|
import {
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
createGitHubSearchTool,
|
|
11
|
+
createWarpGrepTool
|
|
12
|
+
} from "./chunk-S3GAUEV6.js";
|
|
13
|
+
import {
|
|
14
|
+
ReflexClient
|
|
15
|
+
} from "./chunk-XVNI3Y3O.js";
|
|
19
16
|
import {
|
|
20
17
|
createCodebaseSearchTool as createCodebaseSearchTool3
|
|
21
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-SSGEZ4GK.js";
|
|
22
19
|
import {
|
|
23
20
|
createCodebaseSearchTool as createCodebaseSearchTool2
|
|
24
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-4SQU273Z.js";
|
|
22
|
+
import {
|
|
23
|
+
createCodebaseSearchTool
|
|
24
|
+
} from "./chunk-J5XHHP5X.js";
|
|
25
25
|
import {
|
|
26
26
|
CodebaseSearchClient
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-ZG6JEYEG.js";
|
|
28
28
|
import {
|
|
29
|
-
|
|
30
|
-
} from "./chunk-
|
|
29
|
+
BrowserClient
|
|
30
|
+
} from "./chunk-GWRJD5WE.js";
|
|
31
31
|
import {
|
|
32
|
-
|
|
33
|
-
} from "./chunk-
|
|
32
|
+
createExploreSubagent as createExploreSubagent2
|
|
33
|
+
} from "./chunk-ZHWVJ7SF.js";
|
|
34
34
|
import {
|
|
35
35
|
createEditFileTool
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-7D7FJY7Y.js";
|
|
37
37
|
import {
|
|
38
38
|
createEditFileTool as createEditFileTool3
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-OERNLFLW.js";
|
|
40
40
|
import {
|
|
41
|
-
|
|
42
|
-
} from "./chunk-
|
|
41
|
+
createEditFileTool as createEditFileTool2
|
|
42
|
+
} from "./chunk-2VMJYD6W.js";
|
|
43
43
|
import {
|
|
44
|
-
|
|
45
|
-
} from "./chunk-
|
|
44
|
+
FastApplyClient
|
|
45
|
+
} from "./chunk-MB6ZYZ3V.js";
|
|
46
46
|
import {
|
|
47
47
|
MorphGit
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-OKBNOGD5.js";
|
|
49
49
|
import {
|
|
50
50
|
createExploreSubagent
|
|
51
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-ABMYD6QV.js";
|
|
52
52
|
import {
|
|
53
53
|
WarpGrepClient
|
|
54
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-QW3ARPU3.js";
|
|
55
55
|
import {
|
|
56
56
|
AnthropicRouter,
|
|
57
57
|
GeminiRouter,
|
|
58
58
|
OpenAIRouter,
|
|
59
59
|
RawRouter
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-DHFFOBSV.js";
|
|
61
61
|
import {
|
|
62
62
|
CompactClient
|
|
63
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-RH2E2PTB.js";
|
|
64
64
|
import {
|
|
65
65
|
MorphAPIClient
|
|
66
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-XBUHHKHX.js";
|
|
67
67
|
import {
|
|
68
68
|
logger
|
|
69
69
|
} from "./chunk-F3NCFNUX.js";
|
|
@@ -687,4 +687,4 @@ export {
|
|
|
687
687
|
VercelToolFactory,
|
|
688
688
|
MorphClient
|
|
689
689
|
};
|
|
690
|
-
//# sourceMappingURL=chunk-
|
|
690
|
+
//# sourceMappingURL=chunk-RM2U5DE4.js.map
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
executeToolCall,
|
|
15
15
|
formatGitHubReadFileResult,
|
|
16
16
|
formatResult
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-QW3ARPU3.js";
|
|
18
18
|
|
|
19
19
|
// tools/warp_grep/openai.ts
|
|
20
20
|
var TOOL_PARAMETERS = {
|
|
@@ -104,4 +104,4 @@ export {
|
|
|
104
104
|
createGitHubReadFileTool,
|
|
105
105
|
openai_default
|
|
106
106
|
};
|
|
107
|
-
//# sourceMappingURL=chunk-
|
|
107
|
+
//# sourceMappingURL=chunk-S3GAUEV6.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-YQMPVJ2L.js";
|
|
4
4
|
import {
|
|
5
5
|
executeCodebaseSearch
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ZG6JEYEG.js";
|
|
7
7
|
|
|
8
8
|
// tools/codebase_search/vercel.ts
|
|
9
9
|
import { tool } from "ai";
|
|
@@ -55,4 +55,4 @@ export {
|
|
|
55
55
|
getSystemPrompt,
|
|
56
56
|
vercel_default
|
|
57
57
|
};
|
|
58
|
-
//# sourceMappingURL=chunk-
|
|
58
|
+
//# sourceMappingURL=chunk-SSGEZ4GK.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
executeGitHubReadFile,
|
|
9
9
|
executeToolCall,
|
|
10
10
|
executeToolCallStreaming
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-QW3ARPU3.js";
|
|
12
12
|
|
|
13
13
|
// tools/warp_grep/vercel.ts
|
|
14
14
|
import { tool } from "ai";
|
|
@@ -115,4 +115,4 @@ export {
|
|
|
115
115
|
createGitHubReadFileTool,
|
|
116
116
|
vercel_default
|
|
117
117
|
};
|
|
118
|
-
//# sourceMappingURL=chunk-
|
|
118
|
+
//# sourceMappingURL=chunk-WKNYYI2G.js.map
|
|
@@ -3,15 +3,15 @@ import {
|
|
|
3
3
|
} from "./chunk-F3NCFNUX.js";
|
|
4
4
|
import {
|
|
5
5
|
toMorphError
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-CBPPR3OM.js";
|
|
7
7
|
import {
|
|
8
8
|
MorphError,
|
|
9
9
|
fetchWithRetry,
|
|
10
10
|
withTimeout
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-M35HA2EQ.js";
|
|
12
12
|
import {
|
|
13
13
|
SDK_VERSION
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-2OHOIGNC.js";
|
|
15
15
|
|
|
16
16
|
// core/client.ts
|
|
17
17
|
var DEFAULT_BASE_URL = "https://api.morphllm.com";
|
|
@@ -117,4 +117,4 @@ var MorphAPIClient = class {
|
|
|
117
117
|
export {
|
|
118
118
|
MorphAPIClient
|
|
119
119
|
};
|
|
120
|
-
//# sourceMappingURL=chunk-
|
|
120
|
+
//# sourceMappingURL=chunk-XBUHHKHX.js.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__export
|
|
3
|
+
} from "./chunk-PZ5AY32C.js";
|
|
4
|
+
|
|
5
|
+
// tracing/otel.ts
|
|
6
|
+
var otel_exports = {};
|
|
7
|
+
__export(otel_exports, {
|
|
8
|
+
MORPH_METADATA_PREFIX: () => MORPH_METADATA_PREFIX,
|
|
9
|
+
default: () => otel_default,
|
|
10
|
+
metadata: () => metadata
|
|
11
|
+
});
|
|
12
|
+
var MORPH_METADATA_PREFIX = "morph";
|
|
13
|
+
function uuid() {
|
|
14
|
+
const c = globalThis.crypto;
|
|
15
|
+
if (c?.randomUUID) return c.randomUUID();
|
|
16
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (ch) => {
|
|
17
|
+
const r = Math.random() * 16 | 0;
|
|
18
|
+
const v = ch === "x" ? r : r & 3 | 8;
|
|
19
|
+
return v.toString(16);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function metadata(opts) {
|
|
23
|
+
const result = {
|
|
24
|
+
[`${MORPH_METADATA_PREFIX}.userId`]: opts.userId,
|
|
25
|
+
[`${MORPH_METADATA_PREFIX}.eventId`]: opts.eventId ?? uuid()
|
|
26
|
+
};
|
|
27
|
+
if (opts.convoId) result[`${MORPH_METADATA_PREFIX}.convoId`] = opts.convoId;
|
|
28
|
+
if (opts.eventName) result[`${MORPH_METADATA_PREFIX}.eventName`] = opts.eventName;
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
var otel_default = { metadata };
|
|
32
|
+
|
|
33
|
+
export {
|
|
34
|
+
MORPH_METADATA_PREFIX,
|
|
35
|
+
metadata,
|
|
36
|
+
otel_default,
|
|
37
|
+
otel_exports
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=chunk-XQ4T5QDT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../tracing/otel.ts"],"sourcesContent":["/**\n * Morph Tracing — Vercel AI SDK helper.\n *\n * The Vercel AI SDK emits its own OpenTelemetry spans when you pass\n * `experimental_telemetry`. There is nothing to monkey-patch; instead you tag\n * each call with `metadata()` so Morph can attribute the resulting spans to a\n * user/conversation/event.\n *\n * @example\n * ```ts\n * import { generateText } from \"ai\";\n * import { metadata } from \"morphsdk/tracing/otel\";\n *\n * const res = await generateText({\n * model: openai(\"gpt-4o\"),\n * prompt: \"Hello!\",\n * experimental_telemetry: {\n * isEnabled: true,\n * metadata: metadata({ userId: \"user-123\", convoId: \"convo-456\" }),\n * },\n * });\n * ```\n */\nimport type { MetadataOptions } from './types.js';\n\n/** Prefix under which Morph reads attribution from AI SDK telemetry metadata. */\nexport const MORPH_METADATA_PREFIX = 'morph';\n\nfunction uuid(): string {\n // Node 18+ and modern runtimes expose globalThis.crypto.randomUUID.\n const c = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (c?.randomUUID) return c.randomUUID();\n // Fallback: RFC4122-ish without crypto.\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (ch) => {\n const r = (Math.random() * 16) | 0;\n const v = ch === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * Build the metadata object for the Vercel AI SDK's\n * `experimental_telemetry.metadata`. The values are propagated to every span the\n * AI SDK creates for that call. Generate a fresh `eventId` per call for grouping.\n */\nexport function metadata(opts: MetadataOptions): Record<string, string> {\n const result: Record<string, string> = {\n [`${MORPH_METADATA_PREFIX}.userId`]: opts.userId,\n [`${MORPH_METADATA_PREFIX}.eventId`]: opts.eventId ?? uuid(),\n };\n if (opts.convoId) result[`${MORPH_METADATA_PREFIX}.convoId`] = opts.convoId;\n if (opts.eventName) result[`${MORPH_METADATA_PREFIX}.eventName`] = opts.eventName;\n return result;\n}\n\nexport default { metadata };\n"],"mappings":";;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BO,IAAM,wBAAwB;AAErC,SAAS,OAAe;AAEtB,QAAM,IAAK,WAA0D;AACrE,MAAI,GAAG,WAAY,QAAO,EAAE,WAAW;AAEvC,SAAO,uCAAuC,QAAQ,SAAS,CAAC,OAAO;AACrE,UAAM,IAAK,KAAK,OAAO,IAAI,KAAM;AACjC,UAAM,IAAI,OAAO,MAAM,IAAK,IAAI,IAAO;AACvC,WAAO,EAAE,SAAS,EAAE;AAAA,EACtB,CAAC;AACH;AAOO,SAAS,SAAS,MAA+C;AACtE,QAAM,SAAiC;AAAA,IACrC,CAAC,GAAG,qBAAqB,SAAS,GAAG,KAAK;AAAA,IAC1C,CAAC,GAAG,qBAAqB,UAAU,GAAG,KAAK,WAAW,KAAK;AAAA,EAC7D;AACA,MAAI,KAAK,QAAS,QAAO,GAAG,qBAAqB,UAAU,IAAI,KAAK;AACpE,MAAI,KAAK,UAAW,QAAO,GAAG,qBAAqB,YAAY,IAAI,KAAK;AACxE,SAAO;AACT;AAEA,IAAO,eAAQ,EAAE,SAAS;","names":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MorphAPIClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XBUHHKHX.js";
|
|
4
4
|
import {
|
|
5
5
|
MorphError
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-M35HA2EQ.js";
|
|
7
7
|
import {
|
|
8
8
|
APIResource
|
|
9
9
|
} from "./chunk-LKFZBBTD.js";
|
|
@@ -36,7 +36,7 @@ var ReflexClient = class extends APIResource {
|
|
|
36
36
|
model: raw.model,
|
|
37
37
|
label: raw.label,
|
|
38
38
|
confidence: raw.confidence,
|
|
39
|
-
allScores: raw.all_scores ??
|
|
39
|
+
allScores: raw.all_scores ?? [],
|
|
40
40
|
inferenceTimeMs: raw.inference_time_ms
|
|
41
41
|
};
|
|
42
42
|
}
|
|
@@ -155,4 +155,4 @@ export {
|
|
|
155
155
|
ReflexClient,
|
|
156
156
|
ReflexJobsResource
|
|
157
157
|
};
|
|
158
|
-
//# sourceMappingURL=chunk-
|
|
158
|
+
//# sourceMappingURL=chunk-XVNI3Y3O.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../tools/reflex/core.ts"],"sourcesContent":["/**\n * Reflex: train and serve small text classifiers.\n *\n * const morph = new MorphClient({ apiKey });\n * const job = await morph.reflex.jobs.create({ trainingData: rows, suffix: 'support' });\n * const ready = await morph.reflex.jobs.waitForReady(job.id);\n * const out = await morph.reflex.predict({ model: ready.fineTunedModel!, text: 'refund please' });\n *\n * Mirrors the OpenAI fine-tuning shape (`reflex.jobs.create/retrieve/list/cancel/delete`)\n * plus `reflex.predict`. All HTTP goes through the shared `MorphAPIClient` transport.\n */\nimport { MorphAPIClient } from '../../core/client.js';\nimport { APIResource } from '../../core/resource.js';\nimport { MorphError } from '../utils/resilience.js';\nimport type {\n CreateReflexJobInput,\n DeletedReflexJob,\n ListReflexJobsInput,\n ReflexConfig,\n ReflexEvent,\n ReflexJob,\n ReflexJobList,\n ReflexPredictInput,\n ReflexPredictResult,\n} from './types.js';\n\nconst BASE_MODEL = 'morph-reflex-v1';\n\n/** Build a transport from either a shared client or a standalone `ReflexConfig`. */\nfunction resolveClient(clientOrConfig: MorphAPIClient | ReflexConfig): MorphAPIClient {\n if (clientOrConfig instanceof MorphAPIClient) return clientOrConfig;\n return new MorphAPIClient({\n apiKey: clientOrConfig.apiKey,\n baseURL: clientOrConfig.baseUrl,\n timeout: clientOrConfig.timeout,\n retryConfig: clientOrConfig.retryConfig,\n debug: clientOrConfig.debug,\n });\n}\n\n/**\n * @deprecated Prefer the unified `MorphClient` (`new MorphClient({ apiKey }).reflex`).\n * Standalone clients remain only for backwards compatibility and may be removed in a future\n * major version — do not use them in new code.\n */\nexport class ReflexClient extends APIResource {\n /** Train, retrieve, and manage classifier jobs. */\n public readonly jobs: ReflexJobsResource;\n\n constructor(clientOrConfig: MorphAPIClient | ReflexConfig = {}) {\n super(resolveClient(clientOrConfig));\n this.jobs = new ReflexJobsResource(this._client);\n }\n\n /** Classify text against a trained model. The model must be `succeeded`. */\n async predict(input: ReflexPredictInput): Promise<ReflexPredictResult> {\n const raw = await this._client.post<RawPredict>('/v1/reflex/predict', {\n body: { model: input.model, text: input.text },\n });\n return {\n model: raw.model,\n label: raw.label,\n confidence: raw.confidence,\n allScores: raw.all_scores ?? {},\n inferenceTimeMs: raw.inference_time_ms,\n };\n }\n}\n\nexport class ReflexJobsResource extends APIResource {\n /** Start a training job from labeled data, a description, or unlabeled text. */\n async create(input: CreateReflexJobInput): Promise<ReflexJob> {\n return toReflexJob(await this._client.post<RawJob>('/v1/fine_tuning/jobs', { body: createBody(input) }));\n }\n\n /** Fetch a job by id. */\n async retrieve(id: string): Promise<ReflexJob> {\n return toReflexJob(await this._client.get<RawJob>(`/v1/fine_tuning/jobs/${encodeURIComponent(id)}`));\n }\n\n /** List the caller's jobs, newest first. */\n async list(input: ListReflexJobsInput = {}): Promise<ReflexJobList> {\n const raw = await this._client.get<RawJobList>('/v1/fine_tuning/jobs', {\n query: { limit: input.limit, after: input.after },\n });\n return { data: (raw.data ?? []).map(toReflexJob), hasMore: Boolean(raw.has_more) };\n }\n\n /** Stop a queued or running job. */\n async cancel(id: string): Promise<ReflexJob> {\n return toReflexJob(await this._client.post<RawJob>(`/v1/fine_tuning/jobs/${encodeURIComponent(id)}/cancel`));\n }\n\n /** Delete a job and its trained model. */\n async delete(id: string): Promise<DeletedReflexJob> {\n const raw = await this._client.delete<{ id: string; deleted?: boolean }>(\n `/v1/fine_tuning/jobs/${encodeURIComponent(id)}`,\n );\n return { id: raw.id, deleted: Boolean(raw.deleted) };\n }\n\n /** The training loss curve as events, plus a terminal event. */\n async events(id: string): Promise<ReflexEvent[]> {\n const raw = await this._client.get<{ data?: RawEvent[] }>(\n `/v1/fine_tuning/jobs/${encodeURIComponent(id)}/events`,\n );\n return (raw.data ?? []).map(toReflexEvent);\n }\n\n /**\n * Poll until the job reaches a terminal status and return it on success.\n * Throws a `MorphError` if it fails, is cancelled, or exceeds `timeoutMs`.\n */\n async waitForReady(id: string, opts: { pollMs?: number; timeoutMs?: number } = {}): Promise<ReflexJob> {\n const pollMs = opts.pollMs ?? 3_000;\n const deadline = Date.now() + (opts.timeoutMs ?? 15 * 60_000);\n\n for (;;) {\n const job = await this.retrieve(id);\n if (job.status === 'succeeded') return job;\n if (job.status === 'failed' || job.status === 'cancelled') {\n throw new MorphError(job.error?.message ?? `Reflex job ${job.status}`, `reflex_job_${job.status}`);\n }\n if (Date.now() >= deadline) {\n throw new MorphError(`Reflex job ${id} did not finish in time`, 'reflex_timeout');\n }\n await sleep(pollMs);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Mapping (camelCase <-> snake_case) and helpers\n// ---------------------------------------------------------------------------\n\ninterface RawJob {\n id: string;\n model: string;\n created_at: number;\n finished_at: number | null;\n fine_tuned_model: string | null;\n status: ReflexJob['status'];\n labels?: string[];\n trained_examples?: number;\n result?: { accuracy: number | null; f1_score: number | null } | null;\n error?: { message: string } | null;\n suffix?: string | null;\n}\ninterface RawJobList {\n data?: RawJob[];\n has_more?: boolean;\n}\ninterface RawPredict {\n model: string;\n label: string;\n confidence: number;\n all_scores?: Record<string, number>;\n inference_time_ms: number;\n}\ninterface RawEvent {\n id: string;\n created_at: number;\n level: ReflexEvent['level'];\n message: string;\n type: ReflexEvent['type'];\n data?: { epoch?: number; step?: number; train_loss?: number };\n}\n\nfunction createBody(input: CreateReflexJobInput): Record<string, unknown> {\n const base: Record<string, unknown> = { model: BASE_MODEL };\n if (input.suffix) base.suffix = input.suffix;\n\n if ('trainingData' in input) {\n if (input.labels) base.labels = input.labels;\n return { ...base, training_data: input.trainingData };\n }\n if ('generate' in input) {\n return {\n ...base,\n labels: input.labels,\n generate: {\n description: input.generate.description,\n ...(input.generate.examplesPerLabel != null ? { examples_per_label: input.generate.examplesPerLabel } : {}),\n },\n };\n }\n return {\n ...base,\n labels: input.labels,\n label_data: {\n texts: input.labelData.texts,\n ...(input.labelData.description ? { description: input.labelData.description } : {}),\n },\n };\n}\n\nfunction toReflexJob(raw: RawJob): ReflexJob {\n return {\n id: raw.id,\n object: 'fine_tuning.job',\n model: raw.model,\n createdAt: raw.created_at,\n finishedAt: raw.finished_at ?? null,\n fineTunedModel: raw.fine_tuned_model ?? null,\n status: raw.status,\n labels: raw.labels ?? [],\n trainedExamples: raw.trained_examples ?? 0,\n result: raw.result ? { accuracy: raw.result.accuracy ?? null, f1Score: raw.result.f1_score ?? null } : null,\n error: raw.error ? { message: raw.error.message } : null,\n suffix: raw.suffix ?? null,\n };\n}\n\nfunction toReflexEvent(raw: RawEvent): ReflexEvent {\n return {\n id: raw.id,\n createdAt: raw.created_at,\n level: raw.level,\n message: raw.message,\n type: raw.type,\n data: { epoch: raw.data?.epoch ?? 0, step: raw.data?.step ?? 0, trainLoss: raw.data?.train_loss ?? 0 },\n };\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../tools/reflex/core.ts"],"sourcesContent":["/**\n * Reflex: train and serve small text classifiers.\n *\n * const morph = new MorphClient({ apiKey });\n * const job = await morph.reflex.jobs.create({ trainingData: rows, suffix: 'support' });\n * const ready = await morph.reflex.jobs.waitForReady(job.id);\n * const out = await morph.reflex.predict({ model: ready.fineTunedModel!, text: 'refund please' });\n *\n * Mirrors the OpenAI fine-tuning shape (`reflex.jobs.create/retrieve/list/cancel/delete`)\n * plus `reflex.predict`. All HTTP goes through the shared `MorphAPIClient` transport.\n */\nimport { MorphAPIClient } from '../../core/client.js';\nimport { APIResource } from '../../core/resource.js';\nimport { MorphError } from '../utils/resilience.js';\nimport type {\n CreateReflexJobInput,\n DeletedReflexJob,\n ListReflexJobsInput,\n ReflexConfig,\n ReflexEvent,\n ReflexJob,\n ReflexJobList,\n ReflexPredictInput,\n ReflexPredictResult,\n} from './types.js';\n\nconst BASE_MODEL = 'morph-reflex-v1';\n\n/** Build a transport from either a shared client or a standalone `ReflexConfig`. */\nfunction resolveClient(clientOrConfig: MorphAPIClient | ReflexConfig): MorphAPIClient {\n if (clientOrConfig instanceof MorphAPIClient) return clientOrConfig;\n return new MorphAPIClient({\n apiKey: clientOrConfig.apiKey,\n baseURL: clientOrConfig.baseUrl,\n timeout: clientOrConfig.timeout,\n retryConfig: clientOrConfig.retryConfig,\n debug: clientOrConfig.debug,\n });\n}\n\n/**\n * @deprecated Prefer the unified `MorphClient` (`new MorphClient({ apiKey }).reflex`).\n * Standalone clients remain only for backwards compatibility and may be removed in a future\n * major version — do not use them in new code.\n */\nexport class ReflexClient extends APIResource {\n /** Train, retrieve, and manage classifier jobs. */\n public readonly jobs: ReflexJobsResource;\n\n constructor(clientOrConfig: MorphAPIClient | ReflexConfig = {}) {\n super(resolveClient(clientOrConfig));\n this.jobs = new ReflexJobsResource(this._client);\n }\n\n /** Classify text against a trained model. The model must be `succeeded`. */\n async predict(input: ReflexPredictInput): Promise<ReflexPredictResult> {\n const raw = await this._client.post<RawPredict>('/v1/reflex/predict', {\n body: { model: input.model, text: input.text },\n });\n return {\n model: raw.model,\n label: raw.label,\n confidence: raw.confidence,\n allScores: raw.all_scores ?? [],\n inferenceTimeMs: raw.inference_time_ms,\n };\n }\n}\n\nexport class ReflexJobsResource extends APIResource {\n /** Start a training job from labeled data, a description, or unlabeled text. */\n async create(input: CreateReflexJobInput): Promise<ReflexJob> {\n return toReflexJob(await this._client.post<RawJob>('/v1/fine_tuning/jobs', { body: createBody(input) }));\n }\n\n /** Fetch a job by id. */\n async retrieve(id: string): Promise<ReflexJob> {\n return toReflexJob(await this._client.get<RawJob>(`/v1/fine_tuning/jobs/${encodeURIComponent(id)}`));\n }\n\n /** List the caller's jobs, newest first. */\n async list(input: ListReflexJobsInput = {}): Promise<ReflexJobList> {\n const raw = await this._client.get<RawJobList>('/v1/fine_tuning/jobs', {\n query: { limit: input.limit, after: input.after },\n });\n return { data: (raw.data ?? []).map(toReflexJob), hasMore: Boolean(raw.has_more) };\n }\n\n /** Stop a queued or running job. */\n async cancel(id: string): Promise<ReflexJob> {\n return toReflexJob(await this._client.post<RawJob>(`/v1/fine_tuning/jobs/${encodeURIComponent(id)}/cancel`));\n }\n\n /** Delete a job and its trained model. */\n async delete(id: string): Promise<DeletedReflexJob> {\n const raw = await this._client.delete<{ id: string; deleted?: boolean }>(\n `/v1/fine_tuning/jobs/${encodeURIComponent(id)}`,\n );\n return { id: raw.id, deleted: Boolean(raw.deleted) };\n }\n\n /** The training loss curve as events, plus a terminal event. */\n async events(id: string): Promise<ReflexEvent[]> {\n const raw = await this._client.get<{ data?: RawEvent[] }>(\n `/v1/fine_tuning/jobs/${encodeURIComponent(id)}/events`,\n );\n return (raw.data ?? []).map(toReflexEvent);\n }\n\n /**\n * Poll until the job reaches a terminal status and return it on success.\n * Throws a `MorphError` if it fails, is cancelled, or exceeds `timeoutMs`.\n */\n async waitForReady(id: string, opts: { pollMs?: number; timeoutMs?: number } = {}): Promise<ReflexJob> {\n const pollMs = opts.pollMs ?? 3_000;\n const deadline = Date.now() + (opts.timeoutMs ?? 15 * 60_000);\n\n for (;;) {\n const job = await this.retrieve(id);\n if (job.status === 'succeeded') return job;\n if (job.status === 'failed' || job.status === 'cancelled') {\n throw new MorphError(job.error?.message ?? `Reflex job ${job.status}`, `reflex_job_${job.status}`);\n }\n if (Date.now() >= deadline) {\n throw new MorphError(`Reflex job ${id} did not finish in time`, 'reflex_timeout');\n }\n await sleep(pollMs);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Mapping (camelCase <-> snake_case) and helpers\n// ---------------------------------------------------------------------------\n\ninterface RawJob {\n id: string;\n model: string;\n created_at: number;\n finished_at: number | null;\n fine_tuned_model: string | null;\n status: ReflexJob['status'];\n labels?: string[];\n trained_examples?: number;\n result?: { accuracy: number | null; f1_score: number | null } | null;\n error?: { message: string } | null;\n suffix?: string | null;\n}\ninterface RawJobList {\n data?: RawJob[];\n has_more?: boolean;\n}\ninterface RawPredict {\n model: string;\n label: string;\n confidence: number;\n all_scores?: number[];\n inference_time_ms: number;\n}\ninterface RawEvent {\n id: string;\n created_at: number;\n level: ReflexEvent['level'];\n message: string;\n type: ReflexEvent['type'];\n data?: { epoch?: number; step?: number; train_loss?: number };\n}\n\nfunction createBody(input: CreateReflexJobInput): Record<string, unknown> {\n const base: Record<string, unknown> = { model: BASE_MODEL };\n if (input.suffix) base.suffix = input.suffix;\n\n if ('trainingData' in input) {\n if (input.labels) base.labels = input.labels;\n return { ...base, training_data: input.trainingData };\n }\n if ('generate' in input) {\n return {\n ...base,\n labels: input.labels,\n generate: {\n description: input.generate.description,\n ...(input.generate.examplesPerLabel != null ? { examples_per_label: input.generate.examplesPerLabel } : {}),\n },\n };\n }\n return {\n ...base,\n labels: input.labels,\n label_data: {\n texts: input.labelData.texts,\n ...(input.labelData.description ? { description: input.labelData.description } : {}),\n },\n };\n}\n\nfunction toReflexJob(raw: RawJob): ReflexJob {\n return {\n id: raw.id,\n object: 'fine_tuning.job',\n model: raw.model,\n createdAt: raw.created_at,\n finishedAt: raw.finished_at ?? null,\n fineTunedModel: raw.fine_tuned_model ?? null,\n status: raw.status,\n labels: raw.labels ?? [],\n trainedExamples: raw.trained_examples ?? 0,\n result: raw.result ? { accuracy: raw.result.accuracy ?? null, f1Score: raw.result.f1_score ?? null } : null,\n error: raw.error ? { message: raw.error.message } : null,\n suffix: raw.suffix ?? null,\n };\n}\n\nfunction toReflexEvent(raw: RawEvent): ReflexEvent {\n return {\n id: raw.id,\n createdAt: raw.created_at,\n level: raw.level,\n message: raw.message,\n type: raw.type,\n data: { epoch: raw.data?.epoch ?? 0, step: raw.data?.step ?? 0, trainLoss: raw.data?.train_loss ?? 0 },\n };\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MorphAPIClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XBUHHKHX.js";
|
|
4
4
|
import {
|
|
5
5
|
logger
|
|
6
6
|
} from "./chunk-F3NCFNUX.js";
|
|
7
7
|
import {
|
|
8
8
|
MorphError
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-M35HA2EQ.js";
|
|
10
10
|
import {
|
|
11
11
|
APIResource
|
|
12
12
|
} from "./chunk-LKFZBBTD.js";
|
|
@@ -94,4 +94,4 @@ export {
|
|
|
94
94
|
CodebaseSearchClient,
|
|
95
95
|
executeCodebaseSearch
|
|
96
96
|
};
|
|
97
|
-
//# sourceMappingURL=chunk-
|
|
97
|
+
//# sourceMappingURL=chunk-ZG6JEYEG.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
WarpGrepClient,
|
|
3
3
|
formatResult
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QW3ARPU3.js";
|
|
5
5
|
import {
|
|
6
6
|
CODEBASE_SEARCH_TOOL,
|
|
7
7
|
SEND_MESSAGE_TOOL,
|
|
@@ -262,4 +262,4 @@ function deduplicateContexts(contexts) {
|
|
|
262
262
|
export {
|
|
263
263
|
createExploreSubagent
|
|
264
264
|
};
|
|
265
|
-
//# sourceMappingURL=chunk-
|
|
265
|
+
//# sourceMappingURL=chunk-ZHWVJ7SF.js.map
|