Skip to content

기본 프로바이더가 원격 API 이고, 스텁 폴백이 화면에서 구분되지 않음 #2

Description

@needsbuilder

배경

또박은 로컬 오픈웨이트 모델만으로 인터넷 없이 완결 동작한다. 원격 상용 API 는
LLMProvider Protocol 을 만족하는 여러 구현 중 하나일 뿐이며, 파이프라인의 필수
구성요소가 아니다.

그런데 코드는 정반대로 되어 있다.

  • ttobak/web/provider.py — 이름·환경변수가 없으면 anthropic 을 기본으로 고른다
  • ttobak/providers/__init__.py — Anthropic 을 "demo default", Ollama 를 "local
    fallback" 으로 라벨링

문서가 설명하는 설계와 코드의 실제 기본 동작이 어긋난다.

문제 1 — 기본값이 원격 API

ttobak web 을 그냥 실행하면 원격 API 경로를 먼저 탄다. 로컬 독립 구동이 이
프로젝트의 기본 전제인데, 그 사실이 코드에서는 드러나지 않는다.

문제 2 — 조용한 폴백 (이쪽이 더 위험하다)

API 키가 없으면 FakeProvider 로 폴백한다. 데모·CI 가 항상 떠야 하므로 폴백 자체는
유지할 가치가 있지만, 지금은 아무 표시 없이 떨어진다.

FakeProvider 는 LLM 을 호출하지 않고 미리 정해진 문장을 돌려준다. 키도 데몬도 없이
처음 실행한 사람 화면에는 이렇게 보인다.

쉬운 글로 바꾼 결과입니다.
자세한 내용은 원문을 확인하세요.

그럴듯한 한국어 문장이라 실제 변환 결과로 오인하기 쉽다. 사실을 보존한다고
주장하는 도구가 사실은 아무것도 읽지 않은 고정 문장을 내보내면서 그 사실을 알리지
않는 것은, 이 프로젝트의 정직성 원칙(CLAUDE.md)에 정면으로 어긋난다.

기대 동작

  1. 기본 프로바이더는 로컬(ollama)이어야 한다. 원격은 이름을 명시해야 닿는 경로로.
  2. 스텁으로 폴백하면 반드시 알린다. 터미널 경고만으로는 부족하다 — 웹 데모만 보는
    사람에게는 stderr 가 닿지 않으므로 UI 배너도 필요하다.
  3. 오타난 프로바이더 이름(--provider gpt-4o)도 조용히 스텁으로 떨어지면 안 된다.

관련

#1 (기본 로컬 모델 태그를 받을 수 없는 문제) 과 함께 고쳐야 로컬 기본 경로가 실제로
동작한다.


EN — The default provider is a remote API, contradicting the documented
local-first design, and the FakeProvider fallback happens silently: a first-time
user with no API key sees canned Korean sentences that look like a real conversion.
Fix: default to local ollama, and make every fallback loud (stderr + a banner in
the web UI).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions