lumnisai 0.5.47 → 0.5.49
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/index.cjs +379 -17
- package/dist/index.d.cts +827 -5
- package/dist/index.d.mts +827 -5
- package/dist/index.d.ts +827 -5
- package/dist/index.mjs +379 -17
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1934,12 +1934,23 @@ function toSnake(s) {
|
|
|
1934
1934
|
return index === 0 ? letter.toLowerCase() : `_${letter.toLowerCase()}`;
|
|
1935
1935
|
});
|
|
1936
1936
|
}
|
|
1937
|
+
const PASSTHROUGH_VALUE_KEYS = /* @__PURE__ */ new Set([
|
|
1938
|
+
"customFields",
|
|
1939
|
+
"custom_fields",
|
|
1940
|
+
"engagementProfile",
|
|
1941
|
+
"engagement_profile",
|
|
1942
|
+
// account_monitor's committee: its own fields (`people`, `groups`) are
|
|
1943
|
+
// spelled the same in both cases, while the group labels underneath
|
|
1944
|
+
// `groups` are caller-chosen names such as 'Security team'. Converting
|
|
1945
|
+
// those would rename the customer's own groups.
|
|
1946
|
+
"committee"
|
|
1947
|
+
]);
|
|
1937
1948
|
function convertCase(obj, converter) {
|
|
1938
1949
|
if (Array.isArray(obj)) {
|
|
1939
1950
|
return obj.map((v) => convertCase(v, converter));
|
|
1940
1951
|
} else if (obj !== null && typeof obj === "object") {
|
|
1941
1952
|
return Object.keys(obj).reduce((acc, key) => {
|
|
1942
|
-
const value = key
|
|
1953
|
+
const value = PASSTHROUGH_VALUE_KEYS.has(key) ? obj[key] : convertCase(obj[key], converter);
|
|
1943
1954
|
acc[converter(key)] = value;
|
|
1944
1955
|
return acc;
|
|
1945
1956
|
}, {});
|
|
@@ -3250,6 +3261,38 @@ const ENGAGEMENT_ACTIVITIES = [
|
|
|
3250
3261
|
"comments",
|
|
3251
3262
|
"authored_posts"
|
|
3252
3263
|
];
|
|
3264
|
+
const ACCOUNT_MONITOR_SIGNALS = [
|
|
3265
|
+
"company_hiring",
|
|
3266
|
+
"company_news",
|
|
3267
|
+
"company_funding",
|
|
3268
|
+
"company_posts",
|
|
3269
|
+
"company_mention",
|
|
3270
|
+
"company_background",
|
|
3271
|
+
"committee_activity",
|
|
3272
|
+
"committee_to_competitor",
|
|
3273
|
+
"competitor_to_committee",
|
|
3274
|
+
"committee_to_our_company",
|
|
3275
|
+
"account_to_our_company"
|
|
3276
|
+
];
|
|
3277
|
+
const RETIRED_ACCOUNT_MONITOR_SIGNALS = [
|
|
3278
|
+
"incoming_engagement",
|
|
3279
|
+
"our_company_to_committee",
|
|
3280
|
+
"our_company_to_account"
|
|
3281
|
+
];
|
|
3282
|
+
const ACCOUNT_MONITOR_FIELDS = [
|
|
3283
|
+
["account", "account"],
|
|
3284
|
+
["depth", "depth"],
|
|
3285
|
+
["committee", "committee"],
|
|
3286
|
+
["competitors", "competitors"],
|
|
3287
|
+
["ourCompany", "our_company"],
|
|
3288
|
+
["days", "days"],
|
|
3289
|
+
["window", "window"],
|
|
3290
|
+
["signalDefinitions", "signal_definitions"],
|
|
3291
|
+
["intentScoringInstructions", "intent_scoring_instructions"],
|
|
3292
|
+
["history", "history"],
|
|
3293
|
+
["tier", "tier"]
|
|
3294
|
+
];
|
|
3295
|
+
const ACCOUNT_MONITOR_FIELD_KEYS = new Set(ACCOUNT_MONITOR_FIELDS.flat());
|
|
3253
3296
|
const MAX_SIGNAL_CONTEXT_CHARS = 4e3;
|
|
3254
3297
|
const MAX_CONTENT_INTELLIGENCE_COMPETITORS = 5;
|
|
3255
3298
|
const MAX_CONTENT_INTELLIGENCE_COMPETITOR_CHARS = 200;
|
|
@@ -3669,7 +3712,8 @@ class ResponsesResource {
|
|
|
3669
3712
|
}
|
|
3670
3713
|
for (const [camel, snake] of [
|
|
3671
3714
|
["includeCompanyPosts", "include_company_posts"],
|
|
3672
|
-
["includeExecPosts", "include_exec_posts"]
|
|
3715
|
+
["includeExecPosts", "include_exec_posts"],
|
|
3716
|
+
["includeMentionPosts", "include_mention_posts"]
|
|
3673
3717
|
]) {
|
|
3674
3718
|
const value = this._getParamValue(params, camel, snake);
|
|
3675
3719
|
if (value !== void 0 && typeof value !== "boolean")
|
|
@@ -3685,11 +3729,24 @@ class ResponsesResource {
|
|
|
3685
3729
|
"includeExecPosts",
|
|
3686
3730
|
"include_exec_posts"
|
|
3687
3731
|
);
|
|
3688
|
-
|
|
3732
|
+
const includeMentionPosts = this._getParamValue(
|
|
3733
|
+
params,
|
|
3734
|
+
"includeMentionPosts",
|
|
3735
|
+
"include_mention_posts"
|
|
3736
|
+
);
|
|
3737
|
+
if (competitors.length > 0 && includeCompanyPosts === false && includeExecPosts === false && includeMentionPosts === false) {
|
|
3689
3738
|
throw new ValidationError(
|
|
3690
|
-
"competitors were provided but includeCompanyPosts and
|
|
3739
|
+
"competitors were provided but includeCompanyPosts, includeExecPosts, and includeMentionPosts are all false"
|
|
3691
3740
|
);
|
|
3692
3741
|
}
|
|
3742
|
+
const maxMentionsPerTarget = this._getParamValue(
|
|
3743
|
+
params,
|
|
3744
|
+
"maxMentionsPerTarget",
|
|
3745
|
+
"max_mentions_per_target"
|
|
3746
|
+
);
|
|
3747
|
+
if (maxMentionsPerTarget !== void 0 && (!Number.isInteger(maxMentionsPerTarget) || maxMentionsPerTarget < 1 || maxMentionsPerTarget > 500)) {
|
|
3748
|
+
throw new ValidationError("maxMentionsPerTarget must be an integer between 1 and 500");
|
|
3749
|
+
}
|
|
3693
3750
|
const execTitles = this._getParamValue(params, "execTitles", "exec_titles");
|
|
3694
3751
|
if (execTitles !== void 0 && (!Array.isArray(execTitles) || execTitles.some((title) => typeof title !== "string"))) {
|
|
3695
3752
|
throw new ValidationError("execTitles must be an array of strings");
|
|
@@ -3854,6 +3911,233 @@ class ResponsesResource {
|
|
|
3854
3911
|
);
|
|
3855
3912
|
}
|
|
3856
3913
|
}
|
|
3914
|
+
/**
|
|
3915
|
+
* Validate one merged `account_monitor` request.
|
|
3916
|
+
*
|
|
3917
|
+
* The monitor's parameters are a CLOSED shape server-side, so unknown keys
|
|
3918
|
+
* are rejected here with the offending name rather than failing after the
|
|
3919
|
+
* request is sent. Everything else mirrors the backend's own rules: an
|
|
3920
|
+
* account that identity resolution can actually resolve, one period (days
|
|
3921
|
+
* OR window, never both), and explicit people/title scopes.
|
|
3922
|
+
*/
|
|
3923
|
+
_validateAccountMonitorParams(params) {
|
|
3924
|
+
const account = params.account;
|
|
3925
|
+
if (typeof account !== "string" || !account.trim()) {
|
|
3926
|
+
throw new ValidationError(
|
|
3927
|
+
"`account` is required for account_monitor \u2014 give the monitored company's domain, website, or LinkedIn company URL. A bare company name cannot be resolved."
|
|
3928
|
+
);
|
|
3929
|
+
}
|
|
3930
|
+
const depth = params.depth;
|
|
3931
|
+
if (depth !== void 0 && depth !== "light" && depth !== "deep")
|
|
3932
|
+
throw new ValidationError(`depth must be 'light' or 'deep' for account_monitor`);
|
|
3933
|
+
const days = params.days;
|
|
3934
|
+
if (days !== void 0 && (!Number.isInteger(days) || days < 1))
|
|
3935
|
+
throw new ValidationError("days must be a positive integer for account_monitor");
|
|
3936
|
+
const window = params.window;
|
|
3937
|
+
if (window !== void 0) {
|
|
3938
|
+
if (days !== void 0)
|
|
3939
|
+
throw new ValidationError("Supply days or window for account_monitor, not both");
|
|
3940
|
+
if (!this._isPlainObject(window)) {
|
|
3941
|
+
throw new ValidationError(
|
|
3942
|
+
"window must be an object with startAt and endAt timestamps for account_monitor"
|
|
3943
|
+
);
|
|
3944
|
+
}
|
|
3945
|
+
for (const [camel, snake] of [["startAt", "start_at"], ["endAt", "end_at"]]) {
|
|
3946
|
+
const value = this._getParamValue(window, camel, snake);
|
|
3947
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
3948
|
+
throw new ValidationError(
|
|
3949
|
+
`window.${camel} must be a timezone-aware ISO 8601 timestamp for account_monitor`
|
|
3950
|
+
);
|
|
3951
|
+
}
|
|
3952
|
+
}
|
|
3953
|
+
}
|
|
3954
|
+
this._validateAccountMonitorCommittee(params.committee);
|
|
3955
|
+
const competitors = params.competitors;
|
|
3956
|
+
if (competitors !== void 0) {
|
|
3957
|
+
if (!Array.isArray(competitors))
|
|
3958
|
+
throw new ValidationError("competitors must be an array for account_monitor");
|
|
3959
|
+
competitors.forEach((competitor, index) => this._validateAccountMonitorCompany(competitor, `competitors[${index}]`));
|
|
3960
|
+
}
|
|
3961
|
+
if (params.ourCompany !== void 0)
|
|
3962
|
+
this._validateAccountMonitorCompany(params.ourCompany, "ourCompany");
|
|
3963
|
+
const history = params.history;
|
|
3964
|
+
if (history !== void 0 && typeof history !== "string" && !this._isPlainObject(history)) {
|
|
3965
|
+
throw new ValidationError(
|
|
3966
|
+
"history must be an object or a string for account_monitor \u2014 the run compares against what you supply here, it never looks a previous response up."
|
|
3967
|
+
);
|
|
3968
|
+
}
|
|
3969
|
+
const tier = params.tier;
|
|
3970
|
+
if (tier !== void 0 && typeof tier !== "string")
|
|
3971
|
+
throw new ValidationError("tier must be a string for account_monitor");
|
|
3972
|
+
const instructions = params.intentScoringInstructions;
|
|
3973
|
+
if (instructions !== void 0 && typeof instructions !== "string")
|
|
3974
|
+
throw new ValidationError("intentScoringInstructions must be a string");
|
|
3975
|
+
this._validateAccountMonitorSignalDefinitions(params.signalDefinitions);
|
|
3976
|
+
}
|
|
3977
|
+
/** People are LinkedIn profile URLs; no employee discovery is ever implied. */
|
|
3978
|
+
_validateAccountMonitorProfiles(value, field) {
|
|
3979
|
+
if (!Array.isArray(value) || value.some((url) => typeof url !== "string" || !url.trim())) {
|
|
3980
|
+
throw new ValidationError(
|
|
3981
|
+
`${field} must be an array of LinkedIn profile URLs for account_monitor`
|
|
3982
|
+
);
|
|
3983
|
+
}
|
|
3984
|
+
}
|
|
3985
|
+
/**
|
|
3986
|
+
* The committee accepts the full `{ people, groups }` object, a bare URL
|
|
3987
|
+
* array, or a legacy label-to-URLs map. A map that carries `people` or
|
|
3988
|
+
* `groups` is read as the full object, exactly as the backend reads it.
|
|
3989
|
+
*/
|
|
3990
|
+
_validateAccountMonitorCommittee(committee) {
|
|
3991
|
+
if (committee === void 0)
|
|
3992
|
+
return;
|
|
3993
|
+
if (Array.isArray(committee)) {
|
|
3994
|
+
this._validateAccountMonitorProfiles(committee, "committee");
|
|
3995
|
+
return;
|
|
3996
|
+
}
|
|
3997
|
+
if (!this._isPlainObject(committee)) {
|
|
3998
|
+
throw new ValidationError(
|
|
3999
|
+
"committee must be an object with people and/or groups, an array of LinkedIn profile URLs, or a map of group name to URLs"
|
|
4000
|
+
);
|
|
4001
|
+
}
|
|
4002
|
+
const hasPeople = Object.prototype.hasOwnProperty.call(committee, "people");
|
|
4003
|
+
const hasGroups = Object.prototype.hasOwnProperty.call(committee, "groups");
|
|
4004
|
+
if (!hasPeople && !hasGroups) {
|
|
4005
|
+
this._validateAccountMonitorGroups(committee, "committee");
|
|
4006
|
+
return;
|
|
4007
|
+
}
|
|
4008
|
+
if (hasPeople)
|
|
4009
|
+
this._validateAccountMonitorProfiles(committee.people, "committee.people");
|
|
4010
|
+
if (hasGroups) {
|
|
4011
|
+
if (!this._isPlainObject(committee.groups))
|
|
4012
|
+
throw new ValidationError("committee.groups must map each group name to LinkedIn profile URLs");
|
|
4013
|
+
this._validateAccountMonitorGroups(committee.groups, "committee.groups");
|
|
4014
|
+
}
|
|
4015
|
+
}
|
|
4016
|
+
_validateAccountMonitorGroups(groups, field) {
|
|
4017
|
+
for (const [label, people] of Object.entries(groups)) {
|
|
4018
|
+
if (!label.trim())
|
|
4019
|
+
throw new ValidationError(`${field} group names must not be blank`);
|
|
4020
|
+
this._validateAccountMonitorProfiles(people, `${field}['${label}']`);
|
|
4021
|
+
}
|
|
4022
|
+
}
|
|
4023
|
+
/**
|
|
4024
|
+
* A company string means the company page only. People and titles are the
|
|
4025
|
+
* only ways to reach employees — neither is implied by the company itself.
|
|
4026
|
+
*/
|
|
4027
|
+
_validateAccountMonitorCompany(value, field) {
|
|
4028
|
+
if (typeof value === "string") {
|
|
4029
|
+
if (!value.trim())
|
|
4030
|
+
throw new ValidationError(`${field} must be a non-empty company domain, URL, or name`);
|
|
4031
|
+
return;
|
|
4032
|
+
}
|
|
4033
|
+
if (!this._isPlainObject(value)) {
|
|
4034
|
+
throw new ValidationError(
|
|
4035
|
+
`${field} must be a company string, or an object with company and an explicit people or employeeTitles scope`
|
|
4036
|
+
);
|
|
4037
|
+
}
|
|
4038
|
+
for (const key of Object.keys(value)) {
|
|
4039
|
+
if (!["company", "people", "employeeTitles", "employee_titles"].includes(key)) {
|
|
4040
|
+
throw new ValidationError(
|
|
4041
|
+
`Unknown ${field} field '${key}'. A company accepts only company, people, and employeeTitles.`
|
|
4042
|
+
);
|
|
4043
|
+
}
|
|
4044
|
+
}
|
|
4045
|
+
const company = this._getParamValue(value, "company", "company");
|
|
4046
|
+
if (typeof company !== "string" || !company.trim())
|
|
4047
|
+
throw new ValidationError(`${field}.company is required and must be a non-empty string`);
|
|
4048
|
+
const people = this._getParamValue(value, "people", "people");
|
|
4049
|
+
if (people !== void 0)
|
|
4050
|
+
this._validateAccountMonitorProfiles(people, `${field}.people`);
|
|
4051
|
+
const employeeTitles = this._getParamValue(value, "employeeTitles", "employee_titles");
|
|
4052
|
+
if (employeeTitles !== void 0 && employeeTitles !== null) {
|
|
4053
|
+
if (!Array.isArray(employeeTitles) || employeeTitles.length === 0 || employeeTitles.some((title) => typeof title !== "string" || !title.trim())) {
|
|
4054
|
+
throw new ValidationError(
|
|
4055
|
+
`${field}.employeeTitles must contain at least one non-blank current-title filter. Omit it to skip employee discovery entirely.`
|
|
4056
|
+
);
|
|
4057
|
+
}
|
|
4058
|
+
}
|
|
4059
|
+
}
|
|
4060
|
+
_validateAccountMonitorSignalDefinitions(value) {
|
|
4061
|
+
if (value === void 0 || value === null)
|
|
4062
|
+
return;
|
|
4063
|
+
if (!Array.isArray(value))
|
|
4064
|
+
throw new ValidationError("signalDefinitions must be an array");
|
|
4065
|
+
const seen = /* @__PURE__ */ new Set();
|
|
4066
|
+
for (const entry of value) {
|
|
4067
|
+
if (!this._isPlainObject(entry)) {
|
|
4068
|
+
throw new ValidationError(
|
|
4069
|
+
`Each account_monitor signalDefinitions entry must be an object like { name: 'company_hiring' }`
|
|
4070
|
+
);
|
|
4071
|
+
}
|
|
4072
|
+
const rawName = this._getParamValue(entry, "name", "name");
|
|
4073
|
+
const name = typeof rawName === "string" ? rawName.trim().toLowerCase() : rawName;
|
|
4074
|
+
if (typeof name !== "string" || !name)
|
|
4075
|
+
throw new ValidationError("Each signalDefinitions entry requires a signal name");
|
|
4076
|
+
if (RETIRED_ACCOUNT_MONITOR_SIGNALS.includes(name)) {
|
|
4077
|
+
throw new ValidationError(
|
|
4078
|
+
`The '${name}' monitor check was retired and can no longer be requested. Choose from: ${ACCOUNT_MONITOR_SIGNALS.join(", ")}.`
|
|
4079
|
+
);
|
|
4080
|
+
}
|
|
4081
|
+
if (!ACCOUNT_MONITOR_SIGNALS.includes(name)) {
|
|
4082
|
+
throw new ValidationError(
|
|
4083
|
+
`'${name}' is not an account_monitor signal. Choose from: ${ACCOUNT_MONITOR_SIGNALS.join(", ")}.`
|
|
4084
|
+
);
|
|
4085
|
+
}
|
|
4086
|
+
if (seen.has(name)) {
|
|
4087
|
+
throw new ValidationError(
|
|
4088
|
+
`The '${name}' signal appears more than once in signalDefinitions \u2014 send each signal once.`
|
|
4089
|
+
);
|
|
4090
|
+
}
|
|
4091
|
+
seen.add(name);
|
|
4092
|
+
for (const key of Object.keys(entry)) {
|
|
4093
|
+
if (key !== "name") {
|
|
4094
|
+
throw new ValidationError(
|
|
4095
|
+
`Unknown signalDefinitions field '${key}'. An account_monitor entry accepts only name.`
|
|
4096
|
+
);
|
|
4097
|
+
}
|
|
4098
|
+
}
|
|
4099
|
+
}
|
|
4100
|
+
}
|
|
4101
|
+
/**
|
|
4102
|
+
* Merge the monitor request the way the backend does: flat `options` fields
|
|
4103
|
+
* first, then the nested params copy, then the dedicated field. A null never
|
|
4104
|
+
* overwrites a value that an earlier source already supplied.
|
|
4105
|
+
*
|
|
4106
|
+
* Only known monitor fields are read out of flat `options`, because general
|
|
4107
|
+
* platform options live there too. The dedicated and nested parameter
|
|
4108
|
+
* objects are strict, so their unknown fields are reported instead.
|
|
4109
|
+
*/
|
|
4110
|
+
_accountMonitorParams(request) {
|
|
4111
|
+
const requestOptions = this._isPlainObject(request.options) ? request.options : {};
|
|
4112
|
+
const nested = this._getParamValue(
|
|
4113
|
+
requestOptions,
|
|
4114
|
+
"specializedAgentParams",
|
|
4115
|
+
"specialized_agent_params"
|
|
4116
|
+
);
|
|
4117
|
+
const strict = [];
|
|
4118
|
+
if (this._isPlainObject(nested))
|
|
4119
|
+
strict.push(nested);
|
|
4120
|
+
if (this._isPlainObject(request.specializedAgentParams))
|
|
4121
|
+
strict.push(request.specializedAgentParams);
|
|
4122
|
+
for (const source of strict) {
|
|
4123
|
+
for (const key of Object.keys(source)) {
|
|
4124
|
+
if (!ACCOUNT_MONITOR_FIELD_KEYS.has(key)) {
|
|
4125
|
+
throw new ValidationError(
|
|
4126
|
+
`Unknown account_monitor parameter '${key}'. This agent accepts only: ${ACCOUNT_MONITOR_FIELDS.map(([camel]) => camel).join(", ")}.`
|
|
4127
|
+
);
|
|
4128
|
+
}
|
|
4129
|
+
}
|
|
4130
|
+
}
|
|
4131
|
+
const merged = {};
|
|
4132
|
+
for (const source of [requestOptions, ...strict]) {
|
|
4133
|
+
for (const [camel, snake] of ACCOUNT_MONITOR_FIELDS) {
|
|
4134
|
+
const value = this._getParamValue(source, camel, snake);
|
|
4135
|
+
if (value !== void 0 && value !== null)
|
|
4136
|
+
merged[camel] = value;
|
|
4137
|
+
}
|
|
4138
|
+
}
|
|
4139
|
+
return merged;
|
|
4140
|
+
}
|
|
3857
4141
|
/**
|
|
3858
4142
|
* Every place a caller may put specialized-agent params: the dedicated field
|
|
3859
4143
|
* and the legacy nested copy inside `options`. Both are validated so a nested
|
|
@@ -4094,6 +4378,10 @@ class ResponsesResource {
|
|
|
4094
4378
|
for (const file of request.files)
|
|
4095
4379
|
this._validateFileReference(file.uri);
|
|
4096
4380
|
}
|
|
4381
|
+
if (request.specializedAgent === "account_monitor") {
|
|
4382
|
+
this._validateAccountMonitorParams(this._accountMonitorParams(request));
|
|
4383
|
+
return this.http.post("/responses", request);
|
|
4384
|
+
}
|
|
4097
4385
|
this._validateSalesNavigatorRequest(request);
|
|
4098
4386
|
for (const params of this._specializedParamSources(request))
|
|
4099
4387
|
this._validateSignalParams(params);
|
|
@@ -4380,32 +4668,33 @@ class ResponsesResource {
|
|
|
4380
4668
|
* - criteria: Generated/reused criteria definitions and classification
|
|
4381
4669
|
*/
|
|
4382
4670
|
async peopleScoring(query, candidateProfiles, options) {
|
|
4671
|
+
const params = {
|
|
4672
|
+
candidateProfiles,
|
|
4673
|
+
deepValidationUseRelevanceReranker: options?.deepValidationUseRelevanceReranker ?? true,
|
|
4674
|
+
deepValidationBackfillBelowCriteria: options?.deepValidationBackfillBelowCriteria ?? true
|
|
4675
|
+
};
|
|
4383
4676
|
const request = {
|
|
4384
4677
|
messages: [{ role: "user", content: query }],
|
|
4385
4678
|
specializedAgent: "people_scoring",
|
|
4386
|
-
specializedAgentParams:
|
|
4387
|
-
candidateProfiles,
|
|
4388
|
-
deepValidationUseRelevanceReranker: options?.deepValidationUseRelevanceReranker ?? true,
|
|
4389
|
-
deepValidationBackfillBelowCriteria: options?.deepValidationBackfillBelowCriteria ?? true
|
|
4390
|
-
}
|
|
4679
|
+
specializedAgentParams: params
|
|
4391
4680
|
};
|
|
4392
4681
|
if (options) {
|
|
4393
4682
|
if (options.reuseCriteriaFrom)
|
|
4394
|
-
|
|
4683
|
+
params.reuseCriteriaFrom = options.reuseCriteriaFrom;
|
|
4395
4684
|
if (options.criteriaDefinitions)
|
|
4396
|
-
|
|
4685
|
+
params.criteriaDefinitions = options.criteriaDefinitions;
|
|
4397
4686
|
if (options.criteriaClassification)
|
|
4398
|
-
|
|
4687
|
+
params.criteriaClassification = options.criteriaClassification;
|
|
4399
4688
|
if (options.runSingleCriterion)
|
|
4400
|
-
|
|
4689
|
+
params.runSingleCriterion = options.runSingleCriterion;
|
|
4401
4690
|
if (options.addCriterion)
|
|
4402
|
-
|
|
4691
|
+
params.addCriterion = options.addCriterion;
|
|
4403
4692
|
if (options.addAndRunCriterion)
|
|
4404
|
-
|
|
4693
|
+
params.addAndRunCriterion = options.addAndRunCriterion;
|
|
4405
4694
|
if (options.deepSearchCriteriaModel)
|
|
4406
|
-
|
|
4695
|
+
params.deepSearchCriteriaModel = options.deepSearchCriteriaModel;
|
|
4407
4696
|
if (options.intentScoringInstructions !== void 0)
|
|
4408
|
-
|
|
4697
|
+
params.intentScoringInstructions = options.intentScoringInstructions;
|
|
4409
4698
|
}
|
|
4410
4699
|
return this.create(request);
|
|
4411
4700
|
}
|
|
@@ -4455,6 +4744,10 @@ class ResponsesResource {
|
|
|
4455
4744
|
params.includeCompanyPosts = options.includeCompanyPosts;
|
|
4456
4745
|
if (options.includeExecPosts !== void 0)
|
|
4457
4746
|
params.includeExecPosts = options.includeExecPosts;
|
|
4747
|
+
if (options.includeMentionPosts !== void 0)
|
|
4748
|
+
params.includeMentionPosts = options.includeMentionPosts;
|
|
4749
|
+
if (options.maxMentionsPerTarget !== void 0)
|
|
4750
|
+
params.maxMentionsPerTarget = options.maxMentionsPerTarget;
|
|
4458
4751
|
if (options.execTitles !== void 0)
|
|
4459
4752
|
params.execTitles = options.execTitles;
|
|
4460
4753
|
if (options.maxExecsPerTarget !== void 0)
|
|
@@ -4798,6 +5091,75 @@ class ResponsesResource {
|
|
|
4798
5091
|
specializedAgentParams: params
|
|
4799
5092
|
});
|
|
4800
5093
|
}
|
|
5094
|
+
/**
|
|
5095
|
+
* Report on ONE account for ONE fixed period.
|
|
5096
|
+
*
|
|
5097
|
+
* This runs once, now: there is no backend schedule and no saved cadence, so
|
|
5098
|
+
* call it again when you want the next report. The period defaults to the
|
|
5099
|
+
* last seven days — pass `days` for a different look-back, or `window` for an
|
|
5100
|
+
* exact interval.
|
|
5101
|
+
*
|
|
5102
|
+
* What gets collected is decided ONLY by `signalDefinitions`, or by the
|
|
5103
|
+
* `depth` preset that stands in for it. Nothing is implied: a competitor
|
|
5104
|
+
* string means that company's page, not its employees, and committee work
|
|
5105
|
+
* needs `committee` people plus `depth: 'deep'` or an explicit signal.
|
|
5106
|
+
*
|
|
5107
|
+
* Coverage is always partial and the report says so — a missing record never
|
|
5108
|
+
* proves that nothing happened.
|
|
5109
|
+
*
|
|
5110
|
+
* @param query - What to watch for; it steers the report, not the collection.
|
|
5111
|
+
* Pass an empty string to run the monitor with no steering prompt — the
|
|
5112
|
+
* account, the period and `intentScoringInstructions` are what decide the
|
|
5113
|
+
* report.
|
|
5114
|
+
* @param options - The account, its period, and the explicit scopes to track.
|
|
5115
|
+
* @returns Response; poll with `get()`, read `outputText` for the report and
|
|
5116
|
+
* `structuredResponse` as {@link AccountMonitorOutput}.
|
|
5117
|
+
*
|
|
5118
|
+
* @example
|
|
5119
|
+
* ```ts
|
|
5120
|
+
* await client.responses.accountMonitor(
|
|
5121
|
+
* 'Anything suggesting they are re-evaluating their data warehouse',
|
|
5122
|
+
* {
|
|
5123
|
+
* account: 'acme.com',
|
|
5124
|
+
* days: 14,
|
|
5125
|
+
* depth: 'deep',
|
|
5126
|
+
* committee: { groups: { 'data platform': ['https://www.linkedin.com/in/some-vp'] } },
|
|
5127
|
+
* competitors: [{ company: 'rival.com', employeeTitles: ['Account Executive'] }],
|
|
5128
|
+
* },
|
|
5129
|
+
* )
|
|
5130
|
+
* ```
|
|
5131
|
+
*/
|
|
5132
|
+
async accountMonitor(query, options) {
|
|
5133
|
+
if (typeof query !== "string")
|
|
5134
|
+
throw new ValidationError("accountMonitor query must be a string");
|
|
5135
|
+
const params = { account: options.account };
|
|
5136
|
+
if (options.depth !== void 0)
|
|
5137
|
+
params.depth = options.depth;
|
|
5138
|
+
if (options.committee !== void 0)
|
|
5139
|
+
params.committee = options.committee;
|
|
5140
|
+
if (options.competitors !== void 0)
|
|
5141
|
+
params.competitors = options.competitors;
|
|
5142
|
+
if (options.ourCompany !== void 0)
|
|
5143
|
+
params.ourCompany = options.ourCompany;
|
|
5144
|
+
if (options.days !== void 0)
|
|
5145
|
+
params.days = options.days;
|
|
5146
|
+
if (options.window !== void 0)
|
|
5147
|
+
params.window = options.window;
|
|
5148
|
+
if (options.signalDefinitions !== void 0)
|
|
5149
|
+
params.signalDefinitions = options.signalDefinitions;
|
|
5150
|
+
if (options.intentScoringInstructions !== void 0)
|
|
5151
|
+
params.intentScoringInstructions = options.intentScoringInstructions;
|
|
5152
|
+
if (options.history !== void 0)
|
|
5153
|
+
params.history = options.history;
|
|
5154
|
+
if (options.tier !== void 0)
|
|
5155
|
+
params.tier = options.tier;
|
|
5156
|
+
const prompt = query.trim() || `Account monitor report for ${options.account}`;
|
|
5157
|
+
return this.create({
|
|
5158
|
+
messages: [{ role: "user", content: prompt }],
|
|
5159
|
+
specializedAgent: "account_monitor",
|
|
5160
|
+
specializedAgentParams: params
|
|
5161
|
+
});
|
|
5162
|
+
}
|
|
4801
5163
|
}
|
|
4802
5164
|
|
|
4803
5165
|
class SequencesResource {
|