@roll-agent/smart-reply-agent 0.0.2
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/SKILL.md +44 -0
- package/data/brand-config.sample.json +72 -0
- package/data/reply-policy.json +153 -0
- package/dist/ai/model-registry.d.ts +104 -0
- package/dist/ai/model-registry.d.ts.map +1 -0
- package/dist/ai/model-registry.js +205 -0
- package/dist/ai/model-registry.js.map +1 -0
- package/dist/ai/structured-output.d.ts +50 -0
- package/dist/ai/structured-output.d.ts.map +1 -0
- package/dist/ai/structured-output.js +78 -0
- package/dist/ai/structured-output.js.map +1 -0
- package/dist/errors/app-error.d.ts +43 -0
- package/dist/errors/app-error.d.ts.map +1 -0
- package/dist/errors/app-error.js +95 -0
- package/dist/errors/app-error.js.map +1 -0
- package/dist/errors/error-codes.d.ts +49 -0
- package/dist/errors/error-codes.d.ts.map +1 -0
- package/dist/errors/error-codes.js +115 -0
- package/dist/errors/error-codes.js.map +1 -0
- package/dist/errors/error-factory.d.ts +31 -0
- package/dist/errors/error-factory.d.ts.map +1 -0
- package/dist/errors/error-factory.js +86 -0
- package/dist/errors/error-factory.js.map +1 -0
- package/dist/errors/error-utils.d.ts +40 -0
- package/dist/errors/error-utils.d.ts.map +1 -0
- package/dist/errors/error-utils.js +188 -0
- package/dist/errors/error-utils.js.map +1 -0
- package/dist/errors/index.d.ts +9 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +5 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/log-control.d.ts +3 -0
- package/dist/log-control.d.ts.map +1 -0
- package/dist/log-control.js +15 -0
- package/dist/log-control.js.map +1 -0
- package/dist/pipeline/age-eligibility.d.ts +26 -0
- package/dist/pipeline/age-eligibility.d.ts.map +1 -0
- package/dist/pipeline/age-eligibility.js +176 -0
- package/dist/pipeline/age-eligibility.js.map +1 -0
- package/dist/pipeline/candidate-context.d.ts +9 -0
- package/dist/pipeline/candidate-context.d.ts.map +1 -0
- package/dist/pipeline/candidate-context.js +31 -0
- package/dist/pipeline/candidate-context.js.map +1 -0
- package/dist/pipeline/candidate-utils.d.ts +6 -0
- package/dist/pipeline/candidate-utils.d.ts.map +1 -0
- package/dist/pipeline/candidate-utils.js +33 -0
- package/dist/pipeline/candidate-utils.js.map +1 -0
- package/dist/pipeline/classification.d.ts +13 -0
- package/dist/pipeline/classification.d.ts.map +1 -0
- package/dist/pipeline/classification.js +206 -0
- package/dist/pipeline/classification.js.map +1 -0
- package/dist/pipeline/context-builder.d.ts +22 -0
- package/dist/pipeline/context-builder.d.ts.map +1 -0
- package/dist/pipeline/context-builder.js +404 -0
- package/dist/pipeline/context-builder.js.map +1 -0
- package/dist/pipeline/pipeline-progress.d.ts +10 -0
- package/dist/pipeline/pipeline-progress.d.ts.map +1 -0
- package/dist/pipeline/pipeline-progress.js +33 -0
- package/dist/pipeline/pipeline-progress.js.map +1 -0
- package/dist/pipeline/reply-gate.d.ts +20 -0
- package/dist/pipeline/reply-gate.d.ts.map +1 -0
- package/dist/pipeline/reply-gate.js +139 -0
- package/dist/pipeline/reply-gate.js.map +1 -0
- package/dist/pipeline/smart-reply.d.ts +64 -0
- package/dist/pipeline/smart-reply.d.ts.map +1 -0
- package/dist/pipeline/smart-reply.js +418 -0
- package/dist/pipeline/smart-reply.js.map +1 -0
- package/dist/pipeline.d.ts +21 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +12 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/services/brand-alias.d.ts +5 -0
- package/dist/services/brand-alias.d.ts.map +1 -0
- package/dist/services/brand-alias.js +184 -0
- package/dist/services/brand-alias.js.map +1 -0
- package/dist/services/brand-config-selectors.d.ts +8 -0
- package/dist/services/brand-config-selectors.d.ts.map +1 -0
- package/dist/services/brand-config-selectors.js +30 -0
- package/dist/services/brand-config-selectors.js.map +1 -0
- package/dist/services/config-loader.d.ts +7 -0
- package/dist/services/config-loader.d.ts.map +1 -0
- package/dist/services/config-loader.js +45 -0
- package/dist/services/config-loader.js.map +1 -0
- package/dist/services/duliday-api.d.ts +31 -0
- package/dist/services/duliday-api.d.ts.map +1 -0
- package/dist/services/duliday-api.js +160 -0
- package/dist/services/duliday-api.js.map +1 -0
- package/dist/services/duliday-mapper.d.ts +46 -0
- package/dist/services/duliday-mapper.d.ts.map +1 -0
- package/dist/services/duliday-mapper.js +536 -0
- package/dist/services/duliday-mapper.js.map +1 -0
- package/dist/tools/generate-reply.d.ts +73 -0
- package/dist/tools/generate-reply.d.ts.map +1 -0
- package/dist/tools/generate-reply.js +132 -0
- package/dist/tools/generate-reply.js.map +1 -0
- package/dist/tools/sync-brand-data.d.ts +12 -0
- package/dist/tools/sync-brand-data.d.ts.map +1 -0
- package/dist/tools/sync-brand-data.js +114 -0
- package/dist/tools/sync-brand-data.js.map +1 -0
- package/dist/types/brand-resolution.d.ts +84 -0
- package/dist/types/brand-resolution.d.ts.map +1 -0
- package/dist/types/brand-resolution.js +37 -0
- package/dist/types/brand-resolution.js.map +1 -0
- package/dist/types/classification.d.ts +182 -0
- package/dist/types/classification.d.ts.map +1 -0
- package/dist/types/classification.js +30 -0
- package/dist/types/classification.js.map +1 -0
- package/dist/types/config.d.ts +4 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +7 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/duliday-api.d.ts +6729 -0
- package/dist/types/duliday-api.d.ts.map +1 -0
- package/dist/types/duliday-api.js +235 -0
- package/dist/types/duliday-api.js.map +1 -0
- package/dist/types/geocoding.d.ts +24 -0
- package/dist/types/geocoding.d.ts.map +1 -0
- package/dist/types/geocoding.js +12 -0
- package/dist/types/geocoding.js.map +1 -0
- package/dist/types/reply-policy.d.ts +1391 -0
- package/dist/types/reply-policy.d.ts.map +1 -0
- package/dist/types/reply-policy.js +332 -0
- package/dist/types/reply-policy.js.map +1 -0
- package/dist/types/zhipin.d.ts +2201 -0
- package/dist/types/zhipin.d.ts.map +1 -0
- package/dist/types/zhipin.js +123 -0
- package/dist/types/zhipin.js.map +1 -0
- package/package.json +70 -0
- package/references/env.yaml +27 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { defineTool } from "@roll-agent/sdk";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { CandidateInfoSchema } from "../types/zhipin.js";
|
|
4
|
+
import { loadBrandConfig, loadReplyPolicy } from "../services/config-loader.js";
|
|
5
|
+
import { generateSmartReply } from "../pipeline/smart-reply.js";
|
|
6
|
+
import { AGE_ELIGIBILITY_STATUSES } from "../pipeline/age-eligibility.js";
|
|
7
|
+
import { ChannelTypeSchema, EffectiveDisclosureModeSchema, FunnelStageSchema, ReplyNeedSchema, RiskFlagSchema, } from "../types/reply-policy.js";
|
|
8
|
+
import { REPLY_GATE_VIOLATION_CODES } from "../pipeline/reply-gate.js";
|
|
9
|
+
import { ModelConfigSchema } from "../types/classification.js";
|
|
10
|
+
const ReplyGateViolationCodeSchema = z.enum(REPLY_GATE_VIOLATION_CODES);
|
|
11
|
+
const AgeEligibilityStatusSchema = z.enum(AGE_ELIGIBILITY_STATUSES);
|
|
12
|
+
export const generateReply = defineTool({
|
|
13
|
+
name: "generate_reply",
|
|
14
|
+
description: "根据候选人消息、对话历史和品牌数据生成智能招聘回复。内部流程:回合规划 → primaryNeed 驱动上下文构建 → 年龄资格校验 → 策略化回复生成 → FactGate/ReplyGate 校验。",
|
|
15
|
+
input: z.object({
|
|
16
|
+
candidateMessage: z.string().describe("候选人发送的消息"),
|
|
17
|
+
conversationHistory: z.array(z.string()).optional().describe("对话历史(最近几轮)"),
|
|
18
|
+
candidateInfo: CandidateInfoSchema.optional().describe("候选人基本信息"),
|
|
19
|
+
preferredBrand: z.string().optional().describe("偏好品牌"),
|
|
20
|
+
channelType: ChannelTypeSchema.optional().describe("渠道类型: public(BOSS直聘) 或 private(微信)"),
|
|
21
|
+
defaultWechatId: z.string().optional().describe("默认微信号"),
|
|
22
|
+
industryVoiceId: z.string().optional().describe("行业语调ID"),
|
|
23
|
+
turnIndex: z.number().int().min(1).optional().describe("当前会话回复轮次"),
|
|
24
|
+
modelConfig: ModelConfigSchema.optional().describe("模型配置覆盖"),
|
|
25
|
+
}),
|
|
26
|
+
output: z.object({
|
|
27
|
+
suggestedReply: z.string(),
|
|
28
|
+
confidence: z.number(),
|
|
29
|
+
stage: FunnelStageSchema,
|
|
30
|
+
latencyMs: z.number().optional(),
|
|
31
|
+
shouldExchangeWechat: z.boolean().optional(),
|
|
32
|
+
error: z.string().optional(),
|
|
33
|
+
diagnostics: z
|
|
34
|
+
.object({
|
|
35
|
+
subGoals: z.array(z.string()),
|
|
36
|
+
needs: z.array(ReplyNeedSchema),
|
|
37
|
+
primaryNeed: ReplyNeedSchema,
|
|
38
|
+
riskFlags: z.array(RiskFlagSchema),
|
|
39
|
+
reasoningText: z.string(),
|
|
40
|
+
extractedInfo: z.object({
|
|
41
|
+
mentionedBrand: z.string().nullable(),
|
|
42
|
+
city: z.string().nullable(),
|
|
43
|
+
specificAge: z.number().nullable(),
|
|
44
|
+
hasUrgency: z.boolean().nullable(),
|
|
45
|
+
preferredSchedule: z.string().nullable(),
|
|
46
|
+
}),
|
|
47
|
+
ageGate: z.object({
|
|
48
|
+
enabled: z.boolean(),
|
|
49
|
+
status: AgeEligibilityStatusSchema,
|
|
50
|
+
strategy: z.string(),
|
|
51
|
+
}),
|
|
52
|
+
resolvedBrand: z.string(),
|
|
53
|
+
storeCount: z.number(),
|
|
54
|
+
detailLevel: EffectiveDisclosureModeSchema,
|
|
55
|
+
turnIndex: z.number(),
|
|
56
|
+
effectiveDisclosureMode: EffectiveDisclosureModeSchema,
|
|
57
|
+
replyGateRewritten: z.boolean(),
|
|
58
|
+
gateViolations: z.array(ReplyGateViolationCodeSchema),
|
|
59
|
+
factGateRewritten: z.boolean(),
|
|
60
|
+
})
|
|
61
|
+
.optional(),
|
|
62
|
+
}),
|
|
63
|
+
execute: async (input, ctx) => {
|
|
64
|
+
ctx.logger.info(`Processing message: ${input.candidateMessage.slice(0, 50)}...`);
|
|
65
|
+
let configData;
|
|
66
|
+
try {
|
|
67
|
+
configData = loadBrandConfig();
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return {
|
|
71
|
+
suggestedReply: "",
|
|
72
|
+
confidence: 0,
|
|
73
|
+
stage: "trust_building",
|
|
74
|
+
error: "品牌数据未配置,请先调用 sync_brand_data 写入数据",
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const replyPolicy = loadReplyPolicy();
|
|
78
|
+
const result = await generateSmartReply({
|
|
79
|
+
candidateMessage: input.candidateMessage,
|
|
80
|
+
conversationHistory: input.conversationHistory,
|
|
81
|
+
candidateInfo: input.candidateInfo,
|
|
82
|
+
preferredBrand: input.preferredBrand,
|
|
83
|
+
channelType: input.channelType,
|
|
84
|
+
defaultWechatId: input.defaultWechatId,
|
|
85
|
+
industryVoiceId: input.industryVoiceId,
|
|
86
|
+
turnIndex: input.turnIndex,
|
|
87
|
+
modelConfig: input.modelConfig,
|
|
88
|
+
configData,
|
|
89
|
+
replyPolicy,
|
|
90
|
+
});
|
|
91
|
+
ctx.logger.info(`Reply generated. Stage: ${result.turnPlan.stage}, Confidence: ${result.confidence}`);
|
|
92
|
+
const debug = result.debugInfo;
|
|
93
|
+
return {
|
|
94
|
+
suggestedReply: result.suggestedReply,
|
|
95
|
+
confidence: result.confidence,
|
|
96
|
+
stage: result.turnPlan.stage,
|
|
97
|
+
latencyMs: result.latencyMs,
|
|
98
|
+
shouldExchangeWechat: result.shouldExchangeWechat,
|
|
99
|
+
error: result.error?.userMessage,
|
|
100
|
+
diagnostics: debug
|
|
101
|
+
? {
|
|
102
|
+
subGoals: result.turnPlan.subGoals,
|
|
103
|
+
needs: result.turnPlan.needs,
|
|
104
|
+
primaryNeed: result.turnPlan.primaryNeed,
|
|
105
|
+
riskFlags: result.turnPlan.riskFlags,
|
|
106
|
+
reasoningText: result.turnPlan.reasoningText,
|
|
107
|
+
extractedInfo: {
|
|
108
|
+
mentionedBrand: result.turnPlan.extractedInfo.mentionedBrand ?? null,
|
|
109
|
+
city: result.turnPlan.extractedInfo.city ?? null,
|
|
110
|
+
specificAge: result.turnPlan.extractedInfo.specificAge ?? null,
|
|
111
|
+
hasUrgency: result.turnPlan.extractedInfo.hasUrgency ?? null,
|
|
112
|
+
preferredSchedule: result.turnPlan.extractedInfo.preferredSchedule ?? null,
|
|
113
|
+
},
|
|
114
|
+
ageGate: {
|
|
115
|
+
enabled: debug.appliedStrategy.enabled,
|
|
116
|
+
status: debug.gateStatus,
|
|
117
|
+
strategy: debug.appliedStrategy.strategy,
|
|
118
|
+
},
|
|
119
|
+
resolvedBrand: debug.resolvedBrand,
|
|
120
|
+
storeCount: debug.storeCount,
|
|
121
|
+
detailLevel: debug.detailLevel,
|
|
122
|
+
turnIndex: debug.turnIndex,
|
|
123
|
+
effectiveDisclosureMode: debug.effectiveDisclosureMode,
|
|
124
|
+
replyGateRewritten: result.replyGateRewritten,
|
|
125
|
+
gateViolations: result.gateViolations,
|
|
126
|
+
factGateRewritten: result.factGateRewritten,
|
|
127
|
+
}
|
|
128
|
+
: undefined,
|
|
129
|
+
};
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=generate-reply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-reply.js","sourceRoot":"","sources":["../../src/tools/generate-reply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const syncBrandData: import("@roll-agent/sdk").ToolDefinition<{
|
|
2
|
+
cityName: string;
|
|
3
|
+
brandAlias?: string | undefined;
|
|
4
|
+
}, {
|
|
5
|
+
success: boolean;
|
|
6
|
+
brandsCount: number;
|
|
7
|
+
storesCount: number;
|
|
8
|
+
positionsCount: number;
|
|
9
|
+
updatedAt: string;
|
|
10
|
+
error?: string | undefined;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=sync-brand-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-brand-data.d.ts","sourceRoot":"","sources":["../../src/tools/sync-brand-data.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,aAAa;;;;;;;;;;EAmGxB,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { defineTool } from "@roll-agent/sdk";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { getDulidayToken, getDulidayJobListEndpoint, fetchAllJobListPages, FULL_INCLUDE_OPTIONS, } from "../services/duliday-api.js";
|
|
4
|
+
import { getSharedBrandAliasMap } from "../services/brand-alias.js";
|
|
5
|
+
import { convertPositionsToZhipinData } from "../services/duliday-mapper.js";
|
|
6
|
+
import { saveBrandConfig } from "../services/config-loader.js";
|
|
7
|
+
export const syncBrandData = defineTool({
|
|
8
|
+
name: "sync_brand_data",
|
|
9
|
+
description: "从 Duliday API 拉取并同步品牌配置数据(门店、岗位、薪资等)到本地。可选传入品牌别名和城市名称作为过滤条件。",
|
|
10
|
+
input: z.object({
|
|
11
|
+
brandAlias: z.string().optional().describe("品牌别名(可选,配合 cityName 使用可按品牌过滤)"),
|
|
12
|
+
cityName: z
|
|
13
|
+
.string()
|
|
14
|
+
.describe('城市名称(必填,Duliday API 要求至少提供城市作为筛选条件,如 "上海市")'),
|
|
15
|
+
}),
|
|
16
|
+
output: z.object({
|
|
17
|
+
success: z.boolean(),
|
|
18
|
+
brandsCount: z.number(),
|
|
19
|
+
storesCount: z.number(),
|
|
20
|
+
positionsCount: z.number(),
|
|
21
|
+
updatedAt: z.string(),
|
|
22
|
+
error: z.string().optional(),
|
|
23
|
+
}),
|
|
24
|
+
execute: async (input, ctx) => {
|
|
25
|
+
const token = getDulidayToken();
|
|
26
|
+
const endpoint = getDulidayJobListEndpoint();
|
|
27
|
+
if (!token || !endpoint) {
|
|
28
|
+
return {
|
|
29
|
+
success: false,
|
|
30
|
+
brandsCount: 0,
|
|
31
|
+
storesCount: 0,
|
|
32
|
+
positionsCount: 0,
|
|
33
|
+
updatedAt: new Date().toISOString(),
|
|
34
|
+
error: `缺少环境变量: ${[!token && "DULIDAY_TOKEN", !endpoint && "DULIDAY_JOB_LIST_URL"].filter(Boolean).join(", ")}`,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (!input.cityName) {
|
|
38
|
+
return {
|
|
39
|
+
success: false,
|
|
40
|
+
brandsCount: 0,
|
|
41
|
+
storesCount: 0,
|
|
42
|
+
positionsCount: 0,
|
|
43
|
+
updatedAt: new Date().toISOString(),
|
|
44
|
+
error: 'cityName 为必填项,Duliday API 要求至少提供城市作为筛选条件(如 "上海市")',
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
ctx.logger.info("Fetching all job list pages from Duliday API...");
|
|
49
|
+
const { items } = await fetchAllJobListPages(token, endpoint, {
|
|
50
|
+
brandAlias: input.brandAlias ?? null,
|
|
51
|
+
cityName: input.cityName ?? null,
|
|
52
|
+
include: FULL_INCLUDE_OPTIONS,
|
|
53
|
+
});
|
|
54
|
+
let preferredDefaultBrandName = resolveFirstBrandName(items);
|
|
55
|
+
if (!preferredDefaultBrandName && input.brandAlias) {
|
|
56
|
+
preferredDefaultBrandName = await reverseLookupBrand(input.brandAlias, token);
|
|
57
|
+
}
|
|
58
|
+
if (!preferredDefaultBrandName && input.brandAlias) {
|
|
59
|
+
preferredDefaultBrandName = input.brandAlias;
|
|
60
|
+
}
|
|
61
|
+
ctx.logger.info(`Resolved default brand: ${preferredDefaultBrandName ?? "自动推断"}, converting ${items.length} positions...`);
|
|
62
|
+
const zhipinData = convertPositionsToZhipinData(items, preferredDefaultBrandName, input.cityName);
|
|
63
|
+
saveBrandConfig(zhipinData);
|
|
64
|
+
ctx.logger.info(`Brand config saved: ${zhipinData.brands.length} brands, ${zhipinData.brands.reduce((sum, brand) => sum + brand.stores.length, 0)} stores`);
|
|
65
|
+
const storesCount = zhipinData.brands.reduce((sum, brand) => sum + brand.stores.length, 0);
|
|
66
|
+
const positionsCount = zhipinData.brands.reduce((sum, brand) => sum + brand.stores.reduce((inner, store) => inner + store.positions.length, 0), 0);
|
|
67
|
+
return {
|
|
68
|
+
success: true,
|
|
69
|
+
brandsCount: zhipinData.brands.length,
|
|
70
|
+
storesCount,
|
|
71
|
+
positionsCount,
|
|
72
|
+
updatedAt: new Date().toISOString(),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
return {
|
|
77
|
+
success: false,
|
|
78
|
+
brandsCount: 0,
|
|
79
|
+
storesCount: 0,
|
|
80
|
+
positionsCount: 0,
|
|
81
|
+
updatedAt: new Date().toISOString(),
|
|
82
|
+
error: err instanceof Error ? err.message : String(err),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
function isRecord(value) {
|
|
88
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
89
|
+
}
|
|
90
|
+
function resolveFirstBrandName(items) {
|
|
91
|
+
for (const item of items) {
|
|
92
|
+
if (!isRecord(item))
|
|
93
|
+
continue;
|
|
94
|
+
const basicInfo = isRecord(item.basicInfo) ? item.basicInfo : null;
|
|
95
|
+
if (basicInfo && typeof basicInfo.brandName === "string" && basicInfo.brandName) {
|
|
96
|
+
return basicInfo.brandName;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
async function reverseLookupBrand(alias, dulidayToken) {
|
|
102
|
+
try {
|
|
103
|
+
const aliasMap = await getSharedBrandAliasMap(dulidayToken);
|
|
104
|
+
const key = alias
|
|
105
|
+
.trim()
|
|
106
|
+
.toLowerCase()
|
|
107
|
+
.replace(/[\s._-]+/g, "");
|
|
108
|
+
return aliasMap.get(key);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=sync-brand-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-brand-data.js","sourceRoot":"","sources":["../../src/tools/sync-brand-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { BrandPriorityStrategy } from "./config.ts";
|
|
3
|
+
export declare const BrandResolutionInputSchema: z.ZodObject<{
|
|
4
|
+
uiSelectedBrand: z.ZodOptional<z.ZodString>;
|
|
5
|
+
configDefaultBrand: z.ZodOptional<z.ZodString>;
|
|
6
|
+
conversationBrand: z.ZodOptional<z.ZodString>;
|
|
7
|
+
availableBrands: z.ZodArray<z.ZodString, "many">;
|
|
8
|
+
strategy: z.ZodEnum<["user-selected", "conversation-extracted", "smart"]>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
availableBrands: string[];
|
|
11
|
+
strategy: "user-selected" | "conversation-extracted" | "smart";
|
|
12
|
+
uiSelectedBrand?: string | undefined;
|
|
13
|
+
configDefaultBrand?: string | undefined;
|
|
14
|
+
conversationBrand?: string | undefined;
|
|
15
|
+
}, {
|
|
16
|
+
availableBrands: string[];
|
|
17
|
+
strategy: "user-selected" | "conversation-extracted" | "smart";
|
|
18
|
+
uiSelectedBrand?: string | undefined;
|
|
19
|
+
configDefaultBrand?: string | undefined;
|
|
20
|
+
conversationBrand?: string | undefined;
|
|
21
|
+
}>;
|
|
22
|
+
export type BrandResolutionInput = z.infer<typeof BrandResolutionInputSchema> & {
|
|
23
|
+
aliasMap?: Map<string, string> | undefined;
|
|
24
|
+
};
|
|
25
|
+
export declare const BrandMatchTypeSchema: z.ZodEnum<["exact", "fuzzy", "fallback"]>;
|
|
26
|
+
export type BrandMatchType = z.infer<typeof BrandMatchTypeSchema>;
|
|
27
|
+
export declare const BrandSourceSchema: z.ZodEnum<["ui", "conversation", "config", "default"]>;
|
|
28
|
+
export type BrandSource = z.infer<typeof BrandSourceSchema>;
|
|
29
|
+
export declare const BrandResolutionOutputSchema: z.ZodObject<{
|
|
30
|
+
resolvedBrand: z.ZodString;
|
|
31
|
+
matchType: z.ZodEnum<["exact", "fuzzy", "fallback"]>;
|
|
32
|
+
source: z.ZodEnum<["ui", "conversation", "config", "default"]>;
|
|
33
|
+
reason: z.ZodString;
|
|
34
|
+
originalInput: z.ZodOptional<z.ZodString>;
|
|
35
|
+
}, "strip", z.ZodTypeAny, {
|
|
36
|
+
source: "default" | "config" | "ui" | "conversation";
|
|
37
|
+
resolvedBrand: string;
|
|
38
|
+
matchType: "exact" | "fuzzy" | "fallback";
|
|
39
|
+
reason: string;
|
|
40
|
+
originalInput?: string | undefined;
|
|
41
|
+
}, {
|
|
42
|
+
source: "default" | "config" | "ui" | "conversation";
|
|
43
|
+
resolvedBrand: string;
|
|
44
|
+
matchType: "exact" | "fuzzy" | "fallback";
|
|
45
|
+
reason: string;
|
|
46
|
+
originalInput?: string | undefined;
|
|
47
|
+
}>;
|
|
48
|
+
export type BrandResolutionOutput = z.infer<typeof BrandResolutionOutputSchema>;
|
|
49
|
+
export declare const FuzzyMatchResultSchema: z.ZodObject<{
|
|
50
|
+
brand: z.ZodString;
|
|
51
|
+
isExact: z.ZodBoolean;
|
|
52
|
+
originalInput: z.ZodString;
|
|
53
|
+
}, "strip", z.ZodTypeAny, {
|
|
54
|
+
brand: string;
|
|
55
|
+
originalInput: string;
|
|
56
|
+
isExact: boolean;
|
|
57
|
+
}, {
|
|
58
|
+
brand: string;
|
|
59
|
+
originalInput: string;
|
|
60
|
+
isExact: boolean;
|
|
61
|
+
}>;
|
|
62
|
+
export type FuzzyMatchResult = z.infer<typeof FuzzyMatchResultSchema>;
|
|
63
|
+
export declare const BRAND_RESOLUTION_PRIORITY: {
|
|
64
|
+
readonly "user-selected": readonly ["uiSelectedBrand", "configDefaultBrand", "firstAvailable"];
|
|
65
|
+
readonly "conversation-extracted": readonly ["conversationBrand", "uiSelectedBrand", "configDefaultBrand", "firstAvailable"];
|
|
66
|
+
readonly smart: readonly ["conversationBrand", "uiSelectedBrand", "configDefaultBrand", "firstAvailable"];
|
|
67
|
+
};
|
|
68
|
+
export declare function isBrandPriorityStrategy(value: unknown): value is BrandPriorityStrategy;
|
|
69
|
+
export interface BrandResolutionContext {
|
|
70
|
+
sources: {
|
|
71
|
+
ui?: string;
|
|
72
|
+
conversation?: string;
|
|
73
|
+
config?: string;
|
|
74
|
+
};
|
|
75
|
+
availableBrands: string[];
|
|
76
|
+
strategy: BrandPriorityStrategy;
|
|
77
|
+
attempts: Array<{
|
|
78
|
+
source: string;
|
|
79
|
+
value: string | undefined;
|
|
80
|
+
matched: boolean;
|
|
81
|
+
reason: string;
|
|
82
|
+
}>;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=brand-resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand-resolution.d.ts","sourceRoot":"","sources":["../../src/types/brand-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGzD,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;EAMrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,GAAG;IAC9E,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC5C,CAAC;AAEF,eAAO,MAAM,oBAAoB,2CAAyC,CAAC;AAC3E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,iBAAiB,wDAAsD,CAAC;AACrF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;EAMtC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAIjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,yBAAyB;;;;CAS5B,CAAC;AAEX,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,qBAAqB,CAEtF;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE;QACP,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,QAAQ,EAAE,KAAK,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { BrandPriorityStrategySchema } from "./config.js";
|
|
3
|
+
export const BrandResolutionInputSchema = z.object({
|
|
4
|
+
uiSelectedBrand: z.string().optional(),
|
|
5
|
+
configDefaultBrand: z.string().optional(),
|
|
6
|
+
conversationBrand: z.string().optional(),
|
|
7
|
+
availableBrands: z.array(z.string()),
|
|
8
|
+
strategy: BrandPriorityStrategySchema,
|
|
9
|
+
});
|
|
10
|
+
export const BrandMatchTypeSchema = z.enum(["exact", "fuzzy", "fallback"]);
|
|
11
|
+
export const BrandSourceSchema = z.enum(["ui", "conversation", "config", "default"]);
|
|
12
|
+
export const BrandResolutionOutputSchema = z.object({
|
|
13
|
+
resolvedBrand: z.string(),
|
|
14
|
+
matchType: BrandMatchTypeSchema,
|
|
15
|
+
source: BrandSourceSchema,
|
|
16
|
+
reason: z.string(),
|
|
17
|
+
originalInput: z.string().optional(),
|
|
18
|
+
});
|
|
19
|
+
export const FuzzyMatchResultSchema = z.object({
|
|
20
|
+
brand: z.string(),
|
|
21
|
+
isExact: z.boolean(),
|
|
22
|
+
originalInput: z.string(),
|
|
23
|
+
});
|
|
24
|
+
export const BRAND_RESOLUTION_PRIORITY = {
|
|
25
|
+
"user-selected": ["uiSelectedBrand", "configDefaultBrand", "firstAvailable"],
|
|
26
|
+
"conversation-extracted": [
|
|
27
|
+
"conversationBrand",
|
|
28
|
+
"uiSelectedBrand",
|
|
29
|
+
"configDefaultBrand",
|
|
30
|
+
"firstAvailable",
|
|
31
|
+
],
|
|
32
|
+
smart: ["conversationBrand", "uiSelectedBrand", "configDefaultBrand", "firstAvailable"],
|
|
33
|
+
};
|
|
34
|
+
export function isBrandPriorityStrategy(value) {
|
|
35
|
+
return BrandPriorityStrategySchema.safeParse(value).success;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=brand-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand-resolution.js","sourceRoot":"","sources":["../../src/types/brand-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACpC,QAAQ,EAAE,2BAA2B;CACtC,CAAC,CAAC;AAMH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAG3E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAGrF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,SAAS,EAAE,oBAAoB;IAC/B,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;CAC1B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,eAAe,EAAE,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,gBAAgB,CAAU;IACrF,wBAAwB,EAAE;QACxB,mBAAmB;QACnB,iBAAiB;QACjB,oBAAoB;QACpB,gBAAgB;KACR;IACV,KAAK,EAAE,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,gBAAgB,CAAU;CACxF,CAAC;AAEX,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,2BAA2B,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const ProviderConfigSchema: z.ZodObject<{
|
|
3
|
+
name: z.ZodString;
|
|
4
|
+
baseURL: z.ZodString;
|
|
5
|
+
description: z.ZodString;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
description: string;
|
|
8
|
+
name: string;
|
|
9
|
+
baseURL: string;
|
|
10
|
+
}, {
|
|
11
|
+
description: string;
|
|
12
|
+
name: string;
|
|
13
|
+
baseURL: string;
|
|
14
|
+
}>;
|
|
15
|
+
export declare const ProviderConfigsSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
16
|
+
name: z.ZodString;
|
|
17
|
+
baseURL: z.ZodString;
|
|
18
|
+
description: z.ZodString;
|
|
19
|
+
}, "strip", z.ZodTypeAny, {
|
|
20
|
+
description: string;
|
|
21
|
+
name: string;
|
|
22
|
+
baseURL: string;
|
|
23
|
+
}, {
|
|
24
|
+
description: string;
|
|
25
|
+
name: string;
|
|
26
|
+
baseURL: string;
|
|
27
|
+
}>>;
|
|
28
|
+
export declare const ModelConfigSchema: z.ZodObject<{
|
|
29
|
+
chatModel: z.ZodOptional<z.ZodString>;
|
|
30
|
+
classifyModel: z.ZodOptional<z.ZodString>;
|
|
31
|
+
replyModel: z.ZodOptional<z.ZodString>;
|
|
32
|
+
providerConfigs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
33
|
+
name: z.ZodString;
|
|
34
|
+
baseURL: z.ZodString;
|
|
35
|
+
description: z.ZodString;
|
|
36
|
+
}, "strip", z.ZodTypeAny, {
|
|
37
|
+
description: string;
|
|
38
|
+
name: string;
|
|
39
|
+
baseURL: string;
|
|
40
|
+
}, {
|
|
41
|
+
description: string;
|
|
42
|
+
name: string;
|
|
43
|
+
baseURL: string;
|
|
44
|
+
}>>>;
|
|
45
|
+
}, "strip", z.ZodTypeAny, {
|
|
46
|
+
chatModel?: string | undefined;
|
|
47
|
+
classifyModel?: string | undefined;
|
|
48
|
+
replyModel?: string | undefined;
|
|
49
|
+
providerConfigs?: Record<string, {
|
|
50
|
+
description: string;
|
|
51
|
+
name: string;
|
|
52
|
+
baseURL: string;
|
|
53
|
+
}> | undefined;
|
|
54
|
+
}, {
|
|
55
|
+
chatModel?: string | undefined;
|
|
56
|
+
classifyModel?: string | undefined;
|
|
57
|
+
replyModel?: string | undefined;
|
|
58
|
+
providerConfigs?: Record<string, {
|
|
59
|
+
description: string;
|
|
60
|
+
name: string;
|
|
61
|
+
baseURL: string;
|
|
62
|
+
}> | undefined;
|
|
63
|
+
}>;
|
|
64
|
+
export declare const BrandDataSchema: z.ZodObject<{
|
|
65
|
+
city: z.ZodOptional<z.ZodString>;
|
|
66
|
+
defaultBrand: z.ZodString;
|
|
67
|
+
availableBrands: z.ZodArray<z.ZodString, "many">;
|
|
68
|
+
storeCount: z.ZodNumber;
|
|
69
|
+
}, "strip", z.ZodTypeAny, {
|
|
70
|
+
defaultBrand: string;
|
|
71
|
+
availableBrands: string[];
|
|
72
|
+
storeCount: number;
|
|
73
|
+
city?: string | undefined;
|
|
74
|
+
}, {
|
|
75
|
+
defaultBrand: string;
|
|
76
|
+
availableBrands: string[];
|
|
77
|
+
storeCount: number;
|
|
78
|
+
city?: string | undefined;
|
|
79
|
+
}>;
|
|
80
|
+
export declare const ClassificationOptionsSchema: z.ZodObject<{
|
|
81
|
+
modelConfig: z.ZodObject<{
|
|
82
|
+
chatModel: z.ZodOptional<z.ZodString>;
|
|
83
|
+
classifyModel: z.ZodOptional<z.ZodString>;
|
|
84
|
+
replyModel: z.ZodOptional<z.ZodString>;
|
|
85
|
+
providerConfigs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
86
|
+
name: z.ZodString;
|
|
87
|
+
baseURL: z.ZodString;
|
|
88
|
+
description: z.ZodString;
|
|
89
|
+
}, "strip", z.ZodTypeAny, {
|
|
90
|
+
description: string;
|
|
91
|
+
name: string;
|
|
92
|
+
baseURL: string;
|
|
93
|
+
}, {
|
|
94
|
+
description: string;
|
|
95
|
+
name: string;
|
|
96
|
+
baseURL: string;
|
|
97
|
+
}>>>;
|
|
98
|
+
}, "strip", z.ZodTypeAny, {
|
|
99
|
+
chatModel?: string | undefined;
|
|
100
|
+
classifyModel?: string | undefined;
|
|
101
|
+
replyModel?: string | undefined;
|
|
102
|
+
providerConfigs?: Record<string, {
|
|
103
|
+
description: string;
|
|
104
|
+
name: string;
|
|
105
|
+
baseURL: string;
|
|
106
|
+
}> | undefined;
|
|
107
|
+
}, {
|
|
108
|
+
chatModel?: string | undefined;
|
|
109
|
+
classifyModel?: string | undefined;
|
|
110
|
+
replyModel?: string | undefined;
|
|
111
|
+
providerConfigs?: Record<string, {
|
|
112
|
+
description: string;
|
|
113
|
+
name: string;
|
|
114
|
+
baseURL: string;
|
|
115
|
+
}> | undefined;
|
|
116
|
+
}>;
|
|
117
|
+
candidateMessage: z.ZodString;
|
|
118
|
+
conversationHistory: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
119
|
+
brandData: z.ZodOptional<z.ZodObject<{
|
|
120
|
+
city: z.ZodOptional<z.ZodString>;
|
|
121
|
+
defaultBrand: z.ZodString;
|
|
122
|
+
availableBrands: z.ZodArray<z.ZodString, "many">;
|
|
123
|
+
storeCount: z.ZodNumber;
|
|
124
|
+
}, "strip", z.ZodTypeAny, {
|
|
125
|
+
defaultBrand: string;
|
|
126
|
+
availableBrands: string[];
|
|
127
|
+
storeCount: number;
|
|
128
|
+
city?: string | undefined;
|
|
129
|
+
}, {
|
|
130
|
+
defaultBrand: string;
|
|
131
|
+
availableBrands: string[];
|
|
132
|
+
storeCount: number;
|
|
133
|
+
city?: string | undefined;
|
|
134
|
+
}>>;
|
|
135
|
+
channelType: z.ZodOptional<z.ZodEnum<["public", "private"]>>;
|
|
136
|
+
}, "strip", z.ZodTypeAny, {
|
|
137
|
+
modelConfig: {
|
|
138
|
+
chatModel?: string | undefined;
|
|
139
|
+
classifyModel?: string | undefined;
|
|
140
|
+
replyModel?: string | undefined;
|
|
141
|
+
providerConfigs?: Record<string, {
|
|
142
|
+
description: string;
|
|
143
|
+
name: string;
|
|
144
|
+
baseURL: string;
|
|
145
|
+
}> | undefined;
|
|
146
|
+
};
|
|
147
|
+
candidateMessage: string;
|
|
148
|
+
conversationHistory: string[];
|
|
149
|
+
brandData?: {
|
|
150
|
+
defaultBrand: string;
|
|
151
|
+
availableBrands: string[];
|
|
152
|
+
storeCount: number;
|
|
153
|
+
city?: string | undefined;
|
|
154
|
+
} | undefined;
|
|
155
|
+
channelType?: "public" | "private" | undefined;
|
|
156
|
+
}, {
|
|
157
|
+
modelConfig: {
|
|
158
|
+
chatModel?: string | undefined;
|
|
159
|
+
classifyModel?: string | undefined;
|
|
160
|
+
replyModel?: string | undefined;
|
|
161
|
+
providerConfigs?: Record<string, {
|
|
162
|
+
description: string;
|
|
163
|
+
name: string;
|
|
164
|
+
baseURL: string;
|
|
165
|
+
}> | undefined;
|
|
166
|
+
};
|
|
167
|
+
candidateMessage: string;
|
|
168
|
+
conversationHistory?: string[] | undefined;
|
|
169
|
+
brandData?: {
|
|
170
|
+
defaultBrand: string;
|
|
171
|
+
availableBrands: string[];
|
|
172
|
+
storeCount: number;
|
|
173
|
+
city?: string | undefined;
|
|
174
|
+
} | undefined;
|
|
175
|
+
channelType?: "public" | "private" | undefined;
|
|
176
|
+
}>;
|
|
177
|
+
export type ProviderConfig = z.infer<typeof ProviderConfigSchema>;
|
|
178
|
+
export type ModelConfig = z.infer<typeof ModelConfigSchema>;
|
|
179
|
+
export type ProviderConfigs = z.infer<typeof ProviderConfigsSchema>;
|
|
180
|
+
export type BrandData = z.infer<typeof BrandDataSchema>;
|
|
181
|
+
export type ClassificationOptions = z.infer<typeof ClassificationOptionsSchema>;
|
|
182
|
+
//# sourceMappingURL=classification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classification.d.ts","sourceRoot":"","sources":["../../src/types/classification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAI/B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;GAA6C,CAAC;AAEhF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK5B,CAAC;AAIH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAK1B,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMtC,CAAC;AAGH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ChannelTypeSchema } from "./reply-policy.js";
|
|
3
|
+
// ========== Provider / Model Config Schemas ==========
|
|
4
|
+
export const ProviderConfigSchema = z.object({
|
|
5
|
+
name: z.string(),
|
|
6
|
+
baseURL: z.string(),
|
|
7
|
+
description: z.string(),
|
|
8
|
+
});
|
|
9
|
+
export const ProviderConfigsSchema = z.record(z.string(), ProviderConfigSchema);
|
|
10
|
+
export const ModelConfigSchema = z.object({
|
|
11
|
+
chatModel: z.string().optional(),
|
|
12
|
+
classifyModel: z.string().optional(),
|
|
13
|
+
replyModel: z.string().optional(),
|
|
14
|
+
providerConfigs: ProviderConfigsSchema.optional(),
|
|
15
|
+
});
|
|
16
|
+
// ========== Classification Agent Schema ==========
|
|
17
|
+
export const BrandDataSchema = z.object({
|
|
18
|
+
city: z.string().optional(),
|
|
19
|
+
defaultBrand: z.string(),
|
|
20
|
+
availableBrands: z.array(z.string()),
|
|
21
|
+
storeCount: z.number(),
|
|
22
|
+
});
|
|
23
|
+
export const ClassificationOptionsSchema = z.object({
|
|
24
|
+
modelConfig: ModelConfigSchema,
|
|
25
|
+
candidateMessage: z.string(),
|
|
26
|
+
conversationHistory: z.array(z.string()).default([]),
|
|
27
|
+
brandData: BrandDataSchema.optional(),
|
|
28
|
+
channelType: ChannelTypeSchema.optional(),
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=classification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classification.js","sourceRoot":"","sources":["../../src/types/classification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,wDAAwD;AAExD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC;AAEhF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,eAAe,EAAE,qBAAqB,CAAC,QAAQ,EAAE;CAClD,CAAC,CAAC;AAEH,oDAAoD;AAEpD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,WAAW,EAAE,iBAAiB;IAC9B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACpD,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE;IACrC,WAAW,EAAE,iBAAiB,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,2BAA2B,iEAItC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC"}
|