본문 바로가기
C.W.K.
Lesson 03 of 05 · published

가장 빠른 것부터, 그리고 두 모드

~14 min · latency, streaming, modes, corpus

Level 0첫 단어
0 XP0/47 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

순서가 곧 원칙이야

그날 아빠는 설계 질문 목록에 답하면서, 세 번째 항목에서 지금도 Spark의 모든 화면이 따르는 규칙을 정했어.

3. 괜찮아. 원칙이 가장 빠른 순으로 먼저 보여주는 거야. 텍스트 -> 저해상도 -> 고해상도 식으로. 나중에 이미지 번역하는 건 easel이나 ember 랑 연동하면 돼.

이게 불변식 2가 됐어. 결과는 층이 준비되는 순서대로 보여줘. 텍스트, 이어서 저해상도 그림, 마지막으로 고해상도 그림. 목소리보다 카드가 먼저. 고품질 모드의 버전은 끝나는 대로 하나씩. 빠른 층은 느린 층을 기다리지 않아. 이 규칙이 말하지 않는 것도 봐둬. 빨라 보이려고 느린 층을 버리지는 않아. 폰에 그린 오버레이가 Ember가 다시 그릴 수 있는 그림을 취소하지 않고, 지금 읽히는 카드도 결국 목소리를 받아. 다만 한 층은 아빠가 불러야 와. Ember 그림은 저절로 시작하지 않아. 아빠가 탭해서 따로 부탁하는 그림 턴이고, 그때 비로소 제일 느린 층이 출발해.

가장 빠른 것부터, 실제로는 이렇게

  • 사진. 나는 읽은 걸 작은 결과들로 잘게 흘려보내. 엔진은 줄 하나가 완성되는 순간 그 줄을 보여줘. 폰은 번역을 해당 줄 위에 대충 덮어 그리고, 아빠가 부탁하면 글자를 새로 앉힌 생성 그림이 한참 뒤에 따라와.
  • 카드. 내 목소리가 생기기 전에 글자부터 읽혀.
  • 고품질 모드. 브레인마다 버전이 끝나는 대로 떠. 제일 느린 걸 기다리지 않아.
  • 전송. 폰은 내 답이 제일 빨리 보이는 순서로 올려. 순간, 내가 읽을 작은 사본, 턴, 그리고 맨 마지막에 무거운 원본(첫 번째 코드 블록).

아키텍처에 적힌 측정값을 보면 순서가 왜 중요한지 알 수 있어. 실용 슬롯에서 사진 한 장의 첫 번역 줄은 요청 23초 뒤에 떴고, 열두 번째 결과는 32초에 들어왔어. 스트리밍 덕분에 아빠는 답 전체가 생기기 9초 전부터 읽을 게 있었던 거야. 라이브 카메라에선 새 텍스트가 라이브 레인을 거쳐 중앙값 3.4초 걸렸고, 아빠가 이미 만난 텍스트는 코퍼스에서 20밀리초 만에 돌아왔어. 원칙 하나에 시간 척도가 셋이야.

모드 둘, 모드마다 경계 하나

이어진 결정은 번역을 둘로 갈랐어.

번역 모드는 2가지여야해. 실용 vs 고품질.

실용이면 브레인 하나면 되지만, 고품질이면 브레인을 복수 선택해서 다른 버전을 볼 수 있어야 하고, 원문을 보지 않은 브레인의 cold-review도 선택적으로 가능하게. 길이 제한 없어야 하고.
실용고품질
브레인을 고르는 쪽가족 브레인 컨트롤 플레인 (Spark 슬롯)아빠가 작업마다, 가족 브레인 카탈로그에서
몇 개하나여럿, 나란히
돌아오는 것줄 번역이랑 바로 쓸 표현 카드. 일부러 짧게정한 용도에 맞춘 전체 버전
리뷰없어원문을 안 보는 콜드 리뷰, 원하면
길이실용이니까 짧게제한 없어. 긴 원문은 원문 자체의 구조에서 나눠

이게 불변식 9야. 모드는 둘, 경계는 모드마다 하나. 실용 턴은 중앙 슬롯을 타고, 그 브레인을 Spark가 직접 고르는 일은 없어. 고품질 모드의 버전은 아빠가 그 작업에 고른 브레인과 정한 용도를 따라가. 그 선택은 어느 슬롯에도 손대지 않고. 엔진의 브레인 컨트롤 심은 이 분리를 독스트링 하나에 다 적어놨어(두 번째 코드 블록). 고품질 모드는 트랙 7에서 지어. 행으로 된 용도, 좌석, 섹션, 블라인드 리뷰까지.

모든 게 코퍼스야

같은 메시지에 이 퀘스트 전체가 기대는 줄도 들어 있었어.

실용이든 고품질이든, 맥락은 쌓여야 해. 한번 쓰고 버리는 게 아니라 모든게 코퍼스 자료야.

불변식 3이 이걸 구조로 만들어. Spark가 잡거나 만든 건 어느 모드에서든 버리지 않아. 결과마다 계보가 붙어. 사진이랑 Vision 줄, 턴, 브레인, 모델, 노력 수준, 용도까지. 그렇게 쌓인 코퍼스가 뒤에 오는 턴들의 맥락이 돼. 그 밑엔 덧붙이기만 하는 로그가 있어서, 고치는 것도 지우는 것도 되살리는 것도 전부 새 항목 하나로 남아. 그 로그는 트랙 2에서 열어볼게.

원칙: 속도를 약속하지 말고 순서를 약속해. 속도는 브레인, 회선, 사진에 따라 달라져. 순서는 모든 화면이 매번 지킬 수 있어.

Code

cwkSpark, clients/apple/SparkMobile/Sources/Outbox.swift: 피파의 답이 제일 빨리 보이는 전송 순서 (원문 그대로, 184-194행. 주석의 '4xx면 세워 둔다'는 실제보다 넓어. 킷의 드레인은 401, 403, 408, 425, 429를 다시 시도해. 트랙 9 참고)·swift
    /// The drain's send, in the order that shows Pippa's answer soonest: the
    /// moment, the small copy, the turn, and only then the heavy original.
    /// Every step is idempotent (phone-minted ids, request ids, content
    /// hashes), and a step already done is skipped on a retry. 4xx parks the
    /// entry for Dad to see; anything else waits for the next pass.
    ///
    /// Each file goes through the kit's `FileUploadRun`, so `report` gets a
    /// line from the first second of the send: which file, MB of MB, the rate,
    /// the seconds, and once quiet what the link check found (never a timer).
    func send(_ entry: QueuedMoment, outbox: MomentOutbox, label: String?,
              report: @escaping @Sendable (MediaUpload) -> Void = { _ in }) async throws -> String {
cwkSpark, backend/brain_control.py: 실용 작업엔 슬롯 둘, 고품질 모드는 작업마다 고르기 (원문 그대로, 1-15행)·python
"""Spark's Brain Control Plane shim: binds the vendored kit client
(``kit_brain_control.py``, owned by cwkSiblingKit) to this app's identity:
app_id ``spark``, its slots, the data dir, and the family control base.

``pippa_actions`` carries every turn in a thread (Dad's one-slot posture
for Waystone-shaped apps): photo and text translation, interpretation
cards and relays, explanations. ``live_lane`` carries only the live
camera's one-shot calls through the utility door. The architecture let the
live lane ride the practical slot unless a measurement argued for its own;
the 2026-09-25 measurement did (scripts/measure-live-lane.py: four signs,
Claude at low effort a median 3.4 s, at the practical slot's high 5.9 s),
so it has its own slot, declared at low, and Dad sets both from the family
Brains surface. High-quality translation is the one place Dad picks brains
per job, from the kit catalog; those picks never touch either slot
(docs/SPARK-ARCHITECTURE.md, Runtime and Deployment Shape).

External links

Exercise

네 앱에서 느린 호출 하나를 기다렸다가 전부 한꺼번에 보여주는 화면을 하나 골라봐. 결과를 언제쯤 준비되는지에 따라 층으로 나누고, 층마다 도착하는 대로 뜨게 화면을 다시 설계해 봐. 그리고 어떤 층도 해서는 안 되는 일 하나를 적어.
Hint
층마다 대략 걸리는 시간을 적어봐. Spark 숫자는 20 ms 코퍼스 적중에서 3.4초 라이브 레인, 23초 첫 줄, 32초 전체 답까지 이어져. 한 층이 다른 층에 기대면 순서는 정해져 있어. 안 기대면 빠른 쪽이 먼저야. Spark에서 금지된 수는 빠른 층이 느린 층을 기다리는 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.