Files
momentry_core/update_all_workflows.py

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.")