@mathrunet/masamune_firebase_workflow_marketing 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +361 -0
- package/LICENSE +21 -0
- package/README.md +70 -0
- package/assets/fonts/NotoSans-Bold.ttf +1439 -0
- package/assets/fonts/NotoSans-Regular.ttf +1439 -0
- package/assets/fonts/NotoSans.ttf +0 -0
- package/assets/fonts/NotoSansJP-Bold.ttf +0 -0
- package/assets/fonts/NotoSansJP-Regular.ttf +0 -0
- package/assets/fonts/NotoSansKR-Bold.ttf +1439 -0
- package/assets/fonts/NotoSansKR-Regular.ttf +1439 -0
- package/assets/fonts/NotoSansKR.ttf +0 -0
- package/assets/fonts/NotoSansSC-Bold.ttf +1439 -0
- package/assets/fonts/NotoSansSC-Regular.ttf +1439 -0
- package/assets/fonts/NotoSansSC.ttf +0 -0
- package/dist/clients/app_store_client.d.ts +54 -0
- package/dist/clients/app_store_client.js +280 -0
- package/dist/clients/app_store_client.js.map +1 -0
- package/dist/clients/firebase_analytics_client.d.ts +67 -0
- package/dist/clients/firebase_analytics_client.js +411 -0
- package/dist/clients/firebase_analytics_client.js.map +1 -0
- package/dist/clients/github_content_client.d.ts +83 -0
- package/dist/clients/github_content_client.js +443 -0
- package/dist/clients/github_content_client.js.map +1 -0
- package/dist/clients/google_play_client.d.ts +49 -0
- package/dist/clients/google_play_client.js +275 -0
- package/dist/clients/google_play_client.js.map +1 -0
- package/dist/functions/analyze_github_init.d.ts +37 -0
- package/dist/functions/analyze_github_init.js +299 -0
- package/dist/functions/analyze_github_init.js.map +1 -0
- package/dist/functions/analyze_github_process.d.ts +25 -0
- package/dist/functions/analyze_github_process.js +268 -0
- package/dist/functions/analyze_github_process.js.map +1 -0
- package/dist/functions/analyze_github_summary.d.ts +32 -0
- package/dist/functions/analyze_github_summary.js +270 -0
- package/dist/functions/analyze_github_summary.js.map +1 -0
- package/dist/functions/analyze_market_research.d.ts +40 -0
- package/dist/functions/analyze_market_research.js +346 -0
- package/dist/functions/analyze_market_research.js.map +1 -0
- package/dist/functions/analyze_marketing_data.d.ts +96 -0
- package/dist/functions/analyze_marketing_data.js +990 -0
- package/dist/functions/analyze_marketing_data.js.map +1 -0
- package/dist/functions/collect_from_app_store.d.ts +25 -0
- package/dist/functions/collect_from_app_store.js +148 -0
- package/dist/functions/collect_from_app_store.js.map +1 -0
- package/dist/functions/collect_from_firebase_analytics.d.ts +25 -0
- package/dist/functions/collect_from_firebase_analytics.js +142 -0
- package/dist/functions/collect_from_firebase_analytics.js.map +1 -0
- package/dist/functions/collect_from_google_play_console.d.ts +25 -0
- package/dist/functions/collect_from_google_play_console.js +142 -0
- package/dist/functions/collect_from_google_play_console.js.map +1 -0
- package/dist/functions/generate_marketing_markdown.d.ts +89 -0
- package/dist/functions/generate_marketing_markdown.js +653 -0
- package/dist/functions/generate_marketing_markdown.js.map +1 -0
- package/dist/functions/generate_marketing_pdf.d.ts +25 -0
- package/dist/functions/generate_marketing_pdf.js +175 -0
- package/dist/functions/generate_marketing_pdf.js.map +1 -0
- package/dist/functions/research_market.d.ts +56 -0
- package/dist/functions/research_market.js +434 -0
- package/dist/functions/research_market.js.map +1 -0
- package/dist/functions.d.ts +571 -0
- package/dist/functions.js +648 -0
- package/dist/functions.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/locales/de_DE.d.ts +5 -0
- package/dist/locales/de_DE.js +111 -0
- package/dist/locales/de_DE.js.map +1 -0
- package/dist/locales/en.d.ts +5 -0
- package/dist/locales/en.js +111 -0
- package/dist/locales/en.js.map +1 -0
- package/dist/locales/es_ES.d.ts +5 -0
- package/dist/locales/es_ES.js +111 -0
- package/dist/locales/es_ES.js.map +1 -0
- package/dist/locales/fr_FR.d.ts +5 -0
- package/dist/locales/fr_FR.js +111 -0
- package/dist/locales/fr_FR.js.map +1 -0
- package/dist/locales/id_ID.d.ts +5 -0
- package/dist/locales/id_ID.js +111 -0
- package/dist/locales/id_ID.js.map +1 -0
- package/dist/locales/index.d.ts +59 -0
- package/dist/locales/index.js +155 -0
- package/dist/locales/index.js.map +1 -0
- package/dist/locales/ja.d.ts +5 -0
- package/dist/locales/ja.js +111 -0
- package/dist/locales/ja.js.map +1 -0
- package/dist/locales/ko_KR.d.ts +5 -0
- package/dist/locales/ko_KR.js +111 -0
- package/dist/locales/ko_KR.js.map +1 -0
- package/dist/locales/pt_PT.d.ts +5 -0
- package/dist/locales/pt_PT.js +111 -0
- package/dist/locales/pt_PT.js.map +1 -0
- package/dist/locales/ru_RU.d.ts +5 -0
- package/dist/locales/ru_RU.js +111 -0
- package/dist/locales/ru_RU.js.map +1 -0
- package/dist/locales/types.d.ts +105 -0
- package/dist/locales/types.js +8 -0
- package/dist/locales/types.js.map +1 -0
- package/dist/locales/zh_CN.d.ts +5 -0
- package/dist/locales/zh_CN.js +111 -0
- package/dist/locales/zh_CN.js.map +1 -0
- package/dist/models/app_store_data.d.ts +87 -0
- package/dist/models/app_store_data.js +8 -0
- package/dist/models/app_store_data.js.map +1 -0
- package/dist/models/chart_data.d.ts +104 -0
- package/dist/models/chart_data.js +8 -0
- package/dist/models/chart_data.js.map +1 -0
- package/dist/models/common.d.ts +42 -0
- package/dist/models/common.js +8 -0
- package/dist/models/common.js.map +1 -0
- package/dist/models/firebase_analytics_data.d.ts +134 -0
- package/dist/models/firebase_analytics_data.js +8 -0
- package/dist/models/firebase_analytics_data.js.map +1 -0
- package/dist/models/github_analysis_data.d.ts +266 -0
- package/dist/models/github_analysis_data.js +101 -0
- package/dist/models/github_analysis_data.js.map +1 -0
- package/dist/models/google_play_data.d.ts +115 -0
- package/dist/models/google_play_data.js +8 -0
- package/dist/models/google_play_data.js.map +1 -0
- package/dist/models/index.d.ts +14 -0
- package/dist/models/index.js +36 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/market_research_data.d.ts +259 -0
- package/dist/models/market_research_data.js +8 -0
- package/dist/models/market_research_data.js.map +1 -0
- package/dist/models/marketing_analysis_data.d.ts +200 -0
- package/dist/models/marketing_analysis_data.js +8 -0
- package/dist/models/marketing_analysis_data.js.map +1 -0
- package/dist/models/pdf_data.d.ts +112 -0
- package/dist/models/pdf_data.js +8 -0
- package/dist/models/pdf_data.js.map +1 -0
- package/dist/services/chart_service.d.ts +54 -0
- package/dist/services/chart_service.js +436 -0
- package/dist/services/chart_service.js.map +1 -0
- package/dist/services/github_analysis_service.d.ts +73 -0
- package/dist/services/github_analysis_service.js +488 -0
- package/dist/services/github_analysis_service.js.map +1 -0
- package/dist/services/pdf_service.d.ts +112 -0
- package/dist/services/pdf_service.js +1397 -0
- package/dist/services/pdf_service.js.map +1 -0
- package/dist/utils/github_analysis_storage.d.ts +88 -0
- package/dist/utils/github_analysis_storage.js +154 -0
- package/dist/utils/github_analysis_storage.js.map +1 -0
- package/package.json +64 -0
- package/scripts/cleanup_test_data.ts +304 -0
- package/scripts/list_test_data.ts +85 -0
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ResearchMarket = void 0;
|
|
4
|
+
const masamune_firebase_workflow_1 = require("@mathrunet/masamune_firebase_workflow");
|
|
5
|
+
const vertexai_1 = require("@google-cloud/vertexai");
|
|
6
|
+
const locales_1 = require("../locales");
|
|
7
|
+
/**
|
|
8
|
+
* A function for conducting market research using Gemini with Google Search.
|
|
9
|
+
*
|
|
10
|
+
* Gemini + Google Searchを使用して市場調査を行うためのFunction。
|
|
11
|
+
*/
|
|
12
|
+
class ResearchMarket extends masamune_firebase_workflow_1.WorkflowProcessFunctionBase {
|
|
13
|
+
/**
|
|
14
|
+
* The ID of the function.
|
|
15
|
+
*
|
|
16
|
+
* 関数のID。
|
|
17
|
+
*/
|
|
18
|
+
id = "research_market";
|
|
19
|
+
/**
|
|
20
|
+
* Vertex AI API呼び出しのためのリトライヘルパー
|
|
21
|
+
*
|
|
22
|
+
* @param operation - 実行する非同期操作
|
|
23
|
+
* @param maxRetries - 最大リトライ回数(デフォルト: 3)
|
|
24
|
+
* @param initialDelay - 初期遅延時間(ミリ秒、デフォルト: 2000)
|
|
25
|
+
*/
|
|
26
|
+
async withRetry(operation, maxRetries = 3, initialDelay = 2000) {
|
|
27
|
+
let lastError = null;
|
|
28
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
29
|
+
try {
|
|
30
|
+
return await operation();
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
lastError = error;
|
|
34
|
+
// リトライ可能なエラーかチェック
|
|
35
|
+
const isRetryable = this.isRetryableError(error);
|
|
36
|
+
const isLastAttempt = attempt === maxRetries;
|
|
37
|
+
if (!isRetryable || isLastAttempt) {
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
// エクスポネンシャルバックオフ + ジッター
|
|
41
|
+
const backoffDelay = initialDelay * Math.pow(2, attempt);
|
|
42
|
+
const jitter = Math.random() * 1000; // 0-1000msのランダムジッター
|
|
43
|
+
const totalDelay = backoffDelay + jitter;
|
|
44
|
+
console.warn(`ResearchMarket: API call failed (attempt ${attempt + 1}/${maxRetries + 1}). ` +
|
|
45
|
+
`Retrying in ${Math.ceil(totalDelay / 1000)}s... Error: ${error.message}`);
|
|
46
|
+
await this.sleep(totalDelay);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
throw lastError || new Error("Operation failed after retries");
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* エラーがリトライ可能かどうかを判定
|
|
53
|
+
*/
|
|
54
|
+
isRetryableError(error) {
|
|
55
|
+
// エラーメッセージやステータスコードからリトライ可能性を判定
|
|
56
|
+
const errorMessage = error.message || String(error);
|
|
57
|
+
const errorString = errorMessage.toLowerCase();
|
|
58
|
+
// リトライ可能なエラーパターン
|
|
59
|
+
const retryablePatterns = [
|
|
60
|
+
'429', // Too Many Requests
|
|
61
|
+
'rate limit', // レート制限
|
|
62
|
+
'quota', // クォータ超過
|
|
63
|
+
'resource exhausted', // リソース枯渇
|
|
64
|
+
'503', // Service Unavailable
|
|
65
|
+
'service unavailable', // サービス利用不可
|
|
66
|
+
'deadline exceeded', // タイムアウト
|
|
67
|
+
'timeout', // タイムアウト
|
|
68
|
+
'temporary', // 一時的なエラー
|
|
69
|
+
'try again', // 再試行を促すメッセージ
|
|
70
|
+
];
|
|
71
|
+
return retryablePatterns.some(pattern => errorString.includes(pattern));
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 指定時間スリープ
|
|
75
|
+
*/
|
|
76
|
+
sleep(ms) {
|
|
77
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The process of the function.
|
|
81
|
+
*
|
|
82
|
+
* @param context
|
|
83
|
+
* The context of the function.
|
|
84
|
+
*
|
|
85
|
+
* @returns
|
|
86
|
+
* The action of the function.
|
|
87
|
+
*/
|
|
88
|
+
async process(context) {
|
|
89
|
+
const action = context.action;
|
|
90
|
+
const task = context.task;
|
|
91
|
+
// 1. task.projectからプロジェクトデータを取得
|
|
92
|
+
const projectData = await this.loadProjectData(task);
|
|
93
|
+
// 2. プロジェクトデータの検証
|
|
94
|
+
if (!this.hasValidProjectData(projectData)) {
|
|
95
|
+
console.log("ResearchMarket: Insufficient project data for market research");
|
|
96
|
+
return {
|
|
97
|
+
...action,
|
|
98
|
+
results: {
|
|
99
|
+
marketResearchData: {
|
|
100
|
+
error: "Insufficient project data. At least 'description' is required.",
|
|
101
|
+
generatedAt: new Date().toISOString(),
|
|
102
|
+
},
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// 3. 環境変数からプロジェクト情報を取得
|
|
107
|
+
const gcpProjectId = process.env.GCLOUD_PROJECT || process.env.GOOGLE_CLOUD_PROJECT || process.env.GCP_PROJECT_ID;
|
|
108
|
+
const region = process.env.GCLOUD_REGION || "us-central1";
|
|
109
|
+
const modelName = process.env.GEMINI_MODEL || "gemini-2.5-pro";
|
|
110
|
+
const inputPrice = Number(process.env.MODEL_INPUT_PRICE || 0.0000003);
|
|
111
|
+
const outputPrice = Number(process.env.MODEL_OUTPUT_PRICE || 0.0000025);
|
|
112
|
+
if (!gcpProjectId) {
|
|
113
|
+
console.error("ResearchMarket: No GCP project ID found");
|
|
114
|
+
return {
|
|
115
|
+
...action,
|
|
116
|
+
results: {
|
|
117
|
+
marketResearchData: {
|
|
118
|
+
error: "No GCP project ID configured",
|
|
119
|
+
generatedAt: new Date().toISOString(),
|
|
120
|
+
},
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
// 4. VertexAI を初期化
|
|
126
|
+
const vertexAI = new vertexai_1.VertexAI({ project: gcpProjectId, location: region });
|
|
127
|
+
// 5. プロンプトを構築
|
|
128
|
+
const locale = typeof action.locale === "object"
|
|
129
|
+
? action.locale["@language"]
|
|
130
|
+
: action.locale;
|
|
131
|
+
const searchPrompt = this.buildResearchPrompt(projectData, locale);
|
|
132
|
+
// === Stage 1: Google Search Groundingで情報収集 ===
|
|
133
|
+
console.log("ResearchMarket: Stage 1 - Collecting data with Google Search grounding...");
|
|
134
|
+
const searchModel = vertexAI.preview.getGenerativeModel({
|
|
135
|
+
model: modelName,
|
|
136
|
+
tools: [{
|
|
137
|
+
// @ts-ignore - googleSearch is a valid tool for grounding
|
|
138
|
+
googleSearch: {}
|
|
139
|
+
}]
|
|
140
|
+
});
|
|
141
|
+
const searchResult = await this.withRetry(async () => await searchModel.generateContent(searchPrompt), 3, // 最大3回リトライ
|
|
142
|
+
2000 // 初期遅延2秒
|
|
143
|
+
);
|
|
144
|
+
const searchResponse = searchResult.response;
|
|
145
|
+
const rawData = searchResponse.candidates?.[0].content.parts[0].text;
|
|
146
|
+
if (!rawData) {
|
|
147
|
+
throw new Error("Failed to collect data with Google Search grounding.");
|
|
148
|
+
}
|
|
149
|
+
// Grounding metadata(参照URL)を取得
|
|
150
|
+
const groundingMetadata = searchResponse.candidates?.[0].groundingMetadata;
|
|
151
|
+
if (groundingMetadata?.searchEntryPoint?.renderedContent) {
|
|
152
|
+
console.log("ResearchMarket: Search sources found:", groundingMetadata.searchEntryPoint.renderedContent);
|
|
153
|
+
}
|
|
154
|
+
// === Stage 2: 収集データを構造化 ===
|
|
155
|
+
console.log("ResearchMarket: Stage 2 - Structuring collected data...");
|
|
156
|
+
// Stage 1とStage 2の間に遅延を追加(レート制限対策)
|
|
157
|
+
await this.sleep(1000);
|
|
158
|
+
const structureModel = vertexAI.getGenerativeModel({
|
|
159
|
+
model: modelName,
|
|
160
|
+
generationConfig: {
|
|
161
|
+
responseMimeType: "application/json",
|
|
162
|
+
responseSchema: this.getResponseSchema(),
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
const structurePrompt = `You are a data structuring expert. Transform the following market research data into the specified JSON format.
|
|
166
|
+
|
|
167
|
+
## Raw Research Data
|
|
168
|
+
${rawData}
|
|
169
|
+
|
|
170
|
+
## Instructions
|
|
171
|
+
- Extract all relevant information from the raw data
|
|
172
|
+
- Organize it according to the required schema
|
|
173
|
+
- Preserve all data sources and URLs mentioned
|
|
174
|
+
- Maintain accuracy of all numerical data and statistics
|
|
175
|
+
- Fill in any missing fields with appropriate default values`;
|
|
176
|
+
const structuredResult = await this.withRetry(async () => await structureModel.generateContent(structurePrompt), 3, // 最大3回リトライ
|
|
177
|
+
2000 // 初期遅延2秒
|
|
178
|
+
);
|
|
179
|
+
const structuredResponse = structuredResult.response;
|
|
180
|
+
const structuredText = structuredResponse.candidates?.[0].content.parts[0].text;
|
|
181
|
+
if (!structuredText) {
|
|
182
|
+
throw new Error("Failed to structure the research data.");
|
|
183
|
+
}
|
|
184
|
+
// 8. JSONをパース
|
|
185
|
+
const cleanedText = structuredText.replace(/```json/g, "").replace(/```/g, "").trim();
|
|
186
|
+
const firstBrace = cleanedText.indexOf("{");
|
|
187
|
+
const lastBrace = cleanedText.lastIndexOf("}");
|
|
188
|
+
if (firstBrace === -1 || lastBrace === -1) {
|
|
189
|
+
throw new Error("No JSON object found in structured response.");
|
|
190
|
+
}
|
|
191
|
+
const jsonText = cleanedText.substring(firstBrace, lastBrace + 1);
|
|
192
|
+
const researchResult = JSON.parse(jsonText);
|
|
193
|
+
// 9. トークン使用量とコストを計算(両ステージの合計)
|
|
194
|
+
const stage1InputTokens = searchResponse.usageMetadata?.promptTokenCount ?? 0;
|
|
195
|
+
const stage1OutputTokens = searchResponse.usageMetadata?.candidatesTokenCount ?? 0;
|
|
196
|
+
const stage2InputTokens = structuredResponse.usageMetadata?.promptTokenCount ?? 0;
|
|
197
|
+
const stage2OutputTokens = structuredResponse.usageMetadata?.candidatesTokenCount ?? 0;
|
|
198
|
+
const inputTokens = stage1InputTokens + stage2InputTokens;
|
|
199
|
+
const outputTokens = stage1OutputTokens + stage2OutputTokens;
|
|
200
|
+
const cost = inputTokens * inputPrice + outputTokens * outputPrice;
|
|
201
|
+
console.log(`ResearchMarket: Generated successfully. Tokens: ${inputTokens} input, ${outputTokens} output. Cost: $${cost.toFixed(6)}`);
|
|
202
|
+
// 10. 結果を返却
|
|
203
|
+
return {
|
|
204
|
+
...action,
|
|
205
|
+
usage: (action.usage ?? 0) + cost,
|
|
206
|
+
results: {
|
|
207
|
+
marketResearchData: {
|
|
208
|
+
...researchResult,
|
|
209
|
+
generatedAt: new Date().toISOString(),
|
|
210
|
+
},
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
console.error("ResearchMarket: Failed to conduct market research", error);
|
|
216
|
+
return {
|
|
217
|
+
...action,
|
|
218
|
+
results: {
|
|
219
|
+
marketResearchData: {
|
|
220
|
+
error: error.message,
|
|
221
|
+
generatedAt: new Date().toISOString(),
|
|
222
|
+
},
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Load project data from task.project reference.
|
|
229
|
+
*/
|
|
230
|
+
async loadProjectData(task) {
|
|
231
|
+
const projectRef = task.project;
|
|
232
|
+
if (!projectRef) {
|
|
233
|
+
return {};
|
|
234
|
+
}
|
|
235
|
+
try {
|
|
236
|
+
const projectDoc = await projectRef.load();
|
|
237
|
+
if (!projectDoc.exists) {
|
|
238
|
+
return {};
|
|
239
|
+
}
|
|
240
|
+
const data = projectDoc.data();
|
|
241
|
+
return {
|
|
242
|
+
description: data?.description,
|
|
243
|
+
concept: data?.concept,
|
|
244
|
+
goal: data?.goal,
|
|
245
|
+
target: data?.target,
|
|
246
|
+
kpi: data?.kpi,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
console.error("ResearchMarket: Failed to load project data", error);
|
|
251
|
+
return {};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Check if project data is sufficient for market research.
|
|
256
|
+
*/
|
|
257
|
+
hasValidProjectData(project) {
|
|
258
|
+
// At minimum, description is required
|
|
259
|
+
return !!project.description && project.description.trim().length > 0;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Build the research prompt for Gemini.
|
|
263
|
+
*/
|
|
264
|
+
buildResearchPrompt(project, locale) {
|
|
265
|
+
const t = (0, locales_1.getTranslations)(locale);
|
|
266
|
+
return `You are a professional market research analyst. Based on the following project information, conduct comprehensive market research using Google Search.
|
|
267
|
+
|
|
268
|
+
## Project Information
|
|
269
|
+
- **Description**: ${project.description || "Not provided"}
|
|
270
|
+
- **Concept**: ${project.concept || "Not provided"}
|
|
271
|
+
- **Goal**: ${project.goal || "Not provided"}
|
|
272
|
+
- **Target Audience**: ${project.target || "Not provided"}
|
|
273
|
+
- **KPIs**: ${project.kpi ? JSON.stringify(project.kpi, null, 2) : "Not provided"}
|
|
274
|
+
|
|
275
|
+
## Research Objectives
|
|
276
|
+
Investigate and analyze the market from the following perspectives:
|
|
277
|
+
|
|
278
|
+
### 1. Market Potential Analysis
|
|
279
|
+
- Current market size and growth trends
|
|
280
|
+
- TAM (Total Addressable Market), SAM (Serviceable Addressable Market), SOM (Serviceable Obtainable Market) estimates
|
|
281
|
+
- Key market drivers
|
|
282
|
+
- Market entry barriers
|
|
283
|
+
- Target market segments
|
|
284
|
+
|
|
285
|
+
### 2. Competitive Analysis
|
|
286
|
+
- Direct competitors (3-5 companies)
|
|
287
|
+
- Indirect competitors (adjacent market players)
|
|
288
|
+
- Strengths and weaknesses of each competitor
|
|
289
|
+
- Pricing and business models
|
|
290
|
+
- Market positioning
|
|
291
|
+
- Differentiation points against competitors
|
|
292
|
+
- Market gaps (unmet needs)
|
|
293
|
+
|
|
294
|
+
### 3. Business Opportunities
|
|
295
|
+
- Opportunities arising from market gaps
|
|
296
|
+
- Opportunities based on emerging trends
|
|
297
|
+
- Opportunities from technology shifts
|
|
298
|
+
- Underserved target segments
|
|
299
|
+
|
|
300
|
+
## Research Instructions
|
|
301
|
+
- Use Google Search to collect real-time market data
|
|
302
|
+
- Include quantitative data (market size, growth rate, market share, etc.) whenever possible
|
|
303
|
+
- Record source URLs
|
|
304
|
+
- Prioritize data from the last 12 months
|
|
305
|
+
- ${t.respondInLanguage}
|
|
306
|
+
|
|
307
|
+
## Output Format
|
|
308
|
+
Please provide comprehensive market research data including all findings from your Google Search.
|
|
309
|
+
The data should include:
|
|
310
|
+
- Market potential (TAM, SAM, SOM if available)
|
|
311
|
+
- Competitor information with specific company names and details
|
|
312
|
+
- Business opportunities based on market gaps and trends
|
|
313
|
+
- URLs and sources for all data points found`;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Get the response schema for structured output.
|
|
317
|
+
*/
|
|
318
|
+
getResponseSchema() {
|
|
319
|
+
return {
|
|
320
|
+
type: vertexai_1.SchemaType.OBJECT,
|
|
321
|
+
properties: {
|
|
322
|
+
marketPotential: {
|
|
323
|
+
type: vertexai_1.SchemaType.OBJECT,
|
|
324
|
+
properties: {
|
|
325
|
+
summary: { type: vertexai_1.SchemaType.STRING },
|
|
326
|
+
tam: { type: vertexai_1.SchemaType.STRING },
|
|
327
|
+
sam: { type: vertexai_1.SchemaType.STRING },
|
|
328
|
+
som: { type: vertexai_1.SchemaType.STRING },
|
|
329
|
+
marketDrivers: {
|
|
330
|
+
type: vertexai_1.SchemaType.ARRAY,
|
|
331
|
+
items: { type: vertexai_1.SchemaType.STRING }
|
|
332
|
+
},
|
|
333
|
+
marketBarriers: {
|
|
334
|
+
type: vertexai_1.SchemaType.ARRAY,
|
|
335
|
+
items: { type: vertexai_1.SchemaType.STRING }
|
|
336
|
+
},
|
|
337
|
+
targetSegments: {
|
|
338
|
+
type: vertexai_1.SchemaType.ARRAY,
|
|
339
|
+
items: { type: vertexai_1.SchemaType.STRING }
|
|
340
|
+
},
|
|
341
|
+
},
|
|
342
|
+
required: ["summary", "marketDrivers", "marketBarriers", "targetSegments"]
|
|
343
|
+
},
|
|
344
|
+
competitorAnalysis: {
|
|
345
|
+
type: vertexai_1.SchemaType.OBJECT,
|
|
346
|
+
properties: {
|
|
347
|
+
competitors: {
|
|
348
|
+
type: vertexai_1.SchemaType.ARRAY,
|
|
349
|
+
items: {
|
|
350
|
+
type: vertexai_1.SchemaType.OBJECT,
|
|
351
|
+
properties: {
|
|
352
|
+
name: { type: vertexai_1.SchemaType.STRING },
|
|
353
|
+
description: { type: vertexai_1.SchemaType.STRING },
|
|
354
|
+
marketShare: { type: vertexai_1.SchemaType.STRING },
|
|
355
|
+
strengths: {
|
|
356
|
+
type: vertexai_1.SchemaType.ARRAY,
|
|
357
|
+
items: { type: vertexai_1.SchemaType.STRING }
|
|
358
|
+
},
|
|
359
|
+
weaknesses: {
|
|
360
|
+
type: vertexai_1.SchemaType.ARRAY,
|
|
361
|
+
items: { type: vertexai_1.SchemaType.STRING }
|
|
362
|
+
},
|
|
363
|
+
pricing: { type: vertexai_1.SchemaType.STRING },
|
|
364
|
+
targetAudience: { type: vertexai_1.SchemaType.STRING },
|
|
365
|
+
sourceUrl: { type: vertexai_1.SchemaType.STRING },
|
|
366
|
+
},
|
|
367
|
+
required: ["name", "description", "strengths", "weaknesses"]
|
|
368
|
+
}
|
|
369
|
+
},
|
|
370
|
+
marketLandscape: { type: vertexai_1.SchemaType.STRING },
|
|
371
|
+
competitiveAdvantages: {
|
|
372
|
+
type: vertexai_1.SchemaType.ARRAY,
|
|
373
|
+
items: { type: vertexai_1.SchemaType.STRING }
|
|
374
|
+
},
|
|
375
|
+
differentiationOpportunities: {
|
|
376
|
+
type: vertexai_1.SchemaType.ARRAY,
|
|
377
|
+
items: { type: vertexai_1.SchemaType.STRING }
|
|
378
|
+
},
|
|
379
|
+
marketGaps: {
|
|
380
|
+
type: vertexai_1.SchemaType.ARRAY,
|
|
381
|
+
items: { type: vertexai_1.SchemaType.STRING }
|
|
382
|
+
},
|
|
383
|
+
},
|
|
384
|
+
required: ["competitors", "marketLandscape", "competitiveAdvantages", "differentiationOpportunities", "marketGaps"]
|
|
385
|
+
},
|
|
386
|
+
businessOpportunities: {
|
|
387
|
+
type: vertexai_1.SchemaType.ARRAY,
|
|
388
|
+
items: {
|
|
389
|
+
type: vertexai_1.SchemaType.OBJECT,
|
|
390
|
+
properties: {
|
|
391
|
+
title: { type: vertexai_1.SchemaType.STRING },
|
|
392
|
+
description: { type: vertexai_1.SchemaType.STRING },
|
|
393
|
+
type: {
|
|
394
|
+
type: vertexai_1.SchemaType.STRING,
|
|
395
|
+
enum: ["market_gap", "emerging_trend", "underserved_segment", "technology_shift", "regulatory_change", "other"]
|
|
396
|
+
},
|
|
397
|
+
potentialImpact: {
|
|
398
|
+
type: vertexai_1.SchemaType.STRING,
|
|
399
|
+
enum: ["high", "medium", "low"]
|
|
400
|
+
},
|
|
401
|
+
timeframe: {
|
|
402
|
+
type: vertexai_1.SchemaType.STRING,
|
|
403
|
+
enum: ["immediate", "short_term", "medium_term", "long_term"]
|
|
404
|
+
},
|
|
405
|
+
requirements: {
|
|
406
|
+
type: vertexai_1.SchemaType.ARRAY,
|
|
407
|
+
items: { type: vertexai_1.SchemaType.STRING }
|
|
408
|
+
},
|
|
409
|
+
risks: {
|
|
410
|
+
type: vertexai_1.SchemaType.ARRAY,
|
|
411
|
+
items: { type: vertexai_1.SchemaType.STRING }
|
|
412
|
+
},
|
|
413
|
+
},
|
|
414
|
+
required: ["title", "description", "type", "potentialImpact", "timeframe", "requirements", "risks"]
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
dataSources: {
|
|
418
|
+
type: vertexai_1.SchemaType.ARRAY,
|
|
419
|
+
items: { type: vertexai_1.SchemaType.STRING }
|
|
420
|
+
},
|
|
421
|
+
},
|
|
422
|
+
required: ["marketPotential", "competitorAnalysis", "businessOpportunities", "dataSources"]
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
exports.ResearchMarket = ResearchMarket;
|
|
427
|
+
/**
|
|
428
|
+
* Export the function module.
|
|
429
|
+
*/
|
|
430
|
+
module.exports = (regions, options, data) => {
|
|
431
|
+
const instance = new ResearchMarket();
|
|
432
|
+
return instance.build(regions);
|
|
433
|
+
};
|
|
434
|
+
//# sourceMappingURL=research_market.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research_market.js","sourceRoot":"","sources":["../../src/functions/research_market.ts"],"names":[],"mappings":"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"}
|