cactus-compute/needle의 Needle 2는 작은 언어 모델을 기기에 올리는 방법을 조금 다르게 제안한다. 4,500만 파라미터 모델 전체를 14MB 단일 바이너리에 담고, 한 세션을 약 28MB RAM에서 실행한다. 대상은 휴대폰이나 PC만이 아니다. 웨어러블, 스마트홈 기기, 로봇처럼 메모리와 네트워크 사용을 아껴야 하는 장치다.
이 모델의 역할은 자유로운 대화 상대에 가깝지 않다. 개발자가 먼저 도구와 JSON 스키마를 선언하면 Needle이 사용자의 입력에서 호출할 함수와 인자를 골라낸다. Python 함수의 타입 힌트와 docstring으로 시작할 수도 있고, Pydantic 모델을 넘겨 텍스트를 구조화된 데이터로 바꿀 수도 있다. 반환 형식은 모델이 나중에 고치는 JSON이 아니라, 스키마에서 컴파일한 byte-level grammar가 생성 단계부터 제한한다.
실행 모델이라는 성격은 메모리 관리에서도 드러난다. Needle 2는 256토큰 sliding window를 사용하면서 도구를 KV sink로 고정해 긴 대화가 메모리를 계속 늘리지 않도록 설계했다. 도구 목록이 커지면 retrieval head가 매 턴 상위 5개만 골라 문법 제약의 범위를 줄인다. 각 응답에는 learned head가 계산한 confidence score도 붙는다. 애플리케이션은 일정 점수 이상일 때만 행동을 실행하고, 낮은 점수는 다른 시스템으로 넘기는 정책을 만들 수 있다.
대신 자유도는 의도적으로 낮다. 선언된 도구로 처리할 수 없는 요청에는 빈 호출 []을 반환하며, 일반적인 자유 텍스트 답변으로 우회하지 않는다. reasoning 필드는 입력의 어느 부분에서 인자를 얻었는지 짧게 설명하지만, 문법 제약의 대상은 호출 JSON이다. 따라서 이 모델은 만능 비서보다 조명, 온도, 메시지 전송 같은 제한된 동작을 다루는 기기에 더 잘 맞는다.
구현 진입점도 단순하다. pip install cactus-needle 뒤 함수 데코레이터로 도구를 등록하고 run()으로 호출과 결과 전달을 묶을 수 있다. 직접 루프를 제어하려면 complete()가 raw call을 돌려준다. 모델은 Simple Attention Network 구조, CQ2-bit 압축, 자체 엔진을 함께 사용하며, 추론 엔진은 Hugging Face에서 한 번 내려받아 캐시한 뒤 네트워크 없이 실행한다.
이 저장소의 흥미로운 지점은 플러그인을 얼마나 많이 연결하느냐가 아니다. 기기 안에서 허용할 행동을 작은 스키마로 정하고, 모델의 출력도 그 계약 밖으로 나가지 않게 만드는 방식이다. 작은 모델을 배포한다는 말이 이제는 파라미터 수를 줄이는 일만이 아니라, 실행 가능한 범위와 실패 시의 경로까지 함께 줄이는 일에 가까워지고 있다.