Files
momentry_core/scripts/test_ollama_feasibility.py
Warren e75c4d6f07 cleanup: remove dead code and duplicate docs
- Remove session-ses_2f27.md (161KB raw session log)
- Remove 49 ROOT_* duplicate files across REFERENCE/
- Remove 14 duplicate files between REFERENCE/ root and history/
- Remove asr_legacy.rs (dead code, replaced by asr.rs)
- Remove src/core/worker/ (duplicate JobWorker)
- Remove src/core/layers/ (empty directory)
- Remove 4 .bak files in src/
- Remove 7 dead private methods in worker/processor.rs
- Remove backup directory from git tracking
2026-05-04 01:31:21 +08:00

99 lines
3.0 KiB
Python

#!/opt/homebrew/bin/python3.11
"""
Ollama Local LLM Feasibility Test
職責:測試使用本地 Ollama (Qwen3) 執行語義分析的速度與品質。
"""
import json
import subprocess
import time
UUID = "384b0ff44aaaa1f1"
ASR_PATH = f"output/{UUID}/{UUID}.asr.json"
# 選用的模型 (根據用戶要求使用 Gemma 4)
# Gemma 4 (4B/12B depending on version, here using latest tag from list)
MODEL_NAME = "gemma4:latest"
def load_sample_text(n_segments=20):
"""從 ASR JSON 中載入一段文字作為測試素材"""
try:
with open(ASR_PATH, "r") as f:
data = json.load(f)
# 隨機取一段連續的對話
segments = data.get("segments", [])
start_idx = 50 # 取第 50 段附近
sample_segments = segments[start_idx : start_idx + n_segments]
text = " ".join([s.get("text", "") for s in sample_segments])
return text
except Exception as e:
print(f"Error loading ASR: {e}")
return "Sample text for testing."
def run_ollama_task(prompt, text):
"""呼叫 Ollama CLI 並測量時間"""
# 組合完整輸入
full_input = f"{prompt}\n\nContext:\n{text}"
start_time = time.time()
# 執行指令
result = subprocess.run(
["ollama", "run", MODEL_NAME, full_input],
capture_output=True,
text=True,
timeout=60, # 60 秒超時
)
end_time = time.time()
duration = end_time - start_time
return result.stdout.strip(), duration
def main():
print(f"🧪 Starting Ollama Feasibility Test with model: {MODEL_NAME}")
# 1. 載入素材
print("📂 Loading sample text...")
text = load_sample_text()
print(f" Loaded {len(text)} characters.")
# 2. 任務 A: 劇情摘要 (Summarization)
print("\n📝 Task A: Plot Summarization")
prompt_summary = "請用一句話總結以下電影對白內容,只輸出摘要,不要解釋。"
res_a, time_a = run_ollama_task(prompt_summary, text)
print(f" ⏱️ Time: {time_a:.2f}s")
print(f" 📄 Result: {res_a[:100]}...")
# 3. 任務 B: 情緒與意圖分析 (Sentiment & Intent)
print("\n🧠 Task B: Sentiment & Intent Analysis (JSON Output)")
prompt_sentiment = """
請分析以下電影對白的「情緒」與「意圖」,並以 JSON 格式輸出。
格式範例:{"mood": ["suspicious", "romantic"], "intent": "interrogation"}
不要輸出任何其他文字。
"""
res_b, time_b = run_ollama_task(prompt_sentiment, text)
print(f" ⏱️ Time: {time_b:.2f}s")
print(f" 📄 Result: {res_b}")
# 4. 總結評估
print("\n📊 Feasibility Assessment:")
total_time = time_a + time_b
print(f" Total Time for 2 tasks: {total_time:.2f}s")
if total_time < 30:
print(" ✅ PASS: 速度可接受,適合批次處理 (Batch Processing)。")
else:
print(" ⚠️ WARN: 速度較慢,建議使用更小的模型 (如 qwen2.5:3b) 或非同步處理。")
if __name__ == "__main__":
main()