Widgets
Widgets
Widget이 뭔가요?
많은 모델 저장소에는 누구나 브라우저에서 바로 추론을 실행할 수 있는 widget이 있어요. 이 widget은 Inference Providers로 구동돼요. Inference Providers는 서버리스 추론 파트너에 기반해 개발자에게 수백 개의 머신러닝 모델에 대한 간소화되고 통합된 접근을 제공해요.
출처: 문서
본문
현재 인기 모델의 예시 몇 가지:
- DeepSeek V3 - 최첨단 오픈 가중치 대화형 모델
- Flux Kontext - 이미지 편집용 오픈 가중치 트랜스포머 모델
- Falconsai의 NSFW Detection - 이미지 콘텐츠 모더레이션
- ResembleAI의 Chatterbox - 프로덕션급 오픈소스 텍스트-음성 변환 모델
더 많은 모델과 widget은 모델 페이지에서 탐색하거나, Inference Playground에서 대화형으로 시험해볼 수 있어요.
widget 활성화
widget은 모델이 최소한 하나의 Inference Provider에 호스팅될 때 표시돼요. 이는 모델 추론의 최적 성능과 신뢰성을 보장하기 위해서예요. Providers는 자신이 배포할 모델을 자율적으로 선택·제어해요.
표시되는 widget 유형(text to image, automatic speech recognition 등)은 모델의 pipeline_tag에서 추론돼요. pipeline_tag는 Hub가 모든 모델에 대해 자동 계산하려는 특수 태그예요. 유일한 예외는 conversational widget으로, pipeline_tag가 text-generation 또는 image-text-to-text인 모든 모델에 표시돼요. 단순함을 위해 모델당 widget 하나만 노출하기로 했어요.
transformers 같은 일부 라이브러리에서는 구성 파일(config.json)에서 모델 유형을 자동으로 추론할 수 있어요. 아키텍처가 유형을 결정할 수 있죠. 예를 들어 AutoModelForTokenClassification은 token-classification에 해당해요. 관심이 있다면 이 gist에서 의사 코드를 볼 수 있어요.
대부분의 다른 사용 사례에서는 모델 태그로 모델 task 유형을 결정해요. 예를 들어 모델 카드 메타데이터에 tag: text-classification이 있으면 추론된 pipeline_tag는 text-classification이 돼요.
모델 카드 메타데이터에서 pipeline_tag: xxx로 파이프라인 유형을 항상 수동으로 덮어쓸 수 있어요. (메타데이터 GUI 편집기로도 할 수 있어요.)
모델의 widget 예시 입력을 어떻게 제어하나요?
모델 카드 메타데이터 섹션에서 widget 입력을 지정할 수 있어요.
widget:
- text: "This new restaurant has amazing food and great service!"
example_title: "Positive Review"
- text: "I'm really disappointed with this product. Poor quality and overpriced."
example_title: "Negative Review"
- text: "The weather is nice today."
example_title: "Neutral Statement"
하나 이상의 예시 입력을 제공할 수 있어요. widget의 예시 드롭다운 메뉴에서 Example 1, Example 2 등으로 표시돼요. 선택적으로 example_title도 제공할 수 있어요.
widget:
- text: "Is this review positive or negative? Review: Best cast iron skillet you will ever buy."
example_title: "Sentiment analysis"
- text: "Barack Obama nominated Hilary Clinton as his secretary of state on Monday. He chose her because she had ..."
example_title: "Coreference resolution"
- text: "On a shelf, there are five books: a gray book, a red book, a purple book, a blue book, and a black book ..."
example_title: "Logic puzzles"
- text: "The two men running to become New York City's next mayor will face off in their first debate Wednesday night ..."
example_title: "Reading comprehension"
또한 모델 카드 메타데이터에서 텍스트가 아닌 예시 입력을 지정할 수 있어요. 모든 widget 유형의 샘플 입력 형식 전체 목록은 여기를 참고하세요. 비전·오디오 widget 유형은 text 대신 src로 예시 입력을 제공하세요.
예를 들어 자동 음성 인식 task에서 사용자가 두 개의 샘플 오디오 파일 중 하나를 선택하게 하려면:
widget:
- src: https://example.org/somewhere/speech_samples/sample1.flac
example_title: Speech sample 1
- src: https://example.org/somewhere/speech_samples/sample2.flac
example_title: Speech sample 2
모델 저장소에 예시 파일을 포함시키고 사용할 수도 있어요.
widget:
- src: https://huggingface.co/username/model_repo/resolve/main/sample1.flac
example_title: Custom Speech Sample 1
더 편리하게, 파일이 해당 모델 저장소에 있으면 저장소 안의 파일명이나 경로만 사용하면 돼요.
widget:
- src: sample1.flac
example_title: Custom Speech Sample 1
저장소 안에 중첩되어 있으면:
widget:
- src: nested/directory/sample1.flac
일부 언어와 대부분의 widget 유형에 대한 예시 입력을 default-widget-inputs.ts 파일에서 제공해요. 빠진 예시가 있다면 커뮤니티의 PR을 환영해요!
예시 출력
예시 입력의 확장으로, 각 widget 예시에 대해 해당 모델 출력을 output 속성에 직접 설명할 수도 있어요.
이것은 모델이 아직 Inference Providers에서 지원되지 않을 때 유용해요. 모델 페이지가 어떻게 동작하고 어떤 결과를 주는지 여전히 보여줄 수 있으니까요.
예를 들어 automatic-speech-recognition 모델의 경우:
widget:
- src: sample1.flac
output:
text: "Hello my name is Julien"
output 속성은 Inference Providers의 출력 형식을 나타내는 YAML 딕셔너리여야 해요.
텍스트를 출력하는 모델은 위 예시를 보면 돼요.
라벨을 출력하는 모델(예: text-classification 모델)은 출력이 이렇게 생겨야 해요.
widget:
- text: "I liked this movie"
output:
- label: POSITIVE
score: 0.8
- label: NEGATIVE
score: 0.2
마지막으로 이미지, 오디오, 또는 다른 종류의 자산을 출력하는 모델은 저장소 안의 파일 이름·경로 또는 원격 URL을 가리키는 url 속성을 포함해야 해요. 예를 들어 text-to-image 모델의 경우:
widget:
- text: "picture of a futuristic tiger, artstation"
output:
url: images/tiger.jpg
Hugging Face UI에서 예시 출력을 표시할 수도 있어요. 예를 들어 text-to-image 모델로 멋진 이미지 생성 갤러리를 표시할 수 있어요.
Widget 가용성 및 Provider 지원
모든 모델이 widget을 가진 것은 아니에요. widget 가용성은 다음에 달려 있어요.
- Task 지원: 모델의 task가 Inference Providers 네트워크의 최소 하나의 provider에 지원되어야 함
- Provider 가용성: 최소 하나의 provider가 특정 모델을 서빙해야 함
- 모델 구성: 모델에 적절한 메타데이터와 구성 파일이 있어야 함
지원되는 task 전체 목록은 전용 문서 페이지를 참고하세요.
모든 provider와 지원하는 task 목록은 이 문서 페이지에서 확인할 수 있어요.
Provider 지원이 없는 모델은 모델 카드의 예시 출력으로 여전히 기능을 보여줄 수 있어요.
또한 모델 페이지에서 Ask for provider support 를 클릭해 충분한 커뮤니티 관심이 있으면 provider가 모델을 서빙하도록 독려할 수 있어요.
Inference Playground로 모델 탐색
모델을 애플리케이션에 통합하기 전에 Inference Playground에서 대화형으로 테스트할 수 있어요. 플레이그라운드에서:
- 커스텀 프롬프트로 다른 챗 컴플리션 모델 테스트
- 여러 모델에 걸친 응답 비교
- temperature, max tokens 같은 추론 파라미터 실험
- 특정 사용 사례에 완벽한 모델 찾기
플레이그라운드는 widget을 구동하는 것과 같은 Inference Providers 인프라를 사용하므로, 모델을 자신의 애플리케이션에 통합할 때 비슷한 성능과 기능을 기대할 수 있어요.
더 알아보기 (Learn more)
widget은 Inference Providers가 모델을 호스팅할 때 모델 페이지에 나타나고, 표시 유형은 pipeline_tag에서 추론돼요(pipeline_tag: xxx로 수동 덮어쓰기 가능). 모델 카드 메타데이터의 widget: 섹션으로 예시 입력을, output 속성으로 예시 출력을 커스터마이징할 수 있어요. 제공자 미지원 모델도 예시 출력으로 기능을 보여줄 수 있어요.