143 lines
3.4 KiB
Python
143 lines
3.4 KiB
Python
import json
|
|
|
|
|
|
def update_file(filename, new_js_code):
|
|
with open(filename, "r", encoding="utf-8") as f:
|
|
data = json.load(f)
|
|
|
|
for node in data["nodes"]:
|
|
if "parameters" in node and "jsCode" in node["parameters"]:
|
|
print(f"Updating jsCode in node: {node.get('name', 'unknown')}")
|
|
node["parameters"]["jsCode"] = new_js_code
|
|
break
|
|
|
|
with open(filename, "w", encoding="utf-8") as f:
|
|
json.dump(data, f, indent=2, ensure_ascii=False)
|
|
print(f"Updated {filename}")
|
|
|
|
|
|
# New jsCode for video search (already updated)
|
|
js_code_video_search = """const hits = $input.first().json.hits;
|
|
|
|
if (!hits || hits.length === 0) {
|
|
return {
|
|
json: {
|
|
message: '找不到相關結果',
|
|
query: $input.first().json.query
|
|
}
|
|
};
|
|
}
|
|
|
|
const results = hits.map((hit, index) => {
|
|
return {
|
|
number: index + 1,
|
|
text: hit.text,
|
|
start: hit.start,
|
|
end: hit.end,
|
|
score: Math.round(hit.score * 100) + '%',
|
|
video_title: hit.title,
|
|
file_path: hit.file_path
|
|
};
|
|
});
|
|
|
|
return {
|
|
json: {
|
|
query: $input.first().json.query,
|
|
count: $input.first().json.count,
|
|
results: results
|
|
}
|
|
};"""
|
|
|
|
# New jsCode for simple workflow
|
|
js_code_simple = """// 處理 Momentry 搜尋結果
|
|
const data = $input.first().json;
|
|
const hits = data.hits;
|
|
|
|
if (!hits || hits.length === 0) {
|
|
return {
|
|
json: {
|
|
success: false,
|
|
message: '找不到相關結果',
|
|
query: data.query
|
|
}
|
|
};
|
|
}
|
|
|
|
// 格式化結果
|
|
const formattedResults = hits.map((hit, idx) => {
|
|
return {
|
|
index: idx + 1,
|
|
id: hit.id,
|
|
title: hit.title,
|
|
text: hit.text,
|
|
startTime: hit.start,
|
|
endTime: hit.end,
|
|
relevance: Math.round(hit.score * 100) + '%',
|
|
file_path: hit.file_path
|
|
};
|
|
});
|
|
|
|
return {
|
|
json: {
|
|
success: true,
|
|
query: data.query,
|
|
totalFound: data.count,
|
|
results: formattedResults
|
|
}
|
|
};"""
|
|
|
|
# New jsCode for RAG MCP workflow
|
|
js_code_rag = """// Process Momentry Core search results
|
|
const data = $input.first().json;
|
|
const hits = data.hits || [];
|
|
|
|
if (hits.length === 0) {
|
|
return {
|
|
json: {
|
|
success: false,
|
|
message: 'No relevant results found',
|
|
query: data.query,
|
|
results: []
|
|
}
|
|
};
|
|
}
|
|
|
|
// Format results for RAG
|
|
const formattedResults = hits.map((hit, idx) => {
|
|
return {
|
|
index: idx + 1,
|
|
id: hit.id || hit.chunk_id,
|
|
title: hit.title || 'Unknown Video',
|
|
text: hit.text || hit.content || '',
|
|
startTime: hit.start_time || hit.start || 0,
|
|
endTime: hit.end_time || hit.end || 0,
|
|
relevance: Math.round((hit.score || 0) * 100) + '%',
|
|
videoUuid: hit.video_uuid || hit.uuid,
|
|
file_path: hit.file_path || ''
|
|
};
|
|
});
|
|
|
|
// Build context for RAG
|
|
const context = formattedResults
|
|
.map(r => \`[\${r.index}] \${r.text} (Video: \${r.title}, Time: \${r.startTime}s-\${r.endTime}s)\`)
|
|
.join('\\n\\n');
|
|
|
|
return {
|
|
json: {
|
|
success: true,
|
|
query: data.query,
|
|
totalFound: data.count || hits.length,
|
|
context: context,
|
|
results: formattedResults
|
|
}
|
|
};"""
|
|
|
|
if __name__ == "__main__":
|
|
# Update simple workflow
|
|
update_file("docs/n8n_workflow_simple.json", js_code_simple)
|
|
# Update RAG workflow
|
|
update_file("docs/n8n_workflow_video_rag_mcp.json", js_code_rag)
|
|
# Note: video search already updated, but we can re-update if needed
|
|
# update_file('docs/n8n_workflow_video_search.json', js_code_video_search)
|
|
print("All workflows updated.")
|