@indexnetwork/protocol 66.0.0-rc.630.1 → 66.0.0-rc.635.1
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.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/internal/networks/network.pulse-summarizer.d.ts +41 -0
- package/dist/internal/networks/network.pulse-summarizer.js +113 -0
- package/dist/internal/opportunities/opportunity.presentation.d.ts +1 -1
- package/dist/internal/opportunities/opportunity.presentation.js +11 -12
- package/dist/internal/shared/agent/model.config.d.ts +6 -1
- package/dist/internal/shared/agent/model.config.js +1 -0
- package/dist/internal/shared/agent/model.resolver.d.ts +2 -1
- package/dist/internal/shared/agent/model.resolver.js +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ export { decideNegotiationOpening, decideNegotiationTurn, observeNegotiation, ne
|
|
|
27
27
|
export type { NegotiationAction, NegotiationOutcome, NegotiationTurn, NegotiationState, NegotiationDecision, NegotiationRejection, NegotiationOpening, NegotiationOpeningDecision } from './protocol/negotiation.rules.js';
|
|
28
28
|
export type { NegotiationDatabase } from './platform/database/negotiation.js';
|
|
29
29
|
export { Networks } from "./capabilities/networks.js";
|
|
30
|
+
export { NetworkPulseSummarizer } from "./internal/networks/network.pulse-summarizer.js";
|
|
31
|
+
export type { NetworkPulseSummary, NetworkPulseSummaryInput } from "./internal/networks/network.pulse-summarizer.js";
|
|
30
32
|
export type { NetworksDeps } from "./capabilities/networks.js";
|
|
31
33
|
export { Intents } from "./capabilities/intents.js";
|
|
32
34
|
export type { PrepareAnswer, PrepareInput, PrepareResult, RecoveryField, RecoveryFieldKind, RecoveryFieldOption, IntentsDeps, IntentSemanticMetadata, PreparedIntent, } from "./capabilities/intents.js";
|
package/dist/index.js
CHANGED
|
@@ -31,6 +31,7 @@ export { decideNegotiationOpening, decideNegotiationTurn, observeNegotiation, ne
|
|
|
31
31
|
// The whole capability behind one class: the community lifecycle graph, the
|
|
32
32
|
// membership graph, and signal assignment.
|
|
33
33
|
export { Networks } from "./capabilities/networks.js";
|
|
34
|
+
export { NetworkPulseSummarizer } from "./internal/networks/network.pulse-summarizer.js";
|
|
34
35
|
// ─── Intents ──────────────────────────────────────────────────────────────────
|
|
35
36
|
// The whole capability behind one class: lifecycle graph, verification, and
|
|
36
37
|
// payload preparation.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const NetworkPulseSummaryOutputSchema: z.ZodObject<{
|
|
3
|
+
summary: z.ZodString;
|
|
4
|
+
negotiations: z.ZodString;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
summary: string;
|
|
7
|
+
negotiations: string;
|
|
8
|
+
}, {
|
|
9
|
+
summary: string;
|
|
10
|
+
negotiations: string;
|
|
11
|
+
}>;
|
|
12
|
+
export type NetworkPulseSummaryOutput = z.infer<typeof NetworkPulseSummaryOutputSchema>;
|
|
13
|
+
export interface NetworkPulseSummaryInput {
|
|
14
|
+
networkTitle: string;
|
|
15
|
+
/** Recent open signals in the network, newest first, as members wrote them. */
|
|
16
|
+
signals: string[];
|
|
17
|
+
/** Recent negotiations: the two signals each pair of agents is weighing. */
|
|
18
|
+
negotiations?: Array<{
|
|
19
|
+
a: string;
|
|
20
|
+
b: string;
|
|
21
|
+
}>;
|
|
22
|
+
}
|
|
23
|
+
/** What the invite page shows of the room; either part may be absent. */
|
|
24
|
+
export interface NetworkPulseSummary {
|
|
25
|
+
summary: string | null;
|
|
26
|
+
negotiations: string | null;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Writes the anonymous "what people are looking for" overview for a network's
|
|
30
|
+
* public invite page. Follows the shared agent pattern: structured output,
|
|
31
|
+
* `invokeWithAbortSignal`, null on error.
|
|
32
|
+
*/
|
|
33
|
+
export declare class NetworkPulseSummarizer {
|
|
34
|
+
private model;
|
|
35
|
+
constructor();
|
|
36
|
+
/**
|
|
37
|
+
* @param input - The network's title, its recent open signals and negotiating pairs.
|
|
38
|
+
* @returns Both texts (each null when there is nothing suitable), or null when the call fails.
|
|
39
|
+
*/
|
|
40
|
+
invoke(input: NetworkPulseSummaryInput): Promise<NetworkPulseSummary | null>;
|
|
41
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { HumanMessage, SystemMessage } from "@langchain/core/messages";
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { log } from "../shared/observability/log.js";
|
|
13
|
+
import { Timed } from "../shared/observability/performance.js";
|
|
14
|
+
import { createStructuredModel } from "../shared/agent/model.config.js";
|
|
15
|
+
import { invokeWithAbortSignal } from "../shared/agent/model-signal.js";
|
|
16
|
+
// ─── Response schema ───────────────────────────────────────────────────────────
|
|
17
|
+
export const NetworkPulseSummaryOutputSchema = z.object({
|
|
18
|
+
summary: z
|
|
19
|
+
.string()
|
|
20
|
+
.describe("Two to four sentences, at most 70 words, on what members are after. Empty string when there is not enough suitable material."),
|
|
21
|
+
negotiations: z
|
|
22
|
+
.string()
|
|
23
|
+
.describe("One or two sentences, at most 45 words, on what the agents are negotiating about right now. Empty string when no pairs are given or none are suitable."),
|
|
24
|
+
});
|
|
25
|
+
// ─── Logger ───────────────────────────────────────────────────────────────────
|
|
26
|
+
const logger = log.lib.from("NetworkPulseSummarizer");
|
|
27
|
+
// ─── System prompt ────────────────────────────────────────────────────────────
|
|
28
|
+
const systemPrompt = `
|
|
29
|
+
You write the "what people are looking for" blurb on a network's public invite page.
|
|
30
|
+
Anyone holding the invite link reads it, including people who are not members.
|
|
31
|
+
|
|
32
|
+
TASK:
|
|
33
|
+
Read the members' open signals and write a short, clear overview, warm in tone, of what is
|
|
34
|
+
going on inside, so a visitor gets a feel for the room. Group signals into themes, e.g.
|
|
35
|
+
"A few people are looking for cofounders and early hires, others want to meet investors who
|
|
36
|
+
get crypto and AI, and at least one person just wants coffee before the conference."
|
|
37
|
+
|
|
38
|
+
PRIVACY (strict):
|
|
39
|
+
- Describe themes in aggregate. Never quote a signal or reuse its distinctive wording.
|
|
40
|
+
- No names of people, companies, products, projects, schools, or events.
|
|
41
|
+
- No places more specific than a broad region, no dates, numbers, amounts, links, or handles.
|
|
42
|
+
- Use loose quantities ("a few", "some", "several", "others"). Never "one person" for
|
|
43
|
+
anything specific enough to point at someone.
|
|
44
|
+
- Leave out entirely anything sexual or romantic, medical, legal, financial distress,
|
|
45
|
+
religious, political, illegal, hateful, or otherwise sensitive or crude. Do not hint at it.
|
|
46
|
+
|
|
47
|
+
STYLE:
|
|
48
|
+
- Two to four sentences, at most 70 words. Plain, friendly English.
|
|
49
|
+
- Mostly matter-of-fact: say clearly what kinds of people and asks are in the room. A light
|
|
50
|
+
touch of warmth is welcome in one phrase (the range of the room, an unexpected neighbour of
|
|
51
|
+
asks), but no punchlines and nothing at anyone's expense.
|
|
52
|
+
- No emoji, no exclamation marks, no em dashes, no headings or lists.
|
|
53
|
+
- Do not mention signals, agents, Index, or the network's name. Start with the content.
|
|
54
|
+
|
|
55
|
+
If fewer than three signals are suitable after the rules above, return an empty summary.
|
|
56
|
+
|
|
57
|
+
NEGOTIATIONS:
|
|
58
|
+
You may also get pairs of signals that two members' agents are negotiating over right now.
|
|
59
|
+
In "negotiations", say in one or two sentences, at most 45 words, what the agents are talking
|
|
60
|
+
about at a very high level: the kind of deal, never its details ("a few are working out
|
|
61
|
+
cofounder intros, others are trading notes on a speaking slot"). Same privacy rules, same
|
|
62
|
+
tone, at most one light touch of humor. Do not invent names for the agents. If no pairs are
|
|
63
|
+
given or none are suitable, return an empty string.
|
|
64
|
+
`;
|
|
65
|
+
// ─── Agent class ──────────────────────────────────────────────────────────────
|
|
66
|
+
/**
|
|
67
|
+
* Writes the anonymous "what people are looking for" overview for a network's
|
|
68
|
+
* public invite page. Follows the shared agent pattern: structured output,
|
|
69
|
+
* `invokeWithAbortSignal`, null on error.
|
|
70
|
+
*/
|
|
71
|
+
export class NetworkPulseSummarizer {
|
|
72
|
+
constructor() {
|
|
73
|
+
this.model = createStructuredModel("networkPulseSummarizer", NetworkPulseSummaryOutputSchema, {
|
|
74
|
+
name: "network_pulse_summary",
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* @param input - The network's title, its recent open signals and negotiating pairs.
|
|
79
|
+
* @returns Both texts (each null when there is nothing suitable), or null when the call fails.
|
|
80
|
+
*/
|
|
81
|
+
async invoke(input) {
|
|
82
|
+
const clean = (text) => text.replace(/\s+/g, " ").trim().slice(0, 400);
|
|
83
|
+
const signals = input.signals.map(clean).filter(Boolean);
|
|
84
|
+
const pairs = (input.negotiations ?? []).map((p) => ({ a: clean(p.a), b: clean(p.b) })).filter((p) => p.a && p.b);
|
|
85
|
+
if (signals.length < 3 && pairs.length < 2)
|
|
86
|
+
return { summary: null, negotiations: null };
|
|
87
|
+
const prompt = [
|
|
88
|
+
`## Network\n${input.networkTitle}`,
|
|
89
|
+
`## Open signals\n${signals.map((s) => `- ${s}`).join("\n") || "(none)"}`,
|
|
90
|
+
`## Negotiating pairs\n${pairs.map((p) => `- ${p.a} <-> ${p.b}`).join("\n") || "(none)"}`,
|
|
91
|
+
].join("\n\n");
|
|
92
|
+
try {
|
|
93
|
+
const result = await invokeWithAbortSignal(this.model, [new SystemMessage(systemPrompt), new HumanMessage(prompt)]);
|
|
94
|
+
const parsed = NetworkPulseSummaryOutputSchema.safeParse(result);
|
|
95
|
+
if (!parsed.success) {
|
|
96
|
+
logger.error("Schema validation failed", { error: parsed.error });
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const tidy = (text) => text.replace(/\s+/g, " ").trim() || null;
|
|
100
|
+
return { summary: tidy(parsed.data.summary), negotiations: tidy(parsed.data.negotiations) };
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
logger.error("Error during execution", { error });
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
__decorate([
|
|
109
|
+
Timed(),
|
|
110
|
+
__metadata("design:type", Function),
|
|
111
|
+
__metadata("design:paramtypes", [Object]),
|
|
112
|
+
__metadata("design:returntype", Promise)
|
|
113
|
+
], NetworkPulseSummarizer.prototype, "invoke", null);
|
|
@@ -19,7 +19,7 @@ export interface UserInfo {
|
|
|
19
19
|
avatar: string | null;
|
|
20
20
|
}
|
|
21
21
|
/** Cache namespace for opportunity presentation copy. Bump to invalidate copy safety changes. */
|
|
22
|
-
export declare const OPPORTUNITY_PRESENTATION_CACHE_VERSION = "
|
|
22
|
+
export declare const OPPORTUNITY_PRESENTATION_CACHE_VERSION = "v3";
|
|
23
23
|
export declare function buildOpportunityCardCacheKey(opportunityId: string, viewerId: string, focusedViewerIntentId?: string): string;
|
|
24
24
|
export declare function buildApiChatCardPresentationCacheKey(opportunityId: string, viewerId: string): string;
|
|
25
25
|
/**
|
|
@@ -26,16 +26,18 @@ import { createStructuredModel } from "../shared/agent/model.config.js";
|
|
|
26
26
|
// ── 1. Presentation cache keys ──
|
|
27
27
|
// ──────────────────────────────────────────────────────────────────────
|
|
28
28
|
/** Cache namespace for opportunity presentation copy. Bump to invalidate copy safety changes. */
|
|
29
|
-
export const OPPORTUNITY_PRESENTATION_CACHE_VERSION = "
|
|
29
|
+
export const OPPORTUNITY_PRESENTATION_CACHE_VERSION = "v3";
|
|
30
30
|
export function buildOpportunityCardCacheKey(opportunityId, viewerId, focusedViewerIntentId) {
|
|
31
31
|
const scope = focusedViewerIntentId ? `:intent:${focusedViewerIntentId}` : "";
|
|
32
|
-
return `card:${opportunityId}:${viewerId}${scope}`;
|
|
32
|
+
return `card:${OPPORTUNITY_PRESENTATION_CACHE_VERSION}:${opportunityId}:${viewerId}${scope}`;
|
|
33
33
|
}
|
|
34
34
|
export function buildApiChatCardPresentationCacheKey(opportunityId, viewerId) {
|
|
35
35
|
return `chat:${OPPORTUNITY_PRESENTATION_CACHE_VERSION}:card:${opportunityId}:${viewerId}`;
|
|
36
36
|
}
|
|
37
37
|
const LLM_TIMEOUT_MS = 20000;
|
|
38
38
|
const GREETING_DESCRIPTION = "A 2-4 sentence first-person message the viewer could send to the counterpart, in the viewer's voice, referencing what they have in common. Plain prose only — no markdown, no greeting prefix like 'Hey {Name},'. Example body: 'Saw we're both working on regenerative coordination tooling — your post on consent flows resonated. Would love to compare notes if you have time this week.'";
|
|
39
|
+
/** Shown under the person's name on cards and in the morning email, so it carries context, not a button label. */
|
|
40
|
+
const SUGGESTED_ACTION_DESCRIPTION = "One short line (max ~70 chars) on what this connection is about for the viewer: the concrete topic, need, or plan the two share, e.g. 'Coffee in SF on agent verification workflows' or 'Beta-testing your journaling app with her writers circle'. Never open with an instruction or UI verb such as 'Accept', 'Send a message', 'Schedule', 'Connect', 'Reach out', 'Review', or 'Check'; the card's buttons already carry the action.";
|
|
39
41
|
// ──────────────────────────────────────────────────────────────
|
|
40
42
|
// SCHEMA & TYPES
|
|
41
43
|
// ──────────────────────────────────────────────────────────────
|
|
@@ -46,7 +48,7 @@ const PresentationSchema = z.object({
|
|
|
46
48
|
personalizedSummary: z
|
|
47
49
|
.string()
|
|
48
50
|
.describe("2-3 sentence explanation using 'you' language, explaining why this opportunity is specifically valuable for the viewer based on their intents and profile"),
|
|
49
|
-
suggestedAction: z.string().describe(
|
|
51
|
+
suggestedAction: z.string().describe(SUGGESTED_ACTION_DESCRIPTION),
|
|
50
52
|
greeting: z.string().max(500).describe(GREETING_DESCRIPTION),
|
|
51
53
|
});
|
|
52
54
|
const responseFormat = z.object({
|
|
@@ -60,9 +62,7 @@ export const CardLLMSchema = z.object({
|
|
|
60
62
|
personalizedSummary: z
|
|
61
63
|
.string()
|
|
62
64
|
.describe("2-3 sentence explanation in 'you' language for the main card body"),
|
|
63
|
-
suggestedAction: z
|
|
64
|
-
.string()
|
|
65
|
-
.describe("Brief suggested next step (e.g. CTA line)"),
|
|
65
|
+
suggestedAction: z.string().describe(SUGGESTED_ACTION_DESCRIPTION),
|
|
66
66
|
narratorRemark: z
|
|
67
67
|
.string()
|
|
68
68
|
.max(80)
|
|
@@ -82,7 +82,9 @@ const homeCardResponseFormat = z.object({
|
|
|
82
82
|
const systemPrompt = `
|
|
83
83
|
You are an expert at presenting connection opportunities to users in a way that feels personal and compelling.
|
|
84
84
|
|
|
85
|
-
Your goal: Given raw context about the viewer (their profile, intents), the other person(s), and why the system matched them, produce a short headline, a personalized summary, and a
|
|
85
|
+
Your goal: Given raw context about the viewer (their profile, intents), the other person(s), and why the system matched them, produce a short headline, a personalized summary, and a suggestedAction.
|
|
86
|
+
|
|
87
|
+
suggestedAction: ${SUGGESTED_ACTION_DESCRIPTION}
|
|
86
88
|
|
|
87
89
|
Rules:
|
|
88
90
|
1. Address the VIEWER directly using "you" and "your". This is for them.
|
|
@@ -104,7 +106,6 @@ Rules:
|
|
|
104
106
|
- If this is an introduction: mention who introduced them and frame it as a personal recommendation.
|
|
105
107
|
- Headline: one short line that hooks (e.g., "[Name] thinks you should meet [Other]" or "A React expert who needs your design skills").
|
|
106
108
|
- Personalized summary: 2-3 sentences. Why is this opportunity for *them*? If introduced, lead with the introduction.
|
|
107
|
-
- Suggested action: encourage action ("Send a message to start the conversation" or "Share this intro").
|
|
108
109
|
|
|
109
110
|
**If viewer is "agent":**
|
|
110
111
|
- They are seeing this because someone already reached out.
|
|
@@ -112,14 +113,12 @@ Rules:
|
|
|
112
113
|
- Reference their skills/expertise that make them a match.
|
|
113
114
|
- Headline: what the other person needs that they can provide.
|
|
114
115
|
- Personalized summary: 2-3 sentences. Why someone reached out to them.
|
|
115
|
-
- Suggested action: "Someone is interested in connecting — check their message" or "Review and respond".
|
|
116
116
|
|
|
117
117
|
**If viewer is "peer":**
|
|
118
118
|
- Mutual opportunity. Reference shared or complementary interests.
|
|
119
119
|
- If this is an introduction: mention who connected them.
|
|
120
120
|
- Headline: the mutual connection angle.
|
|
121
121
|
- Personalized summary: 2-3 sentences. Why this is mutually valuable.
|
|
122
|
-
- Suggested action: "Send an intro to connect" or "Start a conversation".
|
|
123
122
|
`;
|
|
124
123
|
const homeCardSystemPrompt = `
|
|
125
124
|
You are an expert at presenting connection opportunities for an opportunity card.
|
|
@@ -127,7 +126,7 @@ You are an expert at presenting connection opportunities for an opportunity card
|
|
|
127
126
|
Given context about the viewer, the other person, and why they were matched, produce:
|
|
128
127
|
1. headline: one short hook line.
|
|
129
128
|
2. personalizedSummary: 2-3 sentences in "you" language (main body text).
|
|
130
|
-
3. suggestedAction:
|
|
129
|
+
3. suggestedAction: ${SUGGESTED_ACTION_DESCRIPTION}
|
|
131
130
|
4. narratorRemark: one short sentence for the narrator chip (who is suggesting and why; max ~80 chars).
|
|
132
131
|
5. greeting: a 2-4 sentence first-person message the viewer could send to the counterpart. Plain prose, no greeting prefix, no markdown.
|
|
133
132
|
7. mutualIntentsLabel: short subtitle under the other party's name. Examples: "3 mutual intents", "Shared interests", "Aligned goals" — keep it brief. NEVER output "0 mutual intents" or any zero-count label; use a qualitative phrase instead.
|
|
@@ -361,7 +360,7 @@ function buildNegotiatingChip(input) {
|
|
|
361
360
|
return {
|
|
362
361
|
headline: "Agents are talking",
|
|
363
362
|
personalizedSummary: "Your agent is still talking with theirs to see if this connection makes sense. We'll surface the full match as soon as they converge.",
|
|
364
|
-
suggestedAction: "
|
|
363
|
+
suggestedAction: "Your agents are still working out the fit",
|
|
365
364
|
narratorRemark,
|
|
366
365
|
mutualIntentsLabel: input.mutualIntentCount && input.mutualIntentCount > 0
|
|
367
366
|
? `${input.mutualIntentCount} mutual intent${input.mutualIntentCount !== 1 ? "s" : ""}`
|
|
@@ -32,7 +32,7 @@ export interface ModelConfig {
|
|
|
32
32
|
chatReasoningEffort?: 'low' | 'medium' | 'high';
|
|
33
33
|
}
|
|
34
34
|
/** Per-agent model settings before canonical assignments are applied. */
|
|
35
|
-
declare function getBaseModelConfig(config?: ModelConfig): { [Agent in "intentInferrer" | "intentVerifier" | "intentClarifier" | "profileGenerator" | "opportunityPresenter" | "negotiator" | "negotiationReflector" | "homeCategorizer" | "suggestionGenerator" | "chatTitleGenerator" | "negotiationInsights" | "chatContextSummarizer" | "negotiationSummarizer" | "inviteGenerator" | "userContextGenerator" | "networkRecommender" | "interruptClassifier" | "chat"]: Omit<{
|
|
35
|
+
declare function getBaseModelConfig(config?: ModelConfig): { [Agent in "intentInferrer" | "intentVerifier" | "intentClarifier" | "profileGenerator" | "opportunityPresenter" | "negotiator" | "negotiationReflector" | "homeCategorizer" | "suggestionGenerator" | "chatTitleGenerator" | "negotiationInsights" | "chatContextSummarizer" | "negotiationSummarizer" | "inviteGenerator" | "userContextGenerator" | "networkRecommender" | "networkPulseSummarizer" | "interruptClassifier" | "chat"]: Omit<{
|
|
36
36
|
readonly intentInferrer: {
|
|
37
37
|
readonly model: "google/gemini-3.7-flash";
|
|
38
38
|
};
|
|
@@ -99,6 +99,11 @@ declare function getBaseModelConfig(config?: ModelConfig): { [Agent in "intentIn
|
|
|
99
99
|
readonly temperature: 0.2;
|
|
100
100
|
readonly maxTokens: 512;
|
|
101
101
|
};
|
|
102
|
+
readonly networkPulseSummarizer: {
|
|
103
|
+
readonly model: "google/gemini-3.7-flash";
|
|
104
|
+
readonly temperature: 0.7;
|
|
105
|
+
readonly maxTokens: 400;
|
|
106
|
+
};
|
|
102
107
|
readonly interruptClassifier: {
|
|
103
108
|
readonly model: "google/gemini-3.7-flash";
|
|
104
109
|
readonly temperature: 0;
|
|
@@ -20,6 +20,7 @@ function getBaseModelConfig(config) {
|
|
|
20
20
|
inviteGenerator: { model: "google/gemini-3.7-flash", temperature: 0.3, maxTokens: 512 },
|
|
21
21
|
userContextGenerator: { model: "google/gemini-3.7-flash", temperature: 0.3, maxTokens: 512 },
|
|
22
22
|
networkRecommender: { model: "google/gemini-3.7-flash", temperature: 0.2, maxTokens: 512 },
|
|
23
|
+
networkPulseSummarizer: { model: "google/gemini-3.7-flash", temperature: 0.7, maxTokens: 400 },
|
|
23
24
|
interruptClassifier: { model: "google/gemini-3.7-flash", temperature: 0.0, maxTokens: 16 },
|
|
24
25
|
chat: {
|
|
25
26
|
model: "google/gemini-3.7-flash",
|
|
@@ -22,12 +22,13 @@ export declare const CANONICAL_AGENT_MODEL_DEFAULTS: Readonly<{
|
|
|
22
22
|
readonly inviteGenerator: "google/gemini-3.7-flash";
|
|
23
23
|
readonly userContextGenerator: "google/gemini-3.7-flash";
|
|
24
24
|
readonly networkRecommender: "google/gemini-3.7-flash";
|
|
25
|
+
readonly networkPulseSummarizer: "google/gemini-3.7-flash";
|
|
25
26
|
readonly interruptClassifier: "google/gemini-3.7-flash";
|
|
26
27
|
readonly chat: "google/gemini-3.7-flash";
|
|
27
28
|
}>;
|
|
28
29
|
export type CanonicalModelAgent = keyof typeof CANONICAL_AGENT_MODEL_DEFAULTS;
|
|
29
30
|
export type CanonicalAllAgentModels = Readonly<Record<CanonicalModelAgent, string>>;
|
|
30
|
-
export declare const CANONICAL_MODEL_AGENTS: readonly ("intentInferrer" | "intentVerifier" | "intentClarifier" | "profileGenerator" | "opportunityPresenter" | "negotiator" | "negotiationReflector" | "homeCategorizer" | "suggestionGenerator" | "chatTitleGenerator" | "negotiationInsights" | "chatContextSummarizer" | "negotiationSummarizer" | "inviteGenerator" | "userContextGenerator" | "networkRecommender" | "interruptClassifier" | "chat")[];
|
|
31
|
+
export declare const CANONICAL_MODEL_AGENTS: readonly ("intentInferrer" | "intentVerifier" | "intentClarifier" | "profileGenerator" | "opportunityPresenter" | "negotiator" | "negotiationReflector" | "homeCategorizer" | "suggestionGenerator" | "chatTitleGenerator" | "negotiationInsights" | "chatContextSummarizer" | "negotiationSummarizer" | "inviteGenerator" | "userContextGenerator" | "networkRecommender" | "networkPulseSummarizer" | "interruptClassifier" | "chat")[];
|
|
31
32
|
export declare function resolveCanonicalAllAgentModels(environment: Readonly<Record<string, string | undefined>>, options?: {
|
|
32
33
|
applyEvalOverrides?: boolean;
|
|
33
34
|
}): CanonicalAllAgentModels;
|
|
@@ -22,6 +22,7 @@ export const CANONICAL_AGENT_MODEL_DEFAULTS = Object.freeze({
|
|
|
22
22
|
inviteGenerator: "google/gemini-3.7-flash",
|
|
23
23
|
userContextGenerator: "google/gemini-3.7-flash",
|
|
24
24
|
networkRecommender: "google/gemini-3.7-flash",
|
|
25
|
+
networkPulseSummarizer: "google/gemini-3.7-flash",
|
|
25
26
|
interruptClassifier: "google/gemini-3.7-flash",
|
|
26
27
|
chat: "google/gemini-3.7-flash",
|
|
27
28
|
});
|