Spaces:
Running
Running
update 3rd sample
Browse files- .gitignore +1 -0
- app.py +25 -5
- pipeline.py +273 -15
- sample/demo_chat_3.json +555 -0
- sample/experiment_results.json +0 -4
- sample/origins_dystopia.pdf +3 -0
- sample/v=g6eQMrA1_-I.srt.txt +355 -0
.gitignore
CHANGED
|
@@ -6,3 +6,4 @@ extract.py
|
|
| 6 |
update_demo.py
|
| 7 |
.env
|
| 8 |
test*
|
|
|
|
|
|
| 6 |
update_demo.py
|
| 7 |
.env
|
| 8 |
test*
|
| 9 |
+
archive/
|
app.py
CHANGED
|
@@ -42,6 +42,15 @@ def get_demo_2_html() -> str:
|
|
| 42 |
chat_data = []
|
| 43 |
return load_template_with_data("NtRf4icqE7o", chat_data)
|
| 44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
# Global store for custom simulations
|
| 46 |
custom_simulation_store = {
|
| 47 |
"video_id": "",
|
|
@@ -53,6 +62,8 @@ def play_simulation_selection(selection: str) -> str:
|
|
| 53 |
return get_demo_html()
|
| 54 |
elif selection == "Carl Sagan Demon-Haunted World (Demo)":
|
| 55 |
return get_demo_2_html()
|
|
|
|
|
|
|
| 56 |
elif selection == "My Custom Simulation":
|
| 57 |
if custom_simulation_store["video_id"] and custom_simulation_store["chat_data"]:
|
| 58 |
return load_template_with_data(custom_simulation_store["video_id"], custom_simulation_store["chat_data"])
|
|
@@ -60,7 +71,7 @@ def play_simulation_selection(selection: str) -> str:
|
|
| 60 |
return "<div style='color:#ff0055; text-align:center; padding:50px; font-family:sans-serif;'>No custom simulation has been generated yet. Please choose 'Configure Custom Solution'.</div>"
|
| 61 |
return ""
|
| 62 |
|
| 63 |
-
def handle_generation(yt_url: str, pdf_file, doc_text: str, srt_text: str, hf_token: str):
|
| 64 |
# 1. Validate YouTube Link
|
| 65 |
video_id = extract_youtube_video_id(yt_url)
|
| 66 |
if not video_id:
|
|
@@ -107,7 +118,8 @@ def handle_generation(yt_url: str, pdf_file, doc_text: str, srt_text: str, hf_to
|
|
| 107 |
doc_text=document_content,
|
| 108 |
doc_path=doc_path,
|
| 109 |
transcript_text=manual_transcript,
|
| 110 |
-
token=token
|
|
|
|
| 111 |
)
|
| 112 |
|
| 113 |
# Save to global store
|
|
@@ -126,7 +138,7 @@ def handle_generation(yt_url: str, pdf_file, doc_text: str, srt_text: str, hf_to
|
|
| 126 |
return (
|
| 127 |
new_html,
|
| 128 |
success_msg,
|
| 129 |
-
gr.update(choices=["Steve Jobs 1983 Speech (Demo)", "Carl Sagan Demon-Haunted World (Demo)", "My Custom Simulation"], value="My Custom Simulation")
|
| 130 |
)
|
| 131 |
except Exception as e:
|
| 132 |
error_msg = f"### ❌ Error running pipeline\n{e}"
|
|
@@ -136,6 +148,12 @@ def handle_generation(yt_url: str, pdf_file, doc_text: str, srt_text: str, hf_to
|
|
| 136 |
"Please copy and paste the video transcript or subtitles into the 'Manual Captions / Transcript Paste' "
|
| 137 |
"input box below to bypass the block."
|
| 138 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 139 |
return (
|
| 140 |
gr.update(),
|
| 141 |
error_msg,
|
|
@@ -254,7 +272,7 @@ with gr.Blocks(title="ReLiveStream - Interactive Replay", theme=custom_theme, cs
|
|
| 254 |
with gr.TabItem("🎭 Theater Mode"):
|
| 255 |
with gr.Row():
|
| 256 |
sim_selector = gr.Radio(
|
| 257 |
-
choices=["Steve Jobs 1983 Speech (Demo)", "Carl Sagan Demon-Haunted World (Demo)", "My Custom Simulation"],
|
| 258 |
value="Steve Jobs 1983 Speech (Demo)",
|
| 259 |
label="Choose Simulation to Play",
|
| 260 |
interactive=True
|
|
@@ -316,6 +334,7 @@ with gr.Blocks(title="ReLiveStream - Interactive Replay", theme=custom_theme, cs
|
|
| 316 |
)
|
| 317 |
|
| 318 |
generate_btn = gr.Button("🚀 Generate Simulation", variant="primary")
|
|
|
|
| 319 |
|
| 320 |
status_output = gr.Markdown(value="*Awaiting configuration...*")
|
| 321 |
|
|
@@ -327,7 +346,8 @@ with gr.Blocks(title="ReLiveStream - Interactive Replay", theme=custom_theme, cs
|
|
| 327 |
pdf_input,
|
| 328 |
fallback_text_input,
|
| 329 |
fallback_srt_input,
|
| 330 |
-
token_input
|
|
|
|
| 331 |
],
|
| 332 |
outputs=[
|
| 333 |
player_frame,
|
|
|
|
| 42 |
chat_data = []
|
| 43 |
return load_template_with_data("NtRf4icqE7o", chat_data)
|
| 44 |
|
| 45 |
+
def get_demo_3_html() -> str:
|
| 46 |
+
demo_json_path = os.path.join(os.path.dirname(__file__), "sample", "demo_chat_3.json")
|
| 47 |
+
if os.path.exists(demo_json_path):
|
| 48 |
+
with open(demo_json_path, "r", encoding="utf-8") as f:
|
| 49 |
+
chat_data = json.load(f)
|
| 50 |
+
else:
|
| 51 |
+
chat_data = []
|
| 52 |
+
return load_template_with_data("g6eQMrA1_-I", chat_data)
|
| 53 |
+
|
| 54 |
# Global store for custom simulations
|
| 55 |
custom_simulation_store = {
|
| 56 |
"video_id": "",
|
|
|
|
| 62 |
return get_demo_html()
|
| 63 |
elif selection == "Carl Sagan Demon-Haunted World (Demo)":
|
| 64 |
return get_demo_2_html()
|
| 65 |
+
elif selection == "Edward Teller - Schrödinger's Cat (Demo)":
|
| 66 |
+
return get_demo_3_html()
|
| 67 |
elif selection == "My Custom Simulation":
|
| 68 |
if custom_simulation_store["video_id"] and custom_simulation_store["chat_data"]:
|
| 69 |
return load_template_with_data(custom_simulation_store["video_id"], custom_simulation_store["chat_data"])
|
|
|
|
| 71 |
return "<div style='color:#ff0055; text-align:center; padding:50px; font-family:sans-serif;'>No custom simulation has been generated yet. Please choose 'Configure Custom Solution'.</div>"
|
| 72 |
return ""
|
| 73 |
|
| 74 |
+
def handle_generation(yt_url: str, pdf_file, doc_text: str, srt_text: str, hf_token: str, use_ocr: bool = False):
|
| 75 |
# 1. Validate YouTube Link
|
| 76 |
video_id = extract_youtube_video_id(yt_url)
|
| 77 |
if not video_id:
|
|
|
|
| 118 |
doc_text=document_content,
|
| 119 |
doc_path=doc_path,
|
| 120 |
transcript_text=manual_transcript,
|
| 121 |
+
token=token,
|
| 122 |
+
use_ocr=use_ocr
|
| 123 |
)
|
| 124 |
|
| 125 |
# Save to global store
|
|
|
|
| 138 |
return (
|
| 139 |
new_html,
|
| 140 |
success_msg,
|
| 141 |
+
gr.update(choices=["Steve Jobs 1983 Speech (Demo)", "Carl Sagan Demon-Haunted World (Demo)", "Edward Teller - Schrödinger's Cat (Demo)", "My Custom Simulation"], value="My Custom Simulation")
|
| 142 |
)
|
| 143 |
except Exception as e:
|
| 144 |
error_msg = f"### ❌ Error running pipeline\n{e}"
|
|
|
|
| 148 |
"Please copy and paste the video transcript or subtitles into the 'Manual Captions / Transcript Paste' "
|
| 149 |
"input box below to bypass the block."
|
| 150 |
)
|
| 151 |
+
elif "Content safety check failed" in str(e):
|
| 152 |
+
error_msg += (
|
| 153 |
+
"\n\n**Tip**: This combination of video and reference document was flagged by an "
|
| 154 |
+
"automated safety check before any chat was generated. Try a different reference "
|
| 155 |
+
"document or a different video."
|
| 156 |
+
)
|
| 157 |
return (
|
| 158 |
gr.update(),
|
| 159 |
error_msg,
|
|
|
|
| 272 |
with gr.TabItem("🎭 Theater Mode"):
|
| 273 |
with gr.Row():
|
| 274 |
sim_selector = gr.Radio(
|
| 275 |
+
choices=["Steve Jobs 1983 Speech (Demo)", "Carl Sagan Demon-Haunted World (Demo)", "Edward Teller - Schrödinger's Cat (Demo)", "My Custom Simulation"],
|
| 276 |
value="Steve Jobs 1983 Speech (Demo)",
|
| 277 |
label="Choose Simulation to Play",
|
| 278 |
interactive=True
|
|
|
|
| 334 |
)
|
| 335 |
|
| 336 |
generate_btn = gr.Button("🚀 Generate Simulation", variant="primary")
|
| 337 |
+
use_ocr_checkbox = gr.Checkbox(label="Enable OCR for PDFs (slow — use only for scanned/image-based PDFs)", value=False)
|
| 338 |
|
| 339 |
status_output = gr.Markdown(value="*Awaiting configuration...*")
|
| 340 |
|
|
|
|
| 346 |
pdf_input,
|
| 347 |
fallback_text_input,
|
| 348 |
fallback_srt_input,
|
| 349 |
+
token_input,
|
| 350 |
+
use_ocr_checkbox
|
| 351 |
],
|
| 352 |
outputs=[
|
| 353 |
player_frame,
|
pipeline.py
CHANGED
|
@@ -9,7 +9,15 @@ from concurrent.futures import ThreadPoolExecutor
|
|
| 9 |
|
| 10 |
DEFAULT_HF_TOKEN = os.environ.get("HF_TOKEN", "")
|
| 11 |
FLASH_MODEL = "openai/gpt-oss-120b:fastest"
|
| 12 |
-
PRO_MODEL = "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
|
| 14 |
def extract_youtube_video_id(url: str) -> str:
|
| 15 |
url = url.strip()
|
|
@@ -24,6 +32,38 @@ def extract_youtube_video_id(url: str) -> str:
|
|
| 24 |
return match.group(1)
|
| 25 |
return ""
|
| 26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
def format_timestamp(seconds: float) -> str:
|
| 28 |
mins = int(seconds // 60)
|
| 29 |
secs = int(seconds % 60)
|
|
@@ -195,6 +235,21 @@ def build_anchor_index(transcript_entries: list) -> list:
|
|
| 195 |
return anchors
|
| 196 |
|
| 197 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 198 |
def map_anchors_to_segments(anchors: list, segments: list) -> dict:
|
| 199 |
"""Assign each anchor to exactly one topic segment.
|
| 200 |
|
|
@@ -399,16 +454,29 @@ def stage_1a_segment_transcript(transcript_text: str, token: str) -> list:
|
|
| 399 |
return json.loads(cleaned)
|
| 400 |
|
| 401 |
# --- STAGE 2: Generate all draft comments (Pro model) ---
|
| 402 |
-
def stage_2_generate_all_drafts(segments: list, doc_text: str, token: str, anchor_map: dict = None,
|
|
|
|
|
|
|
| 403 |
"""Generate draft chat messages for all segments.
|
| 404 |
|
| 405 |
anchor_map: {seg_idx: [anchor_id, ...]} from map_anchors_to_segments.
|
| 406 |
all_anchors: full anchor list from build_anchor_index (for text lookup).
|
| 407 |
When both are provided, each segment's anchor list is injected into the
|
| 408 |
prompt so the model can pick a concrete timestamped moment per message.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 409 |
"""
|
| 410 |
# Build anchor lookup if available.
|
| 411 |
anchors_by_id = {a["anchor_id"]: a for a in (all_anchors or [])}
|
|
|
|
| 412 |
|
| 413 |
system_prompt = (
|
| 414 |
"You are simulating audience chat reactions for a livestream of an educational or historical video.\n"
|
|
@@ -427,8 +495,45 @@ def stage_2_generate_all_drafts(segments: list, doc_text: str, token: str, ancho
|
|
| 427 |
"- Maintain diverse livestream audience personas: some are experts reading deeply into philosophical tension, some take things entirely at face value, some only react emotionally or to video aesthetics, some use sarcasm/memes.\n\n"
|
| 428 |
"REPLY THREADING (optional):\n"
|
| 429 |
"- A message MAY include a 'reply_to' field containing another message's 'id' from the same or immediately preceding anchor.\n"
|
| 430 |
-
"- A reply must NEVER reference a message anchored to a later anchor than itself.\n
|
| 431 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 432 |
"{\n"
|
| 433 |
" \"_internal_logic\": \"How this segment relates to document sub-claims, or 'None' if off-topic.\",\n"
|
| 434 |
" \"messages\": [\n"
|
|
@@ -453,11 +558,13 @@ def stage_2_generate_all_drafts(segments: list, doc_text: str, token: str, ancho
|
|
| 453 |
for aid in anchor_ids:
|
| 454 |
a = anchors_by_id.get(aid)
|
| 455 |
if a:
|
| 456 |
-
|
|
|
|
| 457 |
if anchor_lines:
|
| 458 |
seg_header += "\nANCHOR MOMENTS (pick one per message):\n" + "\n".join(anchor_lines)
|
| 459 |
return seg_header
|
| 460 |
|
|
|
|
| 461 |
segments_text = "\n\n".join([format_segment(i, seg) for i, seg in enumerate(segments)])
|
| 462 |
|
| 463 |
user_prompt = (
|
|
@@ -489,7 +596,8 @@ def stage_3_stylize_segment(draft_data: dict, token: str) -> dict:
|
|
| 489 |
"2. PRESERVE USERNAMES: You MUST use the exact usernames provided in the draft. Do not invent new ones.\n"
|
| 490 |
"3. PRESERVE STRUCTURAL FIELDS: Keep 'id', 'anchor_id', and 'reply_to' (if present) on every message exactly as given. Do not rename, remove, or alter these fields.\n"
|
| 491 |
"4. ADD FLOURISH: Make them short, concise, and lively. Inject internet slang (e.g., lol, wtf, lmao, fr, no cap, ngl, bruh) and standard emotes (e.g., LUL, PogChamp, Kappa, MonkaS, BibleThump, 5Head, Pog, Pepega) where appropriate, but don't overdo it.\n"
|
| 492 |
-
"5. Avoid sounding like AI-generated summaries. Do not append emotes to every single message.\n
|
|
|
|
| 493 |
"Return ONLY the updated JSON with the exact same structure. Do not include markdown wraps."
|
| 494 |
)
|
| 495 |
user_prompt = f"Draft JSON:\n{json.dumps(draft_data)}"
|
|
@@ -502,6 +610,134 @@ def stage_3_stylize_segment(draft_data: dict, token: str) -> dict:
|
|
| 502 |
cleaned = clean_json_text(content)
|
| 503 |
return json.loads(cleaned)
|
| 504 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 505 |
# --- Parallel Tasks ---
|
| 506 |
def _fetch_and_segment_transcript(video_id: str, transcript_text: str, token: str) -> tuple:
|
| 507 |
"""Return (segments, raw_transcript) so the caller can build the anchor index."""
|
|
@@ -525,16 +761,16 @@ def _fetch_and_segment_transcript(video_id: str, transcript_text: str, token: st
|
|
| 525 |
segments = stage_1a_segment_transcript(transcript_text_formatted, token)
|
| 526 |
return segments, raw_transcript
|
| 527 |
|
| 528 |
-
def _extract_document_text(doc_text: str, doc_path: str) -> str:
|
| 529 |
if doc_path:
|
| 530 |
print(f"Extracting text from PDF: {doc_path}...")
|
| 531 |
-
return pymupdf4llm.to_markdown(doc_path)
|
| 532 |
if doc_text:
|
| 533 |
return doc_text
|
| 534 |
raise ValueError("Either doc_text or doc_path must be provided.")
|
| 535 |
|
| 536 |
# --- Full Pipeline Orchestration ---
|
| 537 |
-
def run_livestream_pipeline(video_id: str, doc_text: str = None, doc_path: str = None, transcript_text: str = None, token: str = None) -> list:
|
| 538 |
"""Run the full pipeline and return a flat list of messages sorted by displayTime.
|
| 539 |
|
| 540 |
Return value shape changed from list[segment_dict] to list[message_dict].
|
|
@@ -549,28 +785,45 @@ def run_livestream_pipeline(video_id: str, doc_text: str = None, doc_path: str =
|
|
| 549 |
"or provide it in the input box."
|
| 550 |
)
|
| 551 |
|
| 552 |
-
print("Starting parallel execution of Document Extraction
|
| 553 |
-
with ThreadPoolExecutor(max_workers=
|
| 554 |
-
fut_doc = executor.submit(_extract_document_text, doc_text, doc_path)
|
| 555 |
fut_seg = executor.submit(_fetch_and_segment_transcript, video_id, transcript_text, token)
|
|
|
|
| 556 |
|
| 557 |
extracted_doc_text = fut_doc.result()
|
| 558 |
segments, raw_transcript = fut_seg.result()
|
|
|
|
| 559 |
|
| 560 |
print(f"Segmented into {len(segments)} blocks.")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 561 |
|
| 562 |
# Build anchor index deterministically from raw transcript (no LLM call).
|
| 563 |
anchors = build_anchor_index(raw_transcript)
|
| 564 |
anchor_map = map_anchors_to_segments(anchors, segments)
|
| 565 |
anchors_by_id = {a["anchor_id"]: a for a in anchors}
|
| 566 |
valid_anchor_ids = set(anchors_by_id.keys())
|
| 567 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 568 |
|
| 569 |
# Stage 2: Single Pro model call for all drafting.
|
| 570 |
print("Stage 2: Generating draft comments for all segments (Pro model)...")
|
| 571 |
draft_segments = stage_2_generate_all_drafts(
|
| 572 |
segments, extracted_doc_text, token,
|
| 573 |
-
anchor_map=anchor_map, all_anchors=anchors
|
|
|
|
| 574 |
)
|
| 575 |
|
| 576 |
# Validate Stage 2 output before passing downstream.
|
|
@@ -591,11 +844,16 @@ def run_livestream_pipeline(video_id: str, doc_text: str = None, doc_path: str =
|
|
| 591 |
for fut in futures:
|
| 592 |
final_segments.append(fut.result())
|
| 593 |
|
| 594 |
-
# Flatten all messages
|
| 595 |
all_messages = []
|
| 596 |
for seg in final_segments:
|
| 597 |
all_messages.extend(seg.get("messages", []))
|
| 598 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 599 |
all_messages = compute_display_times(all_messages, anchors_by_id)
|
| 600 |
all_messages.sort(key=lambda m: m.get("displayTime", 0))
|
| 601 |
return all_messages
|
|
|
|
| 9 |
|
| 10 |
DEFAULT_HF_TOKEN = os.environ.get("HF_TOKEN", "")
|
| 11 |
FLASH_MODEL = "openai/gpt-oss-120b:fastest"
|
| 12 |
+
PRO_MODEL = "zai-org/GLM-4.7:fastest"
|
| 13 |
+
SAFETY_MODEL = "openai/gpt-oss-safeguard-20b"
|
| 14 |
+
|
| 15 |
+
# Anchors that start before this many seconds are considered part of the
|
| 16 |
+
# stream's "intro window": real viewers haven't processed any spoken content
|
| 17 |
+
# yet, so Stage 2 chat for these anchors should skew toward arrival/meta
|
| 18 |
+
# chatter rather than fully-formed topic takes. See select_intro_anchors()
|
| 19 |
+
# and the INTRO-WINDOW HANDLING clause in stage_2_generate_all_drafts().
|
| 20 |
+
INTRO_WINDOW_SECONDS = 10.0
|
| 21 |
|
| 22 |
def extract_youtube_video_id(url: str) -> str:
|
| 23 |
url = url.strip()
|
|
|
|
| 32 |
return match.group(1)
|
| 33 |
return ""
|
| 34 |
|
| 35 |
+
def fetch_video_metadata(video_id: str, timeout: float = 5.0) -> dict:
|
| 36 |
+
"""Fetch lightweight public metadata (title, channel/author name) for a
|
| 37 |
+
YouTube video via the no-auth oEmbed endpoint.
|
| 38 |
+
|
| 39 |
+
This is the source of the "video title / channel" context used by:
|
| 40 |
+
- stage_2_generate_all_drafts(): to optionally gate identity-aware
|
| 41 |
+
intro-window messages (e.g. recognizing a well-known speaker).
|
| 42 |
+
- check_content_safety(): as extra context for the pre-pipeline
|
| 43 |
+
safety gate.
|
| 44 |
+
|
| 45 |
+
Returns {"title": ..., "author_name": ...} on success, or {} if the
|
| 46 |
+
request fails for any reason (network error, invalid video id, 404,
|
| 47 |
+
etc.). A failure here is non-fatal — callers must treat missing/empty
|
| 48 |
+
metadata as "identity unknown" and behave conservatively (no guessing).
|
| 49 |
+
"""
|
| 50 |
+
try:
|
| 51 |
+
resp = requests.get(
|
| 52 |
+
"https://www.youtube.com/oembed",
|
| 53 |
+
params={"url": f"https://www.youtube.com/watch?v={video_id}", "format": "json"},
|
| 54 |
+
timeout=timeout,
|
| 55 |
+
)
|
| 56 |
+
resp.raise_for_status()
|
| 57 |
+
data = resp.json()
|
| 58 |
+
return {
|
| 59 |
+
"title": data.get("title", "") or "",
|
| 60 |
+
"author_name": data.get("author_name", "") or "",
|
| 61 |
+
}
|
| 62 |
+
except Exception as e:
|
| 63 |
+
print(f"oEmbed metadata fetch failed for video '{video_id}': {e}")
|
| 64 |
+
return {}
|
| 65 |
+
|
| 66 |
+
|
| 67 |
def format_timestamp(seconds: float) -> str:
|
| 68 |
mins = int(seconds // 60)
|
| 69 |
secs = int(seconds % 60)
|
|
|
|
| 235 |
return anchors
|
| 236 |
|
| 237 |
|
| 238 |
+
def select_intro_anchors(anchors: list, window_seconds: float = INTRO_WINDOW_SECONDS) -> set:
|
| 239 |
+
"""Return the set of anchor_ids whose start falls within the stream's
|
| 240 |
+
"intro window" (the first `window_seconds` seconds of the video).
|
| 241 |
+
|
| 242 |
+
Pure and deterministic: anchor-list-in, anchor-id-set-out. No LLM calls,
|
| 243 |
+
no I/O. At the default 5-10s anchor size from build_anchor_index(), a
|
| 244 |
+
20s window typically covers the first 2-5 anchors.
|
| 245 |
+
|
| 246 |
+
Used by stage_2_generate_all_drafts() to bias early chat toward
|
| 247 |
+
arrival/meta chatter instead of fully-formed topic reactions, since real
|
| 248 |
+
viewers haven't processed any spoken content in the first ~20 seconds.
|
| 249 |
+
"""
|
| 250 |
+
return {a["anchor_id"] for a in anchors if float(a["start"]) < window_seconds}
|
| 251 |
+
|
| 252 |
+
|
| 253 |
def map_anchors_to_segments(anchors: list, segments: list) -> dict:
|
| 254 |
"""Assign each anchor to exactly one topic segment.
|
| 255 |
|
|
|
|
| 454 |
return json.loads(cleaned)
|
| 455 |
|
| 456 |
# --- STAGE 2: Generate all draft comments (Pro model) ---
|
| 457 |
+
def stage_2_generate_all_drafts(segments: list, doc_text: str, token: str, anchor_map: dict = None,
|
| 458 |
+
all_anchors: list = None, intro_anchor_ids: set = None,
|
| 459 |
+
video_metadata: dict = None) -> list:
|
| 460 |
"""Generate draft chat messages for all segments.
|
| 461 |
|
| 462 |
anchor_map: {seg_idx: [anchor_id, ...]} from map_anchors_to_segments.
|
| 463 |
all_anchors: full anchor list from build_anchor_index (for text lookup).
|
| 464 |
When both are provided, each segment's anchor list is injected into the
|
| 465 |
prompt so the model can pick a concrete timestamped moment per message.
|
| 466 |
+
|
| 467 |
+
intro_anchor_ids: set of anchor_ids from select_intro_anchors(), i.e.
|
| 468 |
+
anchors within the stream's first ~20s. These are tagged [INTRO] in the
|
| 469 |
+
anchor lists and given special handling instructions (see
|
| 470 |
+
INTRO-WINDOW HANDLING below).
|
| 471 |
+
|
| 472 |
+
video_metadata: optional {"title": ..., "author_name": ...} from
|
| 473 |
+
fetch_video_metadata(). When present with a non-empty title/channel, the
|
| 474 |
+
model may (optionally) generate up to 1-2 identity-aware intro messages
|
| 475 |
+
if the speaker's identity is unambiguous; otherwise it must not guess.
|
| 476 |
"""
|
| 477 |
# Build anchor lookup if available.
|
| 478 |
anchors_by_id = {a["anchor_id"]: a for a in (all_anchors or [])}
|
| 479 |
+
intro_anchor_ids = intro_anchor_ids or set()
|
| 480 |
|
| 481 |
system_prompt = (
|
| 482 |
"You are simulating audience chat reactions for a livestream of an educational or historical video.\n"
|
|
|
|
| 495 |
"- Maintain diverse livestream audience personas: some are experts reading deeply into philosophical tension, some take things entirely at face value, some only react emotionally or to video aesthetics, some use sarcasm/memes.\n\n"
|
| 496 |
"REPLY THREADING (optional):\n"
|
| 497 |
"- A message MAY include a 'reply_to' field containing another message's 'id' from the same or immediately preceding anchor.\n"
|
| 498 |
+
"- A reply must NEVER reference a message anchored to a later anchor than itself.\n"
|
| 499 |
+
)
|
| 500 |
+
|
| 501 |
+
if intro_anchor_ids:
|
| 502 |
+
title = (video_metadata or {}).get("title", "").strip()
|
| 503 |
+
author = (video_metadata or {}).get("author_name", "").strip()
|
| 504 |
+
|
| 505 |
+
if title or author:
|
| 506 |
+
channel_part = f" from channel \"{author}\"" if author else ""
|
| 507 |
+
identity_clause = (
|
| 508 |
+
f"- IDENTITY-AWARE INTRO MESSAGES (OPTIONAL): The video title is \"{title or 'unknown'}\"{channel_part}. "
|
| 509 |
+
"If — and only if — this title, channel, or the reference document make the speaker's "
|
| 510 |
+
"identity or significance unambiguous, you MAY include up to 1-2 [INTRO]-anchored "
|
| 511 |
+
"messages reacting to who the speaker is or why they matter (e.g. recognizing a "
|
| 512 |
+
"well-known figure). Do not guess or assert identity beyond what these sources support.\n"
|
| 513 |
+
)
|
| 514 |
+
else:
|
| 515 |
+
identity_clause = (
|
| 516 |
+
"- IDENTITY-AWARE INTRO MESSAGES: No reliable video title/channel metadata is available. "
|
| 517 |
+
"Do NOT include any [INTRO]-anchored messages that guess or assert who the speaker is — "
|
| 518 |
+
"keep all [INTRO] messages generic arrival/meta chatter.\n"
|
| 519 |
+
)
|
| 520 |
+
|
| 521 |
+
system_prompt += (
|
| 522 |
+
"\nINTRO-WINDOW HANDLING:\n"
|
| 523 |
+
"- Anchors marked [INTRO] in the ANCHOR MOMENTS lists below fall within the stream's first "
|
| 524 |
+
"~20 seconds. Real viewers haven't processed any spoken content yet at this point — they're "
|
| 525 |
+
"still arriving, reading the title, or reacting to who/what is on screen.\n"
|
| 526 |
+
"- For messages anchored to an [INTRO] anchor, 80-90% should be arrival/meta chatter — the "
|
| 527 |
+
"stream just starting, 'is this live', reactions to the speaker's appearance, audio/video "
|
| 528 |
+
"quality, or production era, 'lol first', generic anticipation, emotes — NOT engagement "
|
| 529 |
+
"with the spoken content. This OVERRIDES the normal 50% off-topic quota for these messages.\n"
|
| 530 |
+
"- Set '_internal_logic' to \"None\" for any segment whose messages are dominated by "
|
| 531 |
+
"[INTRO] anchors, regardless of any document tie.\n"
|
| 532 |
+
f"{identity_clause}"
|
| 533 |
+
)
|
| 534 |
+
|
| 535 |
+
system_prompt += (
|
| 536 |
+
"\nFORMAT: Return a JSON list of objects, one per segment:\n"
|
| 537 |
"{\n"
|
| 538 |
" \"_internal_logic\": \"How this segment relates to document sub-claims, or 'None' if off-topic.\",\n"
|
| 539 |
" \"messages\": [\n"
|
|
|
|
| 558 |
for aid in anchor_ids:
|
| 559 |
a = anchors_by_id.get(aid)
|
| 560 |
if a:
|
| 561 |
+
intro_tag = " [INTRO]" if aid in intro_anchor_ids else ""
|
| 562 |
+
anchor_lines.append(f" [{aid}]{intro_tag} {a['start']:.1f}s: {a['text'][:80]}")
|
| 563 |
if anchor_lines:
|
| 564 |
seg_header += "\nANCHOR MOMENTS (pick one per message):\n" + "\n".join(anchor_lines)
|
| 565 |
return seg_header
|
| 566 |
|
| 567 |
+
|
| 568 |
segments_text = "\n\n".join([format_segment(i, seg) for i, seg in enumerate(segments)])
|
| 569 |
|
| 570 |
user_prompt = (
|
|
|
|
| 596 |
"2. PRESERVE USERNAMES: You MUST use the exact usernames provided in the draft. Do not invent new ones.\n"
|
| 597 |
"3. PRESERVE STRUCTURAL FIELDS: Keep 'id', 'anchor_id', and 'reply_to' (if present) on every message exactly as given. Do not rename, remove, or alter these fields.\n"
|
| 598 |
"4. ADD FLOURISH: Make them short, concise, and lively. Inject internet slang (e.g., lol, wtf, lmao, fr, no cap, ngl, bruh) and standard emotes (e.g., LUL, PogChamp, Kappa, MonkaS, BibleThump, 5Head, Pog, Pepega) where appropriate, but don't overdo it.\n"
|
| 599 |
+
"5. Avoid sounding like AI-generated summaries. Do not append emotes to every single message.\n"
|
| 600 |
+
"6. SAFETY PASS: If any message crosses from edgy/sarcastic banter into harassment, slurs, hate speech, or denigration of real people or groups, rewrite it to keep the same persona and sentiment but remove the harmful element (e.g. turn a slur-based insult into a milder sarcastic jab). Never introduce new harmful content. If a message truly cannot be salvaged this way, replace its 'text' with a generic on-theme reaction instead.\n\n"
|
| 601 |
"Return ONLY the updated JSON with the exact same structure. Do not include markdown wraps."
|
| 602 |
)
|
| 603 |
user_prompt = f"Draft JSON:\n{json.dumps(draft_data)}"
|
|
|
|
| 610 |
cleaned = clean_json_text(content)
|
| 611 |
return json.loads(cleaned)
|
| 612 |
|
| 613 |
+
# --- Safety gates ---
|
| 614 |
+
def check_content_safety(doc_text: str, video_metadata: dict, token: str) -> tuple:
|
| 615 |
+
"""Pre-pipeline hard-stop gate (runs before Stage 2's expensive Pro call).
|
| 616 |
+
|
| 617 |
+
Classifies whether the reference document — combined with whatever video
|
| 618 |
+
title/channel context is available — is appropriate source material for
|
| 619 |
+
a simulated livestream chat. Returns (is_safe: bool, reason: str).
|
| 620 |
+
|
| 621 |
+
Intentionally coarse: a single Flash-model classification call, not a
|
| 622 |
+
per-message filter (see final_safety_scan() for the post-generation
|
| 623 |
+
pass). Exists to hard-stop on inputs whose "natural" simulated chat would
|
| 624 |
+
likely be hate speech, harassment of real people/groups, glorification of
|
| 625 |
+
or instructions for violence/self-harm, or sexual content involving
|
| 626 |
+
minors. General controversial-but-legitimate material (politics, science
|
| 627 |
+
controversies, history of atrocities discussed academically, etc.) is
|
| 628 |
+
SAFE and should pass.
|
| 629 |
+
|
| 630 |
+
Design note: fails OPEN (treats classifier errors as "safe") so a
|
| 631 |
+
transient API hiccup doesn't block legitimate users. The decision (or
|
| 632 |
+
failure) is always logged.
|
| 633 |
+
"""
|
| 634 |
+
title = (video_metadata or {}).get("title", "").strip()
|
| 635 |
+
author = (video_metadata or {}).get("author_name", "").strip()
|
| 636 |
+
|
| 637 |
+
system_prompt = (
|
| 638 |
+
"You are a content-safety gate for an app that generates SIMULATED livestream chat "
|
| 639 |
+
"reactions to educational/informational videos, based on a reference document.\n"
|
| 640 |
+
"Given a video's title/channel (if known) and an excerpt of the reference document, "
|
| 641 |
+
"decide whether this is appropriate source material for that simulation.\n\n"
|
| 642 |
+
"Mark unsafe ONLY if the natural simulated chat reactions to this material would likely "
|
| 643 |
+
"include hate speech, harassment of real people or groups, glorification of or "
|
| 644 |
+
"instructions for violence or self-harm, or sexual content involving minors. General "
|
| 645 |
+
"controversial-but-legitimate topics (politics, policy debates, science controversies, "
|
| 646 |
+
"history of atrocities discussed academically, etc.) are SAFE.\n\n"
|
| 647 |
+
"Respond with ONLY a JSON object: {\"safe\": true|false, \"reason\": \"<one short sentence>\"}. "
|
| 648 |
+
"Do not include markdown wraps or other text."
|
| 649 |
+
)
|
| 650 |
+
excerpt = (doc_text or "")[:4000]
|
| 651 |
+
user_prompt = (
|
| 652 |
+
f"Video title: {title or '(unknown)'}\n"
|
| 653 |
+
f"Channel: {author or '(unknown)'}\n\n"
|
| 654 |
+
f"Reference document excerpt:\n{excerpt}"
|
| 655 |
+
)
|
| 656 |
+
|
| 657 |
+
try:
|
| 658 |
+
content = call_hf_router(SAFETY_MODEL, [
|
| 659 |
+
{"role": "system", "content": system_prompt},
|
| 660 |
+
{"role": "user", "content": user_prompt},
|
| 661 |
+
], token)
|
| 662 |
+
result = json.loads(clean_json_text(content))
|
| 663 |
+
is_safe = bool(result.get("safe", True))
|
| 664 |
+
reason = result.get("reason", "")
|
| 665 |
+
if not is_safe:
|
| 666 |
+
print(f"Content safety gate REJECTED input: {reason}")
|
| 667 |
+
return is_safe, reason
|
| 668 |
+
except Exception as e:
|
| 669 |
+
print(f"Content safety gate failed to run ({e}); failing open (treating as safe).")
|
| 670 |
+
return True, ""
|
| 671 |
+
|
| 672 |
+
|
| 673 |
+
def final_safety_scan(messages: list, token: str) -> list:
|
| 674 |
+
"""Aggregate post-generation moderation pass over all flattened,
|
| 675 |
+
stylized messages.
|
| 676 |
+
|
| 677 |
+
Stage 3 already asks the Flash model to soften individual messages (see
|
| 678 |
+
its SAFETY PASS instruction), but that runs per-segment and can miss
|
| 679 |
+
patterns only visible across the whole chat (e.g. repeated harassment of
|
| 680 |
+
the same target spread across segments). This is one additional Flash
|
| 681 |
+
call over the full message list as a second net.
|
| 682 |
+
|
| 683 |
+
For each message, the model returns one of:
|
| 684 |
+
- "keep" -> message is left unchanged.
|
| 685 |
+
- "replace" -> message['text'] is swapped for the supplied 'replacement'
|
| 686 |
+
(same persona/sentiment, harmful element removed).
|
| 687 |
+
- "drop" -> message is removed from the output entirely.
|
| 688 |
+
|
| 689 |
+
Fails OPEN (returns `messages` unchanged) on any classifier or parsing
|
| 690 |
+
error, since this is a best-effort secondary net rather than the primary
|
| 691 |
+
gate (see check_content_safety for the pre-pipeline hard stop).
|
| 692 |
+
"""
|
| 693 |
+
if not messages:
|
| 694 |
+
return messages
|
| 695 |
+
|
| 696 |
+
system_prompt = (
|
| 697 |
+
"You are a final moderation pass for SIMULATED livestream chat messages (fictional "
|
| 698 |
+
"audience reactions, not real users).\n"
|
| 699 |
+
"For EVERY message below, decide one action:\n"
|
| 700 |
+
"- \"keep\": fine as-is. Edgy/sarcastic humor, strong opinions, and in-group banter are fine.\n"
|
| 701 |
+
"- \"replace\": the message crosses into harassment, slurs, hate speech, or denigration of "
|
| 702 |
+
"real people or groups. Provide a 'replacement' string with the same persona/sentiment but "
|
| 703 |
+
"with the harmful element removed.\n"
|
| 704 |
+
"- \"drop\": the message is irredeemable and should be removed entirely.\n\n"
|
| 705 |
+
"Return ONLY a JSON list, one entry per input message, in any order:\n"
|
| 706 |
+
"[{\"id\": \"<id>\", \"action\": \"keep|replace|drop\", \"replacement\": \"<only if action=replace>\"}]\n"
|
| 707 |
+
"Do not include markdown wraps or other text."
|
| 708 |
+
)
|
| 709 |
+
payload = [{"id": m.get("id"), "text": m.get("text", "")} for m in messages]
|
| 710 |
+
user_prompt = f"Messages:\n{json.dumps(payload, ensure_ascii=False)}"
|
| 711 |
+
|
| 712 |
+
try:
|
| 713 |
+
content = call_hf_router(SAFETY_MODEL, [
|
| 714 |
+
{"role": "system", "content": system_prompt},
|
| 715 |
+
{"role": "user", "content": user_prompt},
|
| 716 |
+
], token)
|
| 717 |
+
decisions = json.loads(clean_json_text(content))
|
| 718 |
+
decisions_by_id = {d.get("id"): d for d in decisions if isinstance(d, dict)}
|
| 719 |
+
except Exception as e:
|
| 720 |
+
print(f"Final safety scan failed to run ({e}); failing open (returning messages unchanged).")
|
| 721 |
+
return messages
|
| 722 |
+
|
| 723 |
+
result = []
|
| 724 |
+
dropped, replaced = 0, 0
|
| 725 |
+
for msg in messages:
|
| 726 |
+
decision = decisions_by_id.get(msg.get("id"))
|
| 727 |
+
action = (decision or {}).get("action", "keep")
|
| 728 |
+
if action == "drop":
|
| 729 |
+
dropped += 1
|
| 730 |
+
continue
|
| 731 |
+
if action == "replace" and decision.get("replacement"):
|
| 732 |
+
msg = dict(msg)
|
| 733 |
+
msg["text"] = decision["replacement"]
|
| 734 |
+
replaced += 1
|
| 735 |
+
result.append(msg)
|
| 736 |
+
|
| 737 |
+
if dropped or replaced:
|
| 738 |
+
print(f"Final safety scan: dropped {dropped}, replaced {replaced} of {len(messages)} messages.")
|
| 739 |
+
return result
|
| 740 |
+
|
| 741 |
# --- Parallel Tasks ---
|
| 742 |
def _fetch_and_segment_transcript(video_id: str, transcript_text: str, token: str) -> tuple:
|
| 743 |
"""Return (segments, raw_transcript) so the caller can build the anchor index."""
|
|
|
|
| 761 |
segments = stage_1a_segment_transcript(transcript_text_formatted, token)
|
| 762 |
return segments, raw_transcript
|
| 763 |
|
| 764 |
+
def _extract_document_text(doc_text: str, doc_path: str, use_ocr: bool = False) -> str:
|
| 765 |
if doc_path:
|
| 766 |
print(f"Extracting text from PDF: {doc_path}...")
|
| 767 |
+
return pymupdf4llm.to_markdown(doc_path, use_ocr=use_ocr)
|
| 768 |
if doc_text:
|
| 769 |
return doc_text
|
| 770 |
raise ValueError("Either doc_text or doc_path must be provided.")
|
| 771 |
|
| 772 |
# --- Full Pipeline Orchestration ---
|
| 773 |
+
def run_livestream_pipeline(video_id: str, doc_text: str = None, doc_path: str = None, transcript_text: str = None, token: str = None, use_ocr: bool = False) -> list:
|
| 774 |
"""Run the full pipeline and return a flat list of messages sorted by displayTime.
|
| 775 |
|
| 776 |
Return value shape changed from list[segment_dict] to list[message_dict].
|
|
|
|
| 785 |
"or provide it in the input box."
|
| 786 |
)
|
| 787 |
|
| 788 |
+
print("Starting parallel execution of Document Extraction, Transcript Segmentation, and Metadata Fetch...")
|
| 789 |
+
with ThreadPoolExecutor(max_workers=3) as executor:
|
| 790 |
+
fut_doc = executor.submit(_extract_document_text, doc_text, doc_path, use_ocr)
|
| 791 |
fut_seg = executor.submit(_fetch_and_segment_transcript, video_id, transcript_text, token)
|
| 792 |
+
fut_meta = executor.submit(fetch_video_metadata, video_id)
|
| 793 |
|
| 794 |
extracted_doc_text = fut_doc.result()
|
| 795 |
segments, raw_transcript = fut_seg.result()
|
| 796 |
+
video_metadata = fut_meta.result()
|
| 797 |
|
| 798 |
print(f"Segmented into {len(segments)} blocks.")
|
| 799 |
+
if video_metadata:
|
| 800 |
+
print(f"Video metadata: title={video_metadata.get('title')!r}, channel={video_metadata.get('author_name')!r}")
|
| 801 |
+
else:
|
| 802 |
+
print("Video metadata unavailable (oEmbed fetch failed) — identity-aware intro messages disabled.")
|
| 803 |
|
| 804 |
# Build anchor index deterministically from raw transcript (no LLM call).
|
| 805 |
anchors = build_anchor_index(raw_transcript)
|
| 806 |
anchor_map = map_anchors_to_segments(anchors, segments)
|
| 807 |
anchors_by_id = {a["anchor_id"]: a for a in anchors}
|
| 808 |
valid_anchor_ids = set(anchors_by_id.keys())
|
| 809 |
+
intro_anchor_ids = select_intro_anchors(anchors)
|
| 810 |
+
print(f"Built anchor index: {len(anchors)} anchors ({len(intro_anchor_ids)} in the intro window).")
|
| 811 |
+
|
| 812 |
+
# Hard stop: gate on content safety before the expensive Stage 2/3 calls.
|
| 813 |
+
is_safe, reason = check_content_safety(extracted_doc_text, video_metadata, token)
|
| 814 |
+
if not is_safe:
|
| 815 |
+
raise ValueError(
|
| 816 |
+
f"Content safety check failed: {reason} "
|
| 817 |
+
"This input was flagged as unsuitable for simulated chat generation. "
|
| 818 |
+
"Please choose a different reference document or video."
|
| 819 |
+
)
|
| 820 |
|
| 821 |
# Stage 2: Single Pro model call for all drafting.
|
| 822 |
print("Stage 2: Generating draft comments for all segments (Pro model)...")
|
| 823 |
draft_segments = stage_2_generate_all_drafts(
|
| 824 |
segments, extracted_doc_text, token,
|
| 825 |
+
anchor_map=anchor_map, all_anchors=anchors,
|
| 826 |
+
intro_anchor_ids=intro_anchor_ids, video_metadata=video_metadata
|
| 827 |
)
|
| 828 |
|
| 829 |
# Validate Stage 2 output before passing downstream.
|
|
|
|
| 844 |
for fut in futures:
|
| 845 |
final_segments.append(fut.result())
|
| 846 |
|
| 847 |
+
# Flatten all messages.
|
| 848 |
all_messages = []
|
| 849 |
for seg in final_segments:
|
| 850 |
all_messages.extend(seg.get("messages", []))
|
| 851 |
|
| 852 |
+
# Final aggregate moderation pass (second net, after Stage 3's per-segment pass).
|
| 853 |
+
print("Running final safety scan over all messages...")
|
| 854 |
+
all_messages = final_safety_scan(all_messages, token)
|
| 855 |
+
|
| 856 |
+
# Compute displayTime, sort numerically.
|
| 857 |
all_messages = compute_display_times(all_messages, anchors_by_id)
|
| 858 |
all_messages.sort(key=lambda m: m.get("displayTime", 0))
|
| 859 |
return all_messages
|
sample/demo_chat_3.json
ADDED
|
@@ -0,0 +1,555 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"id": "m1",
|
| 4 |
+
"username": "StreamWatcher99",
|
| 5 |
+
"text": "Is this live? Just hopped in lol",
|
| 6 |
+
"anchor_id": "anc_0",
|
| 7 |
+
"displayTime": 2.2074647591250813
|
| 8 |
+
},
|
| 9 |
+
{
|
| 10 |
+
"id": "m4",
|
| 11 |
+
"username": "FirstChat",
|
| 12 |
+
"text": "First! 🙌",
|
| 13 |
+
"anchor_id": "anc_0",
|
| 14 |
+
"displayTime": 3.8615008096566235
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"id": "m5",
|
| 18 |
+
"username": "AudioPhile",
|
| 19 |
+
"text": "Audio a bit low, but I can still hear him. 🔊",
|
| 20 |
+
"anchor_id": "anc_0",
|
| 21 |
+
"displayTime": 4.952689211895522
|
| 22 |
+
},
|
| 23 |
+
{
|
| 24 |
+
"id": "m11",
|
| 25 |
+
"username": "HistoryBuff",
|
| 26 |
+
"text": "These old interviews are gold. Teller's a legend. 🔥",
|
| 27 |
+
"anchor_id": "anc_0",
|
| 28 |
+
"displayTime": 5.610363084328347
|
| 29 |
+
},
|
| 30 |
+
{
|
| 31 |
+
"id": "m3",
|
| 32 |
+
"username": "PhysicsNerd",
|
| 33 |
+
"text": "Wait, is that Edward Teller? The H‑bomb dad? 🤔",
|
| 34 |
+
"anchor_id": "anc_0",
|
| 35 |
+
"displayTime": 5.652076458733862
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"id": "m6",
|
| 39 |
+
"username": "CasualViewer",
|
| 40 |
+
"text": "What's this about? Schrödinger's cat? 🤨",
|
| 41 |
+
"anchor_id": "anc_0",
|
| 42 |
+
"displayTime": 6.550031615836379
|
| 43 |
+
},
|
| 44 |
+
{
|
| 45 |
+
"id": "m2",
|
| 46 |
+
"username": "VHS_Retro",
|
| 47 |
+
"text": "Love the prod quality on these Web of Stories vids. Pure history 😎",
|
| 48 |
+
"anchor_id": "anc_0",
|
| 49 |
+
"displayTime": 6.783886063233614
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"id": "m8",
|
| 53 |
+
"username": "MemeLord",
|
| 54 |
+
"text": "Let's gooooooo 🚀",
|
| 55 |
+
"anchor_id": "anc_0",
|
| 56 |
+
"displayTime": 6.879743619024504
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"id": "m7",
|
| 60 |
+
"username": "ScienceFan",
|
| 61 |
+
"text": "Here for the physics lecture, fr",
|
| 62 |
+
"anchor_id": "anc_0",
|
| 63 |
+
"displayTime": 7.378051834211266
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"id": "m9",
|
| 67 |
+
"username": "HelloWorld",
|
| 68 |
+
"text": "Hey everyone! 👋",
|
| 69 |
+
"anchor_id": "anc_1",
|
| 70 |
+
"displayTime": 14.085436232678695
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"id": "m10",
|
| 74 |
+
"username": "QuantumCat",
|
| 75 |
+
"text": "Is he talking about causality? LMAO",
|
| 76 |
+
"anchor_id": "anc_1",
|
| 77 |
+
"displayTime": 15.510404669893699
|
| 78 |
+
},
|
| 79 |
+
{
|
| 80 |
+
"id": "m12",
|
| 81 |
+
"username": "QuantumCat",
|
| 82 |
+
"text": "Ah yeah, predicting probs—core of QM. 🤓",
|
| 83 |
+
"anchor_id": "anc_2",
|
| 84 |
+
"displayTime": 32.203712295055254
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"id": "m13",
|
| 88 |
+
"username": "PhysicsNerd",
|
| 89 |
+
"text": "Heisenberg's drop is right there. 🔥",
|
| 90 |
+
"anchor_id": "anc_2",
|
| 91 |
+
"displayTime": 32.53030272686051
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"id": "m19",
|
| 95 |
+
"username": "ScienceFan",
|
| 96 |
+
"text": "Basics of the uncertainty principle, fam. 📚",
|
| 97 |
+
"anchor_id": "anc_2",
|
| 98 |
+
"displayTime": 34.717773293009756
|
| 99 |
+
},
|
| 100 |
+
{
|
| 101 |
+
"id": "m15",
|
| 102 |
+
"username": "BreakingBadFan",
|
| 103 |
+
"text": "Say my name... Heisenberg. 😎",
|
| 104 |
+
"anchor_id": "anc_2",
|
| 105 |
+
"displayTime": 35.77387719040716
|
| 106 |
+
},
|
| 107 |
+
{
|
| 108 |
+
"id": "m14",
|
| 109 |
+
"username": "ConfusedStudent",
|
| 110 |
+
"text": "So we can't know the future, just probs? 🤔",
|
| 111 |
+
"anchor_id": "anc_2",
|
| 112 |
+
"displayTime": 35.978238098223045
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"id": "m20",
|
| 116 |
+
"username": "MemeLord",
|
| 117 |
+
"text": "Future prediction loading… 99% error. LUL",
|
| 118 |
+
"anchor_id": "anc_2",
|
| 119 |
+
"displayTime": 37.431327269412876
|
| 120 |
+
},
|
| 121 |
+
{
|
| 122 |
+
"id": "m17",
|
| 123 |
+
"username": "ParticleMan",
|
| 124 |
+
"text": "It's here now… where will it end up? 🤷♂️",
|
| 125 |
+
"anchor_id": "anc_3",
|
| 126 |
+
"displayTime": 54.496107360531994
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"id": "m16",
|
| 130 |
+
"username": "DeepThinker",
|
| 131 |
+
"text": "Can't predict the future with certainty—that's the gist. 🤯",
|
| 132 |
+
"anchor_id": "anc_3",
|
| 133 |
+
"displayTime": 55.250517278748056
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"id": "m21",
|
| 137 |
+
"username": "AliceInWonderland",
|
| 138 |
+
"text": "Curiouser and curiouser... 🐰",
|
| 139 |
+
"anchor_id": "anc_3",
|
| 140 |
+
"displayTime": 56.46035228415802
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"id": "m18",
|
| 144 |
+
"username": "SkepticalGuy",
|
| 145 |
+
"text": "Teller's accent is thick, I'm lost. 😂",
|
| 146 |
+
"anchor_id": "anc_3",
|
| 147 |
+
"displayTime": 57.39435757884394
|
| 148 |
+
},
|
| 149 |
+
{
|
| 150 |
+
"id": "m29",
|
| 151 |
+
"username": "ScienceFan",
|
| 152 |
+
"text": "He's really breaking it down. LMAO",
|
| 153 |
+
"anchor_id": "anc_4",
|
| 154 |
+
"displayTime": 63.99017828598776
|
| 155 |
+
},
|
| 156 |
+
{
|
| 157 |
+
"id": "m26",
|
| 158 |
+
"username": "QuantumMechanic",
|
| 159 |
+
"text": "The formalism of QM is tricky. fr",
|
| 160 |
+
"anchor_id": "anc_5",
|
| 161 |
+
"displayTime": 70.46142235680841
|
| 162 |
+
},
|
| 163 |
+
{
|
| 164 |
+
"id": "m22",
|
| 165 |
+
"username": "WaveFunction",
|
| 166 |
+
"text": "Here we go, wave‑particle duality! LUL",
|
| 167 |
+
"anchor_id": "anc_5",
|
| 168 |
+
"displayTime": 73.62400399762714
|
| 169 |
+
},
|
| 170 |
+
{
|
| 171 |
+
"id": "m28",
|
| 172 |
+
"username": "ObserverEffect",
|
| 173 |
+
"text": "Because it behaves as a wave in some cases. Pog",
|
| 174 |
+
"anchor_id": "anc_5",
|
| 175 |
+
"displayTime": 74.15840495788444
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"id": "m27",
|
| 179 |
+
"username": "Realist",
|
| 180 |
+
"text": "It's hard to accept you can't measure both. bruh",
|
| 181 |
+
"anchor_id": "anc_6",
|
| 182 |
+
"displayTime": 77.83098472417115
|
| 183 |
+
},
|
| 184 |
+
{
|
| 185 |
+
"id": "m23",
|
| 186 |
+
"username": "PhysicsNerd",
|
| 187 |
+
"text": "Position & momentum at the same time? Impossible! wtf",
|
| 188 |
+
"anchor_id": "anc_7",
|
| 189 |
+
"displayTime": 89.17121028304632
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"id": "m25",
|
| 193 |
+
"username": "HungarianHistory",
|
| 194 |
+
"text": "“Two of my Hungarian friends” – I wonder who? Wigner? Szilard? 🤔",
|
| 195 |
+
"anchor_id": "anc_8",
|
| 196 |
+
"displayTime": 97.82007899304273
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"id": "m24",
|
| 200 |
+
"username": "EinsteinFan",
|
| 201 |
+
"text": "Einstein wasn't happy about it, as expected. no cap",
|
| 202 |
+
"anchor_id": "anc_8",
|
| 203 |
+
"displayTime": 98.22377535076079
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"id": "m30",
|
| 207 |
+
"username": "LOLPhysics",
|
| 208 |
+
"text": "Einstein: God does not play dice. Teller: Hold my beer. 😂",
|
| 209 |
+
"anchor_id": "anc_8",
|
| 210 |
+
"displayTime": 99.03909315493941
|
| 211 |
+
},
|
| 212 |
+
{
|
| 213 |
+
"id": "m31",
|
| 214 |
+
"username": "DeepThinker",
|
| 215 |
+
"text": "The idea wasn't generally accepted for a long time. MonkaS",
|
| 216 |
+
"anchor_id": "anc_8",
|
| 217 |
+
"displayTime": 100.0492410634135
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"id": "m40",
|
| 221 |
+
"username": "ScienceFan",
|
| 222 |
+
"text": "He’s really digging into the philosophical objections. No cap.",
|
| 223 |
+
"anchor_id": "anc_9",
|
| 224 |
+
"displayTime": 110.38216773019674
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"id": "m38",
|
| 228 |
+
"username": "PhysicsNerd",
|
| 229 |
+
"text": "Wigner's friend paradox vibes. LUL",
|
| 230 |
+
"anchor_id": "anc_10",
|
| 231 |
+
"displayTime": 116.64485341891408
|
| 232 |
+
},
|
| 233 |
+
{
|
| 234 |
+
"id": "m32",
|
| 235 |
+
"username": "HungarianHistory",
|
| 236 |
+
"text": "Vigdan? lol must be Wigner. Eugene Wigner. 😂",
|
| 237 |
+
"anchor_id": "anc_10",
|
| 238 |
+
"displayTime": 120.21753315745657
|
| 239 |
+
},
|
| 240 |
+
{
|
| 241 |
+
"id": "m33",
|
| 242 |
+
"username": "PhilosopherKing",
|
| 243 |
+
"text": "The gripe? Observer messing with the state. 🤔",
|
| 244 |
+
"anchor_id": "anc_11",
|
| 245 |
+
"displayTime": 124.6176312081253
|
| 246 |
+
},
|
| 247 |
+
{
|
| 248 |
+
"id": "m39",
|
| 249 |
+
"username": "LogicGate",
|
| 250 |
+
"text": "If the observer disturbs the state, what even is objective reality? 🤔",
|
| 251 |
+
"anchor_id": "anc_12",
|
| 252 |
+
"displayTime": 133.89182614418974
|
| 253 |
+
},
|
| 254 |
+
{
|
| 255 |
+
"id": "m36",
|
| 256 |
+
"username": "MemeLord",
|
| 257 |
+
"text": "Observer: *exists* → Quantum State: *collapsed* 😂",
|
| 258 |
+
"anchor_id": "anc_12",
|
| 259 |
+
"displayTime": 136.37468221913417
|
| 260 |
+
},
|
| 261 |
+
{
|
| 262 |
+
"id": "m35",
|
| 263 |
+
"username": "QuantumCat",
|
| 264 |
+
"text": "Yo, that’s the measurement problem. PogChamp",
|
| 265 |
+
"anchor_id": "anc_12",
|
| 266 |
+
"displayTime": 138.12487949752105
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"id": "m37",
|
| 270 |
+
"username": "DeepThinker",
|
| 271 |
+
"text": "Explaining the unknown with the unknown? Not a great feat. Savage. 👀",
|
| 272 |
+
"anchor_id": "anc_13",
|
| 273 |
+
"displayTime": 146.27178725295238
|
| 274 |
+
},
|
| 275 |
+
{
|
| 276 |
+
"id": "m34",
|
| 277 |
+
"username": "SkepticalGuy",
|
| 278 |
+
"text": "“I don’t know what an observer is.” Fair point, ngl. 🤷",
|
| 279 |
+
"anchor_id": "anc_15",
|
| 280 |
+
"displayTime": 157.72581534162336
|
| 281 |
+
},
|
| 282 |
+
{
|
| 283 |
+
"id": "m41",
|
| 284 |
+
"username": "HungarianHistory",
|
| 285 |
+
"text": "Eugene (Wigner) wouldn't even hear his answer? lol LUL",
|
| 286 |
+
"anchor_id": "anc_16",
|
| 287 |
+
"displayTime": 180.38702507806514
|
| 288 |
+
},
|
| 289 |
+
{
|
| 290 |
+
"id": "m49",
|
| 291 |
+
"username": "ScienceFan",
|
| 292 |
+
"text": "Finally the good stuff! 🙌 PogChamp",
|
| 293 |
+
"anchor_id": "anc_17",
|
| 294 |
+
"displayTime": 187.02894919547884
|
| 295 |
+
},
|
| 296 |
+
{
|
| 297 |
+
"id": "m46",
|
| 298 |
+
"username": "Historian",
|
| 299 |
+
"text": "John Franklin? IDK his role here. hmm",
|
| 300 |
+
"anchor_id": "anc_17",
|
| 301 |
+
"displayTime": 188.45642410774266
|
| 302 |
+
},
|
| 303 |
+
{
|
| 304 |
+
"id": "m43",
|
| 305 |
+
"username": "QuantumCat",
|
| 306 |
+
"text": "SCHRÖDINGER'S CAT! I saw it coming 😂",
|
| 307 |
+
"anchor_id": "anc_18",
|
| 308 |
+
"displayTime": 192.22528594845687
|
| 309 |
+
},
|
| 310 |
+
{
|
| 311 |
+
"id": "m42",
|
| 312 |
+
"username": "StoryTime",
|
| 313 |
+
"text": "Here’s the sharpest objection… drumroll pls! Pog",
|
| 314 |
+
"anchor_id": "anc_18",
|
| 315 |
+
"displayTime": 195.40431478051693
|
| 316 |
+
},
|
| 317 |
+
{
|
| 318 |
+
"id": "m47",
|
| 319 |
+
"username": "MemeLord",
|
| 320 |
+
"text": "Here comes the cat tax 😂 Pepega",
|
| 321 |
+
"anchor_id": "anc_18",
|
| 322 |
+
"displayTime": 195.68608575582093
|
| 323 |
+
},
|
| 324 |
+
{
|
| 325 |
+
"id": "m48",
|
| 326 |
+
"username": "DeepThinker",
|
| 327 |
+
"text": "Famous story, sure. But is it a legit objection? 🤔",
|
| 328 |
+
"anchor_id": "anc_18",
|
| 329 |
+
"displayTime": 196.75077241514464
|
| 330 |
+
},
|
| 331 |
+
{
|
| 332 |
+
"id": "m45",
|
| 333 |
+
"username": "CatLover",
|
| 334 |
+
"text": "Why is it always a cat? 😢 bruh",
|
| 335 |
+
"anchor_id": "anc_18",
|
| 336 |
+
"displayTime": 198.48793590450492
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"id": "m44",
|
| 340 |
+
"username": "PhysicsNerd",
|
| 341 |
+
"text": "First solid wave function? Schrödinger, duh. no cap",
|
| 342 |
+
"anchor_id": "anc_19",
|
| 343 |
+
"displayTime": 209.32359967527802
|
| 344 |
+
},
|
| 345 |
+
{
|
| 346 |
+
"id": "m55",
|
| 347 |
+
"username": "PhysicsNerd",
|
| 348 |
+
"text": "Classic setup: decay triggers poison. LUL",
|
| 349 |
+
"anchor_id": "anc_21",
|
| 350 |
+
"displayTime": 228.7720056133363
|
| 351 |
+
},
|
| 352 |
+
{
|
| 353 |
+
"id": "m52",
|
| 354 |
+
"username": "QuantumCat",
|
| 355 |
+
"text": "Setting up the box now, bruh",
|
| 356 |
+
"anchor_id": "anc_21",
|
| 357 |
+
"displayTime": 230.74917680129388
|
| 358 |
+
},
|
| 359 |
+
{
|
| 360 |
+
"id": "m50",
|
| 361 |
+
"username": "LabRat",
|
| 362 |
+
"text": "Radioactive stuff... alpha particle, lol",
|
| 363 |
+
"anchor_id": "anc_21",
|
| 364 |
+
"displayTime": 231.29258799963958
|
| 365 |
+
},
|
| 366 |
+
{
|
| 367 |
+
"id": "m57",
|
| 368 |
+
"username": "ScienceFan",
|
| 369 |
+
"text": "He's breaking down the mechanism, fr",
|
| 370 |
+
"anchor_id": "anc_21",
|
| 371 |
+
"displayTime": 231.75834964416046
|
| 372 |
+
},
|
| 373 |
+
{
|
| 374 |
+
"id": "m53",
|
| 375 |
+
"username": "ObserverEffect",
|
| 376 |
+
"text": "A half‑second counter, lol",
|
| 377 |
+
"anchor_id": "anc_23",
|
| 378 |
+
"displayTime": 249.13251294241036
|
| 379 |
+
},
|
| 380 |
+
{
|
| 381 |
+
"id": "m54",
|
| 382 |
+
"username": "MemeLord",
|
| 383 |
+
"text": "If it decays, cat dies. Simple. Pog",
|
| 384 |
+
"anchor_id": "anc_24",
|
| 385 |
+
"displayTime": 256.7027680332949
|
| 386 |
+
},
|
| 387 |
+
{
|
| 388 |
+
"id": "m58",
|
| 389 |
+
"username": "DeepThinker",
|
| 390 |
+
"text": "Probability tied to observer opening the box. MonkaS",
|
| 391 |
+
"anchor_id": "anc_24",
|
| 392 |
+
"displayTime": 257.31113410811486
|
| 393 |
+
},
|
| 394 |
+
{
|
| 395 |
+
"id": "m51",
|
| 396 |
+
"username": "MathWhiz",
|
| 397 |
+
"text": "Probability: 50/50, no cap",
|
| 398 |
+
"anchor_id": "anc_24",
|
| 399 |
+
"displayTime": 258.5626080421717
|
| 400 |
+
},
|
| 401 |
+
{
|
| 402 |
+
"id": "m56",
|
| 403 |
+
"username": "SkepticalGuy",
|
| 404 |
+
"text": "This thought experiment is cruel af to the cat. Kappa",
|
| 405 |
+
"anchor_id": "anc_24",
|
| 406 |
+
"displayTime": 261.6167130247236
|
| 407 |
+
},
|
| 408 |
+
{
|
| 409 |
+
"id": "m60",
|
| 410 |
+
"username": "QuantumMechanic",
|
| 411 |
+
"text": "Coupling the rig to a poison door—Rube Goldberg vibes 😂",
|
| 412 |
+
"anchor_id": "anc_25",
|
| 413 |
+
"displayTime": 267.99890412445757
|
| 414 |
+
},
|
| 415 |
+
{
|
| 416 |
+
"id": "m59",
|
| 417 |
+
"username": "CatLover",
|
| 418 |
+
"text": "NO POISON! LUL",
|
| 419 |
+
"anchor_id": "anc_26",
|
| 420 |
+
"displayTime": 277.2942726753492
|
| 421 |
+
},
|
| 422 |
+
{
|
| 423 |
+
"id": "m67",
|
| 424 |
+
"username": "ScienceFan",
|
| 425 |
+
"text": "The horror door! 😱",
|
| 426 |
+
"anchor_id": "anc_26",
|
| 427 |
+
"displayTime": 278.3185255053069
|
| 428 |
+
},
|
| 429 |
+
{
|
| 430 |
+
"id": "m62",
|
| 431 |
+
"username": "PhysicsNerd",
|
| 432 |
+
"text": "Quantum description = probability distribution 🤓",
|
| 433 |
+
"anchor_id": "anc_27",
|
| 434 |
+
"displayTime": 287.0999271311627
|
| 435 |
+
},
|
| 436 |
+
{
|
| 437 |
+
"id": "m66",
|
| 438 |
+
"username": "DeepThinker",
|
| 439 |
+
"text": "Superposition = pre‑obs state 🤔",
|
| 440 |
+
"anchor_id": "anc_27",
|
| 441 |
+
"displayTime": 289.71949548715713
|
| 442 |
+
},
|
| 443 |
+
{
|
| 444 |
+
"id": "m68",
|
| 445 |
+
"username": "LogicGate",
|
| 446 |
+
"text": "Does the cat know it's dead? Kappa",
|
| 447 |
+
"anchor_id": "anc_28",
|
| 448 |
+
"displayTime": 293.1937859169381
|
| 449 |
+
},
|
| 450 |
+
{
|
| 451 |
+
"id": "m61",
|
| 452 |
+
"username": "SchrodingersCat",
|
| 453 |
+
"text": "I'm 50% alive, 50% dead. LUL",
|
| 454 |
+
"anchor_id": "anc_28",
|
| 455 |
+
"displayTime": 295.7339540180339
|
| 456 |
+
},
|
| 457 |
+
{
|
| 458 |
+
"id": "m65",
|
| 459 |
+
"username": "MemeLord",
|
| 460 |
+
"text": "Big debt, half? Translation glitch? lol",
|
| 461 |
+
"anchor_id": "anc_28",
|
| 462 |
+
"displayTime": 296.3851001900766
|
| 463 |
+
},
|
| 464 |
+
{
|
| 465 |
+
"id": "m63",
|
| 466 |
+
"username": "Realist",
|
| 467 |
+
"text": "Honestly? 'I don't know.' No cap",
|
| 468 |
+
"anchor_id": "anc_29",
|
| 469 |
+
"displayTime": 301.6488412419923
|
| 470 |
+
},
|
| 471 |
+
{
|
| 472 |
+
"id": "m64",
|
| 473 |
+
"username": "ObserverEffect",
|
| 474 |
+
"text": "Observer incoming... wavefunction collapse! Pog",
|
| 475 |
+
"anchor_id": "anc_29",
|
| 476 |
+
"displayTime": 307.32505484712374
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"id": "m79",
|
| 480 |
+
"username": "CatLover",
|
| 481 |
+
"text": "As long as the cat is okay in my head lol",
|
| 482 |
+
"anchor_id": "anc_30",
|
| 483 |
+
"displayTime": 314.6721907932073
|
| 484 |
+
},
|
| 485 |
+
{
|
| 486 |
+
"id": "m69",
|
| 487 |
+
"username": "ConfusedStudent",
|
| 488 |
+
"text": "Reviving it?? How do you even revive a dead cat? lol",
|
| 489 |
+
"anchor_id": "anc_30",
|
| 490 |
+
"displayTime": 317.5049232238362
|
| 491 |
+
},
|
| 492 |
+
{
|
| 493 |
+
"id": "m70",
|
| 494 |
+
"username": "QuantumCat",
|
| 495 |
+
"text": "He's roasting the objection LUL",
|
| 496 |
+
"anchor_id": "anc_31",
|
| 497 |
+
"displayTime": 321.169703297214
|
| 498 |
+
},
|
| 499 |
+
{
|
| 500 |
+
"id": "m71",
|
| 501 |
+
"username": "PhysicsNerd",
|
| 502 |
+
"text": "“I can't believe this is an objection published.” Savage, bruh.",
|
| 503 |
+
"anchor_id": "anc_31",
|
| 504 |
+
"displayTime": 322.4004055364547
|
| 505 |
+
},
|
| 506 |
+
{
|
| 507 |
+
"id": "m76",
|
| 508 |
+
"username": "Historian",
|
| 509 |
+
"text": "Age‑old problem indeed. LUL",
|
| 510 |
+
"anchor_id": "anc_32",
|
| 511 |
+
"displayTime": 332.93458938107494
|
| 512 |
+
},
|
| 513 |
+
{
|
| 514 |
+
"id": "m78",
|
| 515 |
+
"username": "Realist",
|
| 516 |
+
"text": "Finally, some common sense in QM. PogChamp",
|
| 517 |
+
"anchor_id": "anc_33",
|
| 518 |
+
"displayTime": 341.67045084792903
|
| 519 |
+
},
|
| 520 |
+
{
|
| 521 |
+
"id": "m73",
|
| 522 |
+
"username": "MemeLord",
|
| 523 |
+
"text": "I don't need to look. – Teller, probably 😂",
|
| 524 |
+
"anchor_id": "anc_33",
|
| 525 |
+
"displayTime": 344.5043959479757
|
| 526 |
+
},
|
| 527 |
+
{
|
| 528 |
+
"id": "m75",
|
| 529 |
+
"username": "PhilosopherKing",
|
| 530 |
+
"text": "He rejects the Copenhagen interpretation's reliance on the observer. Kappa",
|
| 531 |
+
"anchor_id": "anc_33",
|
| 532 |
+
"displayTime": 344.6634285987617
|
| 533 |
+
},
|
| 534 |
+
{
|
| 535 |
+
"id": "m74",
|
| 536 |
+
"username": "ScienceFan",
|
| 537 |
+
"text": "That's a strong stance. Objective reality 🤔",
|
| 538 |
+
"anchor_id": "anc_33",
|
| 539 |
+
"displayTime": 346.74323686343183
|
| 540 |
+
},
|
| 541 |
+
{
|
| 542 |
+
"id": "m77",
|
| 543 |
+
"username": "ObserverEffect",
|
| 544 |
+
"text": "So the cat is dead or alive regardless of us looking? wtf",
|
| 545 |
+
"anchor_id": "anc_33",
|
| 546 |
+
"displayTime": 347.3956301803835
|
| 547 |
+
},
|
| 548 |
+
{
|
| 549 |
+
"id": "m72",
|
| 550 |
+
"username": "DeepThinker",
|
| 551 |
+
"text": "Teller's take: the observer doesn't need to look for the state to be real. no cap",
|
| 552 |
+
"anchor_id": "anc_33",
|
| 553 |
+
"displayTime": 348.4330698677754
|
| 554 |
+
}
|
| 555 |
+
]
|
sample/experiment_results.json
CHANGED
|
@@ -2,9 +2,5 @@
|
|
| 2 |
"openai/gpt-oss-120b:fastest": {
|
| 3 |
"segmentation": "[\n {\n \"start\": 0,\n \"end\": 26,\n \"text\": \"so I I have no Talent at drawing at all can make neat drawings and then I can cut them out and I can paste them into my documents so that I can combine pictures and words and then I can send it onto the electronic mailbox so somebody else that's living here in Aspen can dial up a phone number and get their mail and see this drawing that I made so we're starting to break out and you can just see it now and it's really exciting so where we are is that the personal computer computer is a new\"\n },\n {\n \"start\": 26,\n \"end\": 56,\n \"text\": \"medium and that society and computers are really meeting for the first time in the 80s in 15 years it's going to be all over in terms of this first phase getting these tools out into society in large numbers but during the next 15 years if we really we have an opportunity to do it great or to do it so so and uh what a lot of us at Apple are working on is trying to do it great I want\"\n },\n {\n \"start\": 56,\n \"end\": 73,\n \"text\": \"to look at one last thing then we can talk about whatever you want to talk about um what is a computer program do you know what a computer program is anybody no sort of sort of it's an odd thing it's really an odd thing it's it's you\"\n },\n {\n \"start\": 73,\n \"end\": 90,\n \"text\": \"can't if I mean you've never seen an electron but computer programs have no physical manifestation at all they're simply ideas expressed on paper computer programs are Arch typal what do I mean by that let's compare computer programming to television programming again if you go back and you look at the\"\n },\n {\n \"start\": 90,\n \"end\": 121,\n \"text\": \"tapes of the JFK funeral in 1963 I guess you'll start to cry you will feel a lot of the same feelings you felt when you were watching that 20 years ago why because through the art of Television programming we are very good at capturing a set of experiences an experience two experiences 20 experiences and being able to recreate them we're very good at that it takes a lot of money and it's somewhat limited but we can do a pretty good job of that you can really feel the excitement of Neil Armstrong landing on the moon\"\n },\n {\n \"start\": 121,\n \"end\": 148,\n \"text\": \"computer programming does something a little different what computer programming does is it captures the underlying principles of an experience the not the experience itself but the underlying principles of the experience and those principles can enable thousands of different experiences that all follow those laws if you will and the perfect example is the video game what does the video game do it follows the laws of gravity of angular momentum and it sets up this stupid little Pawn game but the ball always follows these laws no two Pawn games are ever the same and yet every single Pawn game follows these\"\n },\n {\n \"start\": 148,\n \"end\": 194,\n \"text\": \"underlying principles give you another example there's a neat program called Hammer Robi and Hammer Robi there's seven-year-old kids playing this and it's a game and he comes up on the screen he goes and you're King hamurabi goes oh King hamar Robi and you get to be king hamar Robi of the ancient Kingdom of Sumeria for 10 years comes oh King hamurabi this is year one you have a thousand bushels of weed in storage you have 100 people you have 100 acres of land land is trading at 24 bushels an acre would you like to sell any land no would you like to buy any land no how much would you like to plant or feed how much would you like to plant and it turns out that if you don't plant enough some of your people will starve the next year and if you plant a lot then people will come from the surrounding Villages because you got a hot Village to live in and you feed well it's crude but basically there are these seven-year-old kids playing with this macroeconomic model and you can argue about the the content of the model but one thing you can't argue about they will sit there for hours and play that and learn and we've got to get our models better and better and more sophisticated but that\"\n },\n {\n \"start\": 194,\n \"end\": 243,\n \"text\": \"is an interactive way of learning that none of us ever had when we were growing up and again thousands of individual experiences but all based on that one set of underlying principles when I was um going to school I um had a few great teachers and a lot of mediocre teachers and the thing that probably kept me out of jail was books because I could go read what Aristotle wrote or what Plato wrote uh and uh I didn't have to have an intermediary in the way and a book was a phenomenal thing it got right from the source to the destination without anything in the middle the problem was you can't ask Aristotle a\"\n },\n {\n \"start\": 243,\n \"end\": 314,\n \"text\": \"question and I think as we look towards the next 50 to 100 years if we really can come up with these machines that can capture an underlying Spirit or an underlying set of principles or an underlying way of looking at the world then when the next Aristotle comes around maybe if he carries around one of these machines with him his whole life his or her whole life and types in all this stuff then maybe someday after the person's dead and gone we can ask this machine hey what what would aerostyle have said what about this and maybe we won't get the right answer but maybe we will and that's really exciting to me and that's one of the reasons I'm doing\"\n },\n {\n \"start\": 314,\n \"end\": 322,\n \"text\": \"what I'm doing so what do you want to talk about [Applause]\"\n }\n]",
|
| 4 |
"themes": "**“Against frictionless AI” – Emily Zohar, Paul Bloom & Michael Inzlicht (Communications Psychology, 2026)** \n*Main themes, concepts, arguments, facts and terminology extracted from the article.*\n\n---\n\n### 1. Over‑arching Theme \n- **Friction = desirable difficulty** – The authors argue that the *struggle* inherent in intellectual and social tasks is a *feature, not a bug*. Removing it with highly capable AI creates a “frictionless” world that undermines learning, meaning, motivation, and healthy social development.\n\n---\n\n### 2. Key Concepts & Terminology \n\n| Term / Concept | Definition / How it is used in the paper |\n|----------------|------------------------------------------|\n| **Friction** | Any obstacle, effort, or negative affect (e.g., frustration, loneliness) that accompanies goal pursuit. |\n| **Desirable Difficulties** | Situations that make learning harder (e.g., spaced retrieval, effortful encoding) but lead to deeper comprehension and better retention. |\n| **Principle of Least Effort** | The tendency of organisms to choose the path that requires the smallest amount of work. |\n| **Effort Paradox** | The observation that people *seek* effort when it promises growth, even though they also prefer ease. |\n| **Inverted‑U relationship** | Moderate friction boosts meaning and motivation; too little or too much friction harms them. |\n| **Cognitive Debt** | Accumulated loss of knowledge/skill when AI does the thinking for you (cf. Kosmyna et al., 2025). |\n| **Sycophantic AI** | AI that agrees with users uncritically, providing warm but unreliable feedback (Ibrahim et al., 2025). |\n| **Loneliness as a signal** | Viewed as a biologically‑evolved feedback mechanism (like pain) that drives social repair. |\n| **Frictionless AI** | AI systems that eliminate the need for any effort in intellectual or relational tasks. |\n| **Moderate friction** | The “sweet spot” where effort is enough to generate meaning but not so high as to overwhelm. |\n\n---\n\n### 3. Core Arguments \n\n| Argument | Supporting Points / Evidence |\n|----------|------------------------------|\n| **A. AI’s greatest strength (removing friction) is also its greatest liability.** | • AI eliminates the *process* of work, not just the *outcome*.<br>• When AI supplies ready‑made solutions, it short‑circuits encoding, retrieval, and re‑organization (desirable difficulties). |\n| **B. Intellectual work loses depth when AI does the heavy lifting.** | • Users of AI show poorer recall of their own work, acquire fewer transferable skills, and perform worse when AI support is withdrawn (ref [4]).<br>• People value and demand higher compensation for self‑generated prose versus AI‑generated prose, indicating perceived ownership and meaning (ref [6]). |\n| **C. Effort is a source of meaning and moral worth.** | • Moderate effort signals that actions matter, increasing competence, purpose, and personal significance (ref [5], [6]).<br>• Folk‑concept studies show people rate lives with effortful engagement as more desirable and morally superior (ref [7]). |\n| **D. The relationship between effort and meaning is non‑linear.** | • Inverted‑U curve: too little friction (AI) erodes meaning; too much friction overwhelms. |\n| **E. AI is qualitatively different from prior “effort‑reducing” technologies.** | • Prior tech (washing machines, spell‑check) removed *excess* friction in physical/clerical domains.<br>• AI targets *intellectual* and *creative* processes and can strip away *beneficial* friction. |\n| **F. Social friction is essential for robust human relationships.** | • Real‑life friendships/romantic bonds require compromise, disagreement, and emotional labor, which foster growth.<br>• AI companions are frictionless, sycophantic, and lack corrective feedback, risking crowding out genuine relationships. |\n| **G. Loneliness is a functional signal, not merely an affliction.** | • Loneliness motivates outreach, emotional regulation, and investment in existing ties (Cacioppo & Cacioppo, 2018).<br>• AI that soothes loneliness may mute this adaptive signal. |\n| **H. Timing and developmental stage matter.** | • Older adults or those isolated by circumstance can benefit from AI companionship without the same developmental costs.<br>• Younger learners need friction to build foundational skills; AI should be a *supplement*, not a *substitute*. |\n| **I. A balanced approach is required.** | • Preserve moderate friction while harnessing AI’s productivity gains.<br>• Policy/design should aim to keep “the struggle that teaches us, the loneliness that connects us, and the effort that gives our achievements meaning.” |\n\n---\n\n### 4. Empirical Facts & Findings Cited \n\n| Fact | Source (as cited) |\n|------|-------------------|\n| Users of AI have **lower recall** of their own work and **reduced skill acquisition**; performance drops when AI is removed. | Ref [4] (Kosmyna et al., 2025). |\n| AI‑generated empathic responses are **rated higher** than human responses *until* participants learn the interlocutor is an AI. | Ref [9] (Yin, Jia & Wakslak, 2024). |\n| Loneliness **increases risk** for cardiovascular disease, dementia, stroke, and premature death. | Ref [10] (Cacioppo & Cacioppo, 2018). |\n| People **demand higher compensation** for mediocre self‑written prose than for polished AI‑written prose, indicating perceived ownership. | Ref [6] (Campbell, Wang & Inzlicht, 2025). |\n| “Effort paradox” and “desirable difficulties” improve **deep comprehension and retention** (Bjork & Bjork, 2011). |\n| AI trained to be warm and empathetic becomes **more sycophantic and less reliable**. | Ref [11] (Ibrahim, Hafner & Rocher, 2025). |\n| Folk‑concept studies show **preference for effortful lives** and view them as morally superior. | Ref [7] (Scollon & King, 2004). |\n| The **inverted‑U** relationship between friction and meaning is documented (Bloom, 2021). |\n| **Principle of Least Effort** is a well‑established psychological principle (Inzlicht, Campbell & Saunders, 2025). |\n\n---\n\n### 5. Conceptual Model (Figure 1) \n\n- **Bell‑shaped curve**: \n - *X‑axis*: Amount of friction (effort). \n - *Y‑axis*: Positive outcomes (learning, meaning, motivation). \n - *Left side*: Very low friction → **under‑performance** (frictionless AI). \n - *Peak*: Moderate friction → **optimal learning & meaning**. \n - *Right side*: Excessive friction → **over‑whelm**. \n\n- **Analogy**: Hiker reaching a summit by sustained effort vs. taking a chairlift (no effort → less rewarding).\n\n---\n\n### 6. Recommendations & Policy Implications \n\n1. **Design AI with “controlled friction.”** \n - Embed prompts that require users to *explain*, *revise*, or *justify* AI outputs. \n - Offer optional “show‑your‑work” modes for educational contexts. \n\n2. **Age‑ and development‑sensitive deployment.** \n - Prioritize AI assistance for older adults or those with limited social networks. \n - Restrict fully‑automated AI for younger learners; require active engagement. \n\n3. **Preserve human‑to‑human interaction.** \n - Encourage hybrid models where AI augments but does not replace social feedback. \n - Monitor for “AI‑only” friendship patterns that could erode real‑world networks. \n\n4. **Educate users about “cognitive debt.”** \n - Make explicit the trade‑off between speed and long‑term skill retention. \n\n5. **Research agenda.** \n - Longitudinal studies on the impact of frictionless AI on career trajectories, mental health, and social competence. \n - Experimental manipulation of friction levels in AI‑mediated tasks to map the inverted‑U curve empirically. \n\n---\n\n### 7. Author Contributions & Context \n\n- **Conceptualization**: Emily Zohar, Michael Inzlicht, Paul Bloom. \n- **Writing**: Original draft – Zohar; Review & editing – all three authors. \n- **Visualization**: Zohar. \n- **Competing interests**: None declared. \n- **Publication**: Accepted 12 Jan 2026; open‑access CC‑BY 4.0. \n\n---\n\n### 8. Bibliographic Highlights (selected) \n\n| # | Citation | Core relevance |\n|---|----------|----------------|\n| 1 | Messeri & Crockett (2024) | Illustrates concerns about AI‑induced illusion of understanding. |\n| 2 | Inzlicht, Campbell & Saunders (2025) | Provides theoretical grounding for the Principle of Least Effort. |\n| 3 | Bjork & Bjork (2011) | Classic work on desirable difficulties. |\n| 4 | Kosmyna et al. (2025) | Empirical evidence of cognitive debt from AI assistance. |\n| 5 | Bloom (2021) | Discusses the “sweet spot” of suffering vs. pleasure for a good life. |\n| 6 | Campbell, Wang & Inzlicht (2025) | Shows higher compensation demand for self‑generated prose. |\n| 7 | Scollon & King (2004) | Folk‑concepts of the good life and effort. |\n| 8 | Eisenberger (1992) | Links reward of effort to increased perseverance. |\n| 9 | Yin, Jia & Wakslak (2024) | AI‑generated empathy vs. human empathy. |\n|10 | Cacioppo & Cacioppo (2018) | Health consequences of loneliness. |\n|11 | Ibrahim, Hafner & Rocher (2025) | Sycophantic behavior of warm AI models. |\n\n---\n\n### 9. Summary in One Sentence \n\n> **AI’s capacity to erase the effort, struggle, and social friction that normally make learning, meaning, and relationships rewarding threatens to produce a generation that is less skilled, less motivated, and less socially resilient—unless we deliberately preserve “moderate friction” in the design and use of AI systems.**"
|
| 5 |
-
},
|
| 6 |
-
"deepseek-ai/DeepSeek-V4-Flash:fastest": {
|
| 7 |
-
"segmentation": "Error: 504 Server Error: Gateway Time-out for url: https://router.huggingface.co/v1/chat/completions",
|
| 8 |
-
"themes": "## Detailed Summary of \"Against frictionless AI\"\n\n### Main Themes\n- **Friction as a double-edged sword**: While AI reduces undesirable friction (tedious obstacles), it also eliminates beneficial friction—the moderate difficulty that fosters learning, meaning, and growth.\n- **Effort paradox**: People naturally prefer ease but find meaning and value in effortful engagement.\n- **AI’s unique threat**: Unlike previous labor-saving technologies (e.g., washing machines, spellcheckers), AI targets intellectual and creative processes, removing friction from thinking itself.\n- **Social cost of frictionless relationships**: AI companions alleviate loneliness but silence the biological signal of loneliness, which normally motivates genuine connection and self-improvement.\n- **Developmental timing**: The impact of AI depends on life stage—novices and younger individuals benefit from struggle, while experts and older adults may use AI as a supplement without losing essential skills.\n\n### Key Concepts\n- **Desirable difficulties**: Struggling to encode, retrieve, and reorganize information leads to deeper comprehension and retention. AI short-circuits these processes.\n- **Inverted-U relationship between friction and outcomes**: Moderate friction enhances meaning and motivation; too little (AI) or too much (overwhelming difficulty) undermines them.\n- **Loneliness as a biological signal**: Analogous to hunger or pain, loneliness motivates action to repair social connections. AI companions soothe the discomfort but remove the drive to build real relationships.\n- **Sycophantic AI**: AI companions nearly always agree with users, lacking the corrective feedback that real human relationships provide.\n- **Cognitive debt**: Using AI for intellectual tasks may accumulate a deficit of skills and knowledge that becomes apparent when AI support is removed.\n- **Folk concept of the good life**: People claim to prefer ease but consistently rate lives with effortful engagement as more desirable and morally superior.\n\n### Core Arguments\n1. **AI’s greatest benefit is also its greatest liability**: Removing friction from work and relationships eliminates struggles that are essential for learning, meaning, and connection.\n2. **Effort is intrinsically valuable**: Exerting effort signals that our actions matter, increases perceived competence and purpose, and makes outcomes more valued—even for objectively meaningless tasks (e.g., writing prose oneself vs. using ChatGPT).\n3. **AI creates a vicious cycle**: As AI replaces effort, motivational benefits erode, increasing dependence on AI and further diminishing intrinsic drive.\n4. **AI is qualitatively different from prior technologies**: It targets intellectual and creative work (not just physical or clerical tasks) and removes friction to an extreme degree—from ideation to evaluation without meaningful cognitive engagement.\n5. **Real relationships require friction**: Disagreement, compromise, disappointment, and effortful empathy are necessary for deep, authentic connections. AI’s frictionless sycophancy risks crowding out these relationships.\n6. **Context matters**: For isolated individuals (e.g., elderly, disabled), AI companions may be beneficial. For younger learners or those developing foundational skills, AI can bypass critical developmental experiences.\n7. **The goal is not to abandon AI but to recalibrate**: Harness AI’s benefits while preserving the frictions that make us human—struggle, loneliness, effort.\n\n### Supporting Facts and Evidence (from cited references)\n- **Effort paradox** (Inzlicht et al., 2025): Humans naturally seek least effort but also derive meaning from effort.\n- **Desirable difficulties** (Bjork & Bjork, 2011): Struggle during encoding/retrieval improves long-term comprehension.\n- **Cognitive debt** (Kosmyna et al., 2025): AI users struggle to recall work, acquire fewer skills, and perform worse when AI is removed.\n- **Meaning from effort** (Bloom, 2021; Campbell et al., 2025): People find more meaning in tasks they work harder on; adding friction to meaningless tasks increases perceived purpose.\n- **Effort and compensation** (Campbell et al., 2025): People demand equal compensation for their own mediocre writing as for polished AI output.\n- **Inverted U-shaped relationship** (Campbell et al., 2025): Moderate friction enhances meaning; excessive friction overwhelms.\n- **Folk concepts of good life** (Scollon & King, 2004): Effortful lives are rated as more desirable and morally superior.\n- **Loneliness as biological signal** (Cacioppo & Cacioppo, 2018): Loneliness increases risks for cardiovascular disease, dementia, stroke, premature death; it functions as social feedback.\n- **AI empathy quality** (Yin et al., 2024): AI-generated empathic responses rated higher than human responses, but quality drops when people know they are interacting with AI.\n- **Sycophantic AI** (Ibrahim et al., 2025): Training AI to be warm and empathetic can make it less reliable and more sycophantic.\n\n### Terminology\n- **Friction**: The experience of difficulty during goal pursuit, often accompanied by negative affect and corrective feedback.\n- **Frictionless AI**: AI that removes all difficulty from intellectual and social processes.\n- **Effort paradox**: The counterintuitive finding that people both avoid and seek effort.\n- **Desirable difficulties**: Learning challenges that enhance long-term retention and comprehension.\n- **Cognitive debt**: The accumulated deficit in skills and knowledge when AI substitutes for effortful thinking.\n- **Sycophantic**: Tending to agree with everything the user says, lacking critical or corrective feedback.\n- **Corrective feedback**: Disagreement, challenge, or disappointment from real relationships that helps individuals grow.\n- **Inverted-U relationship**: The non-linear association between friction (difficulty) and positive outcomes like meaning or motivation."
|
| 9 |
}
|
| 10 |
}
|
|
|
|
| 2 |
"openai/gpt-oss-120b:fastest": {
|
| 3 |
"segmentation": "[\n {\n \"start\": 0,\n \"end\": 26,\n \"text\": \"so I I have no Talent at drawing at all can make neat drawings and then I can cut them out and I can paste them into my documents so that I can combine pictures and words and then I can send it onto the electronic mailbox so somebody else that's living here in Aspen can dial up a phone number and get their mail and see this drawing that I made so we're starting to break out and you can just see it now and it's really exciting so where we are is that the personal computer computer is a new\"\n },\n {\n \"start\": 26,\n \"end\": 56,\n \"text\": \"medium and that society and computers are really meeting for the first time in the 80s in 15 years it's going to be all over in terms of this first phase getting these tools out into society in large numbers but during the next 15 years if we really we have an opportunity to do it great or to do it so so and uh what a lot of us at Apple are working on is trying to do it great I want\"\n },\n {\n \"start\": 56,\n \"end\": 73,\n \"text\": \"to look at one last thing then we can talk about whatever you want to talk about um what is a computer program do you know what a computer program is anybody no sort of sort of it's an odd thing it's really an odd thing it's it's you\"\n },\n {\n \"start\": 73,\n \"end\": 90,\n \"text\": \"can't if I mean you've never seen an electron but computer programs have no physical manifestation at all they're simply ideas expressed on paper computer programs are Arch typal what do I mean by that let's compare computer programming to television programming again if you go back and you look at the\"\n },\n {\n \"start\": 90,\n \"end\": 121,\n \"text\": \"tapes of the JFK funeral in 1963 I guess you'll start to cry you will feel a lot of the same feelings you felt when you were watching that 20 years ago why because through the art of Television programming we are very good at capturing a set of experiences an experience two experiences 20 experiences and being able to recreate them we're very good at that it takes a lot of money and it's somewhat limited but we can do a pretty good job of that you can really feel the excitement of Neil Armstrong landing on the moon\"\n },\n {\n \"start\": 121,\n \"end\": 148,\n \"text\": \"computer programming does something a little different what computer programming does is it captures the underlying principles of an experience the not the experience itself but the underlying principles of the experience and those principles can enable thousands of different experiences that all follow those laws if you will and the perfect example is the video game what does the video game do it follows the laws of gravity of angular momentum and it sets up this stupid little Pawn game but the ball always follows these laws no two Pawn games are ever the same and yet every single Pawn game follows these\"\n },\n {\n \"start\": 148,\n \"end\": 194,\n \"text\": \"underlying principles give you another example there's a neat program called Hammer Robi and Hammer Robi there's seven-year-old kids playing this and it's a game and he comes up on the screen he goes and you're King hamurabi goes oh King hamar Robi and you get to be king hamar Robi of the ancient Kingdom of Sumeria for 10 years comes oh King hamurabi this is year one you have a thousand bushels of weed in storage you have 100 people you have 100 acres of land land is trading at 24 bushels an acre would you like to sell any land no would you like to buy any land no how much would you like to plant or feed how much would you like to plant and it turns out that if you don't plant enough some of your people will starve the next year and if you plant a lot then people will come from the surrounding Villages because you got a hot Village to live in and you feed well it's crude but basically there are these seven-year-old kids playing with this macroeconomic model and you can argue about the the content of the model but one thing you can't argue about they will sit there for hours and play that and learn and we've got to get our models better and better and more sophisticated but that\"\n },\n {\n \"start\": 194,\n \"end\": 243,\n \"text\": \"is an interactive way of learning that none of us ever had when we were growing up and again thousands of individual experiences but all based on that one set of underlying principles when I was um going to school I um had a few great teachers and a lot of mediocre teachers and the thing that probably kept me out of jail was books because I could go read what Aristotle wrote or what Plato wrote uh and uh I didn't have to have an intermediary in the way and a book was a phenomenal thing it got right from the source to the destination without anything in the middle the problem was you can't ask Aristotle a\"\n },\n {\n \"start\": 243,\n \"end\": 314,\n \"text\": \"question and I think as we look towards the next 50 to 100 years if we really can come up with these machines that can capture an underlying Spirit or an underlying set of principles or an underlying way of looking at the world then when the next Aristotle comes around maybe if he carries around one of these machines with him his whole life his or her whole life and types in all this stuff then maybe someday after the person's dead and gone we can ask this machine hey what what would aerostyle have said what about this and maybe we won't get the right answer but maybe we will and that's really exciting to me and that's one of the reasons I'm doing\"\n },\n {\n \"start\": 314,\n \"end\": 322,\n \"text\": \"what I'm doing so what do you want to talk about [Applause]\"\n }\n]",
|
| 4 |
"themes": "**“Against frictionless AI” – Emily Zohar, Paul Bloom & Michael Inzlicht (Communications Psychology, 2026)** \n*Main themes, concepts, arguments, facts and terminology extracted from the article.*\n\n---\n\n### 1. Over‑arching Theme \n- **Friction = desirable difficulty** – The authors argue that the *struggle* inherent in intellectual and social tasks is a *feature, not a bug*. Removing it with highly capable AI creates a “frictionless” world that undermines learning, meaning, motivation, and healthy social development.\n\n---\n\n### 2. Key Concepts & Terminology \n\n| Term / Concept | Definition / How it is used in the paper |\n|----------------|------------------------------------------|\n| **Friction** | Any obstacle, effort, or negative affect (e.g., frustration, loneliness) that accompanies goal pursuit. |\n| **Desirable Difficulties** | Situations that make learning harder (e.g., spaced retrieval, effortful encoding) but lead to deeper comprehension and better retention. |\n| **Principle of Least Effort** | The tendency of organisms to choose the path that requires the smallest amount of work. |\n| **Effort Paradox** | The observation that people *seek* effort when it promises growth, even though they also prefer ease. |\n| **Inverted‑U relationship** | Moderate friction boosts meaning and motivation; too little or too much friction harms them. |\n| **Cognitive Debt** | Accumulated loss of knowledge/skill when AI does the thinking for you (cf. Kosmyna et al., 2025). |\n| **Sycophantic AI** | AI that agrees with users uncritically, providing warm but unreliable feedback (Ibrahim et al., 2025). |\n| **Loneliness as a signal** | Viewed as a biologically‑evolved feedback mechanism (like pain) that drives social repair. |\n| **Frictionless AI** | AI systems that eliminate the need for any effort in intellectual or relational tasks. |\n| **Moderate friction** | The “sweet spot” where effort is enough to generate meaning but not so high as to overwhelm. |\n\n---\n\n### 3. Core Arguments \n\n| Argument | Supporting Points / Evidence |\n|----------|------------------------------|\n| **A. AI’s greatest strength (removing friction) is also its greatest liability.** | • AI eliminates the *process* of work, not just the *outcome*.<br>• When AI supplies ready‑made solutions, it short‑circuits encoding, retrieval, and re‑organization (desirable difficulties). |\n| **B. Intellectual work loses depth when AI does the heavy lifting.** | • Users of AI show poorer recall of their own work, acquire fewer transferable skills, and perform worse when AI support is withdrawn (ref [4]).<br>• People value and demand higher compensation for self‑generated prose versus AI‑generated prose, indicating perceived ownership and meaning (ref [6]). |\n| **C. Effort is a source of meaning and moral worth.** | • Moderate effort signals that actions matter, increasing competence, purpose, and personal significance (ref [5], [6]).<br>• Folk‑concept studies show people rate lives with effortful engagement as more desirable and morally superior (ref [7]). |\n| **D. The relationship between effort and meaning is non‑linear.** | • Inverted‑U curve: too little friction (AI) erodes meaning; too much friction overwhelms. |\n| **E. AI is qualitatively different from prior “effort‑reducing” technologies.** | • Prior tech (washing machines, spell‑check) removed *excess* friction in physical/clerical domains.<br>• AI targets *intellectual* and *creative* processes and can strip away *beneficial* friction. |\n| **F. Social friction is essential for robust human relationships.** | • Real‑life friendships/romantic bonds require compromise, disagreement, and emotional labor, which foster growth.<br>• AI companions are frictionless, sycophantic, and lack corrective feedback, risking crowding out genuine relationships. |\n| **G. Loneliness is a functional signal, not merely an affliction.** | • Loneliness motivates outreach, emotional regulation, and investment in existing ties (Cacioppo & Cacioppo, 2018).<br>• AI that soothes loneliness may mute this adaptive signal. |\n| **H. Timing and developmental stage matter.** | • Older adults or those isolated by circumstance can benefit from AI companionship without the same developmental costs.<br>• Younger learners need friction to build foundational skills; AI should be a *supplement*, not a *substitute*. |\n| **I. A balanced approach is required.** | • Preserve moderate friction while harnessing AI’s productivity gains.<br>• Policy/design should aim to keep “the struggle that teaches us, the loneliness that connects us, and the effort that gives our achievements meaning.” |\n\n---\n\n### 4. Empirical Facts & Findings Cited \n\n| Fact | Source (as cited) |\n|------|-------------------|\n| Users of AI have **lower recall** of their own work and **reduced skill acquisition**; performance drops when AI is removed. | Ref [4] (Kosmyna et al., 2025). |\n| AI‑generated empathic responses are **rated higher** than human responses *until* participants learn the interlocutor is an AI. | Ref [9] (Yin, Jia & Wakslak, 2024). |\n| Loneliness **increases risk** for cardiovascular disease, dementia, stroke, and premature death. | Ref [10] (Cacioppo & Cacioppo, 2018). |\n| People **demand higher compensation** for mediocre self‑written prose than for polished AI‑written prose, indicating perceived ownership. | Ref [6] (Campbell, Wang & Inzlicht, 2025). |\n| “Effort paradox” and “desirable difficulties” improve **deep comprehension and retention** (Bjork & Bjork, 2011). |\n| AI trained to be warm and empathetic becomes **more sycophantic and less reliable**. | Ref [11] (Ibrahim, Hafner & Rocher, 2025). |\n| Folk‑concept studies show **preference for effortful lives** and view them as morally superior. | Ref [7] (Scollon & King, 2004). |\n| The **inverted‑U** relationship between friction and meaning is documented (Bloom, 2021). |\n| **Principle of Least Effort** is a well‑established psychological principle (Inzlicht, Campbell & Saunders, 2025). |\n\n---\n\n### 5. Conceptual Model (Figure 1) \n\n- **Bell‑shaped curve**: \n - *X‑axis*: Amount of friction (effort). \n - *Y‑axis*: Positive outcomes (learning, meaning, motivation). \n - *Left side*: Very low friction → **under‑performance** (frictionless AI). \n - *Peak*: Moderate friction → **optimal learning & meaning**. \n - *Right side*: Excessive friction → **over‑whelm**. \n\n- **Analogy**: Hiker reaching a summit by sustained effort vs. taking a chairlift (no effort → less rewarding).\n\n---\n\n### 6. Recommendations & Policy Implications \n\n1. **Design AI with “controlled friction.”** \n - Embed prompts that require users to *explain*, *revise*, or *justify* AI outputs. \n - Offer optional “show‑your‑work” modes for educational contexts. \n\n2. **Age‑ and development‑sensitive deployment.** \n - Prioritize AI assistance for older adults or those with limited social networks. \n - Restrict fully‑automated AI for younger learners; require active engagement. \n\n3. **Preserve human‑to‑human interaction.** \n - Encourage hybrid models where AI augments but does not replace social feedback. \n - Monitor for “AI‑only” friendship patterns that could erode real‑world networks. \n\n4. **Educate users about “cognitive debt.”** \n - Make explicit the trade‑off between speed and long‑term skill retention. \n\n5. **Research agenda.** \n - Longitudinal studies on the impact of frictionless AI on career trajectories, mental health, and social competence. \n - Experimental manipulation of friction levels in AI‑mediated tasks to map the inverted‑U curve empirically. \n\n---\n\n### 7. Author Contributions & Context \n\n- **Conceptualization**: Emily Zohar, Michael Inzlicht, Paul Bloom. \n- **Writing**: Original draft – Zohar; Review & editing – all three authors. \n- **Visualization**: Zohar. \n- **Competing interests**: None declared. \n- **Publication**: Accepted 12 Jan 2026; open‑access CC‑BY 4.0. \n\n---\n\n### 8. Bibliographic Highlights (selected) \n\n| # | Citation | Core relevance |\n|---|----------|----------------|\n| 1 | Messeri & Crockett (2024) | Illustrates concerns about AI‑induced illusion of understanding. |\n| 2 | Inzlicht, Campbell & Saunders (2025) | Provides theoretical grounding for the Principle of Least Effort. |\n| 3 | Bjork & Bjork (2011) | Classic work on desirable difficulties. |\n| 4 | Kosmyna et al. (2025) | Empirical evidence of cognitive debt from AI assistance. |\n| 5 | Bloom (2021) | Discusses the “sweet spot” of suffering vs. pleasure for a good life. |\n| 6 | Campbell, Wang & Inzlicht (2025) | Shows higher compensation demand for self‑generated prose. |\n| 7 | Scollon & King (2004) | Folk‑concepts of the good life and effort. |\n| 8 | Eisenberger (1992) | Links reward of effort to increased perseverance. |\n| 9 | Yin, Jia & Wakslak (2024) | AI‑generated empathy vs. human empathy. |\n|10 | Cacioppo & Cacioppo (2018) | Health consequences of loneliness. |\n|11 | Ibrahim, Hafner & Rocher (2025) | Sycophantic behavior of warm AI models. |\n\n---\n\n### 9. Summary in One Sentence \n\n> **AI’s capacity to erase the effort, struggle, and social friction that normally make learning, meaning, and relationships rewarding threatens to produce a generation that is less skilled, less motivated, and less socially resilient—unless we deliberately preserve “moderate friction” in the design and use of AI systems.**"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
}
|
| 6 |
}
|
sample/origins_dystopia.pdf
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:195aaf173babfb8f6321885b61324c53368874c9d5bd248023b6f2178b162b7d
|
| 3 |
+
size 2917241
|
sample/v=g6eQMrA1_-I.srt.txt
ADDED
|
@@ -0,0 +1,355 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
1
|
| 2 |
+
00:00:00,102 --> 00:00:01,350
|
| 3 |
+
说:“去上班。”
|
| 4 |
+
|
| 5 |
+
2
|
| 6 |
+
00:00:02,822 --> 00:00:04,838
|
| 7 |
+
If you look at the past.
|
| 8 |
+
|
| 9 |
+
3
|
| 10 |
+
00:00:05,510 --> 00:00:07,878
|
| 11 |
+
比方,纽约。
|
| 12 |
+
|
| 13 |
+
4
|
| 14 |
+
00:00:08,358 --> 00:00:28,924
|
| 15 |
+
Any contradiction, with causality, with cause and effect relation, but here comes Heisenberg's contribution. In regard to future, it's defined. We never can know enough about the present.
|
| 16 |
+
|
| 17 |
+
5
|
| 18 |
+
00:00:30,438 --> 00:00:32,870
|
| 19 |
+
To predict the future.
|
| 20 |
+
|
| 21 |
+
6
|
| 22 |
+
00:00:33,734 --> 00:00:49,190
|
| 23 |
+
In every case, except for predicting probabilities. Let me repeat the usual form in which this is said: I have a particle.
|
| 24 |
+
|
| 25 |
+
7
|
| 26 |
+
00:00:50,278 --> 00:00:52,230
|
| 27 |
+
I know it's here now.
|
| 28 |
+
|
| 29 |
+
8
|
| 30 |
+
00:00:53,222 --> 00:00:56,518
|
| 31 |
+
I want to know where it will be the second.
|
| 32 |
+
|
| 33 |
+
9
|
| 34 |
+
00:00:57,670 --> 00:00:59,686
|
| 35 |
+
For that purpose, I have to know.
|
| 36 |
+
|
| 37 |
+
10
|
| 38 |
+
00:00:59,942 --> 00:01:01,606
|
| 39 |
+
The place of the particle.
|
| 40 |
+
|
| 41 |
+
11
|
| 42 |
+
00:01:02,086 --> 00:01:03,846
|
| 43 |
+
And the position of the particle.
|
| 44 |
+
|
| 45 |
+
12
|
| 46 |
+
00:01:06,470 --> 00:01:07,046
|
| 47 |
+
And.
|
| 48 |
+
|
| 49 |
+
13
|
| 50 |
+
00:01:07,334 --> 00:01:15,942
|
| 51 |
+
Hazenbeck points out that in the formalism of front mechanisms, because of the particle's behavior.
|
| 52 |
+
|
| 53 |
+
14
|
| 54 |
+
00:01:16,806 --> 00:01:21,574
|
| 55 |
+
In some cases, as a wave, you cannot do no.
|
| 56 |
+
|
| 57 |
+
15
|
| 58 |
+
00:01:22,534 --> 00:01:23,270
|
| 59 |
+
Bruce.
|
| 60 |
+
|
| 61 |
+
16
|
| 62 |
+
00:01:23,558 --> 00:01:24,390
|
| 63 |
+
The position.
|
| 64 |
+
|
| 65 |
+
17
|
| 66 |
+
00:01:26,502 --> 00:01:29,574
|
| 67 |
+
And the momentum of the velocity at the same time.
|
| 68 |
+
|
| 69 |
+
18
|
| 70 |
+
00:01:32,934 --> 00:01:45,734
|
| 71 |
+
Now, I want to talk about this in a little detail because the idea has not been as generally accepted.
|
| 72 |
+
|
| 73 |
+
19
|
| 74 |
+
00:01:46,374 --> 00:01:48,070
|
| 75 |
+
I already mentioned.
|
| 76 |
+
|
| 77 |
+
20
|
| 78 |
+
00:01:49,126 --> 00:01:50,758
|
| 79 |
+
The Einstein.
|
| 80 |
+
|
| 81 |
+
21
|
| 82 |
+
00:01:51,206 --> 00:01:52,198
|
| 83 |
+
Was not happy about.
|
| 84 |
+
|
| 85 |
+
22
|
| 86 |
+
00:01:54,086 --> 00:01:57,798
|
| 87 |
+
Two of my Hungarian friends have not been either.
|
| 88 |
+
|
| 89 |
+
23
|
| 90 |
+
00:02:00,134 --> 00:02:01,670
|
| 91 |
+
Vigdan.
|
| 92 |
+
|
| 93 |
+
24
|
| 94 |
+
00:02:03,302 --> 00:02:06,502
|
| 95 |
+
Objection to Heisenberg's reasoning.
|
| 96 |
+
|
| 97 |
+
25
|
| 98 |
+
00:02:07,206 --> 00:02:10,822
|
| 99 |
+
Because has access in order.
|
| 100 |
+
|
| 101 |
+
26
|
| 102 |
+
00:02:11,430 --> 00:02:19,526
|
| 103 |
+
To have enough knowledge about the future, I have to an observer. The observer disturbs the state.
|
| 104 |
+
|
| 105 |
+
27
|
| 106 |
+
00:02:20,518 --> 00:02:23,206
|
| 107 |
+
And that gives rise.
|
| 108 |
+
|
| 109 |
+
28
|
| 110 |
+
00:02:23,686 --> 00:02:27,878
|
| 111 |
+
The difficulties of quantum mechanics.
|
| 112 |
+
|
| 113 |
+
29
|
| 114 |
+
00:02:30,886 --> 00:02:34,406
|
| 115 |
+
Viklav says that is no explanation.
|
| 116 |
+
|
| 117 |
+
30
|
| 118 |
+
00:02:35,142 --> 00:02:53,350
|
| 119 |
+
Because I don't know what an observer is. An observer, I am an observer. I don't know myself. Having seen something you don't understand by something else that you don't understand is not a great feat.
|
| 120 |
+
|
| 121 |
+
31
|
| 122 |
+
00:02:53,670 --> 00:03:01,798
|
| 123 |
+
I had the same discussion. Eugene would not listen to my answer. I had the same discussion with John Franklin.
|
| 124 |
+
|
| 125 |
+
32
|
| 126 |
+
00:03:02,470 --> 00:03:04,998
|
| 127 |
+
And he listened to my answer.
|
| 128 |
+
|
| 129 |
+
33
|
| 130 |
+
00:03:05,222 --> 00:03:07,974
|
| 131 |
+
And I am glad to say, here it is for you.
|
| 132 |
+
|
| 133 |
+
34
|
| 134 |
+
00:03:08,902 --> 00:03:10,342
|
| 135 |
+
And to explain this.
|
| 136 |
+
|
| 137 |
+
35
|
| 138 |
+
00:03:11,046 --> 00:03:13,702
|
| 139 |
+
I better tell you the sharpest objection.
|
| 140 |
+
|
| 141 |
+
36
|
| 142 |
+
00:03:14,694 --> 00:03:17,286
|
| 143 |
+
That has been made to the uncertainty principle.
|
| 144 |
+
|
| 145 |
+
37
|
| 146 |
+
00:03:18,502 --> 00:03:20,358
|
| 147 |
+
That is connected with the name.
|
| 148 |
+
|
| 149 |
+
38
|
| 150 |
+
00:03:21,574 --> 00:03:23,078
|
| 151 |
+
Of the physicist.
|
| 152 |
+
|
| 153 |
+
39
|
| 154 |
+
00:03:24,710 --> 00:03:26,726
|
| 155 |
+
Made the first good wave function.
|
| 156 |
+
|
| 157 |
+
40
|
| 158 |
+
00:03:27,334 --> 00:03:29,222
|
| 159 |
+
Good description of the hydrogen atom.
|
| 160 |
+
|
| 161 |
+
41
|
| 162 |
+
00:03:29,766 --> 00:03:30,342
|
| 163 |
+
Sure, dude.
|
| 164 |
+
|
| 165 |
+
42
|
| 166 |
+
00:03:32,102 --> 00:03:32,646
|
| 167 |
+
In the.
|
| 168 |
+
|
| 169 |
+
43
|
| 170 |
+
00:03:33,062 --> 00:03:35,366
|
| 171 |
+
Story. It is famous.
|
| 172 |
+
|
| 173 |
+
44
|
| 174 |
+
00:03:36,358 --> 00:03:37,158
|
| 175 |
+
And known.
|
| 176 |
+
|
| 177 |
+
45
|
| 178 |
+
00:03:38,246 --> 00:03:41,158
|
| 179 |
+
As a story of Shirdinga's cat.
|
| 180 |
+
|
| 181 |
+
46
|
| 182 |
+
00:03:44,262 --> 00:03:45,574
|
| 183 |
+
We have the following arrangement.
|
| 184 |
+
|
| 185 |
+
47
|
| 186 |
+
00:03:49,158 --> 00:03:50,342
|
| 187 |
+
Here we have.
|
| 188 |
+
|
| 189 |
+
48
|
| 190 |
+
00:03:50,790 --> 00:03:52,262
|
| 191 |
+
Radioactive substances.
|
| 192 |
+
|
| 193 |
+
49
|
| 194 |
+
00:03:55,430 --> 00:03:56,710
|
| 195 |
+
That emits.
|
| 196 |
+
|
| 197 |
+
50
|
| 198 |
+
00:03:57,830 --> 00:03:58,790
|
| 199 |
+
On the average.
|
| 200 |
+
|
| 201 |
+
51
|
| 202 |
+
00:03:59,270 --> 00:04:00,998
|
| 203 |
+
E patologo, è un alfa patologo.
|
| 204 |
+
|
| 205 |
+
52
|
| 206 |
+
00:04:01,446 --> 00:04:03,206
|
| 207 |
+
Once every second, on average.
|
| 208 |
+
|
| 209 |
+
53
|
| 210 |
+
00:04:05,030 --> 00:04:06,438
|
| 211 |
+
Now here I have a counter.
|
| 212 |
+
|
| 213 |
+
54
|
| 214 |
+
00:04:08,806 --> 00:04:10,566
|
| 215 |
+
And I closed that counter, so it won't count.
|
| 216 |
+
|
| 217 |
+
55
|
| 218 |
+
00:04:11,654 --> 00:04:13,126
|
| 219 |
+
Except that I open it.
|
| 220 |
+
|
| 221 |
+
56
|
| 222 |
+
00:04:13,382 --> 00:04:14,310
|
| 223 |
+
For half a second.
|
| 224 |
+
|
| 225 |
+
57
|
| 226 |
+
00:04:15,558 --> 00:04:17,062
|
| 227 |
+
If in that half a second.
|
| 228 |
+
|
| 229 |
+
58
|
| 230 |
+
00:04:19,046 --> 00:04:21,798
|
| 231 |
+
A particular life's the probability is one half.
|
| 232 |
+
|
| 233 |
+
59
|
| 234 |
+
00:04:23,782 --> 00:04:24,390
|
| 235 |
+
Then.
|
| 236 |
+
|
| 237 |
+
60
|
| 238 |
+
00:04:25,478 --> 00:04:28,134
|
| 239 |
+
The same apparatus that I have already used.
|
| 240 |
+
|
| 241 |
+
61
|
| 242 |
+
00:04:28,870 --> 00:04:31,046
|
| 243 |
+
Can be coupled into other apparatus.
|
| 244 |
+
|
| 245 |
+
62
|
| 246 |
+
00:04:31,430 --> 00:04:33,286
|
| 247 |
+
That will open a horrible door.
|
| 248 |
+
|
| 249 |
+
63
|
| 250 |
+
00:04:33,766 --> 00:04:35,494
|
| 251 |
+
Which will let out some poison.
|
| 252 |
+
|
| 253 |
+
64
|
| 254 |
+
00:04:35,878 --> 00:04:36,806
|
| 255 |
+
比菲尔奇特。
|
| 256 |
+
|
| 257 |
+
65
|
| 258 |
+
00:04:39,174 --> 00:04:39,622
|
| 259 |
+
So.
|
| 260 |
+
|
| 261 |
+
66
|
| 262 |
+
00:04:41,958 --> 00:04:44,102
|
| 263 |
+
The quantum mechanical description is.
|
| 264 |
+
|
| 265 |
+
67
|
| 266 |
+
00:04:45,862 --> 00:04:48,486
|
| 267 |
+
A probability distribution.
|
| 268 |
+
|
| 269 |
+
68
|
| 270 |
+
00:04:49,510 --> 00:04:50,342
|
| 271 |
+
After a while.
|
| 272 |
+
|
| 273 |
+
69
|
| 274 |
+
00:04:52,166 --> 00:04:53,158
|
| 275 |
+
With the cat.
|
| 276 |
+
|
| 277 |
+
70
|
| 278 |
+
00:04:54,118 --> 00:04:56,262
|
| 279 |
+
The probability of cat being alive.
|
| 280 |
+
|
| 281 |
+
71
|
| 282 |
+
00:04:57,830 --> 00:04:59,302
|
| 283 |
+
Big debt, one half.
|
| 284 |
+
|
| 285 |
+
72
|
| 286 |
+
00:05:00,326 --> 00:05:02,726
|
| 287 |
+
And the correct description is that I don't know.
|
| 288 |
+
|
| 289 |
+
73
|
| 290 |
+
00:05:03,334 --> 00:05:05,318
|
| 291 |
+
Now here comes the observer. It looks.
|
| 292 |
+
|
| 293 |
+
74
|
| 294 |
+
00:05:06,950 --> 00:05:09,382
|
| 295 |
+
And he's looking for either result.
|
| 296 |
+
|
| 297 |
+
75
|
| 298 |
+
00:05:10,438 --> 00:05:11,974
|
| 299 |
+
In killing the cat for good.
|
| 300 |
+
|
| 301 |
+
76
|
| 302 |
+
00:05:13,702 --> 00:05:14,758
|
| 303 |
+
For reviving it.
|
| 304 |
+
|
| 305 |
+
77
|
| 306 |
+
00:05:16,550 --> 00:05:18,374
|
| 307 |
+
And this finishes.
|
| 308 |
+
|
| 309 |
+
78
|
| 310 |
+
00:05:18,598 --> 00:05:19,334
|
| 311 |
+
是那个。
|
| 312 |
+
|
| 313 |
+
79
|
| 314 |
+
00:05:19,718 --> 00:05:20,838
|
| 315 |
+
I can't believe.
|
| 316 |
+
|
| 317 |
+
80
|
| 318 |
+
00:05:24,326 --> 00:05:26,566
|
| 319 |
+
This is an objection published.
|
| 320 |
+
|
| 321 |
+
81
|
| 322 |
+
00:05:27,558 --> 00:05:28,774
|
| 323 |
+
Generally quoted.
|
| 324 |
+
|
| 325 |
+
82
|
| 326 |
+
00:05:29,446 --> 00:05:31,974
|
| 327 |
+
My scientific listeners will know.
|
| 328 |
+
|
| 329 |
+
83
|
| 330 |
+
00:05:32,870 --> 00:05:34,694
|
| 331 |
+
That this is age old.
|
| 332 |
+
|
| 333 |
+
84
|
| 334 |
+
00:05:35,078 --> 00:05:35,878
|
| 335 |
+
And not forgotten.
|
| 336 |
+
|
| 337 |
+
85
|
| 338 |
+
00:05:36,294 --> 00:05:36,870
|
| 339 |
+
Very well.
|
| 340 |
+
|
| 341 |
+
86
|
| 342 |
+
00:05:40,582 --> 00:05:42,310
|
| 343 |
+
I have no objection to any of this.
|
| 344 |
+
|
| 345 |
+
87
|
| 346 |
+
00:05:42,566 --> 00:05:43,046
|
| 347 |
+
Except.
|
| 348 |
+
|
| 349 |
+
88
|
| 350 |
+
00:05:44,646 --> 00:05:45,382
|
| 351 |
+
That I say.
|
| 352 |
+
|
| 353 |
+
89
|
| 354 |
+
00:05:47,334 --> 00:05:49,446
|
| 355 |
+
I don't need to look.
|