AssemblyAI

AssemblyAI

AssemblyAI의 패스스루 엔드포인트를 소개할게요. LiteLLM 프록시를 거쳐 AssemblyAI의 각종 엔드포인트를 네이티브 형식 그대로(변환 없이) 호출할 수 있어요. 즉 AssemblyAI SDK를 그대로 쓰면서도 베이스 URL만 LiteLLM 프록시로 바꾸면, 인증·로깅·비용 추적까지 한 번에 해결되는 구조예요.

출처: 문서

본문

지원 라우트는 아래와 같아요.

/assemblyai/*
api.assemblyai.com

유럽(EU) 지역 엔드포인트는 다음과 같죠.

/eu.assemblyai/*
eu.api.assemblyai.com

빠른 시작 (Quick Start)

먼저 AssemblyAI API 키를 환경 변수로 설정해요.

export ASSEMBLYAI_API_KEY=""

그다음 LiteLLM 프록시를 실행해요.

litellm
# RUNNING on http://0.0.0.0:4000

이제 /v2/transcripts 같은 엔드포인트를 프록시를 통해 호출하면 돼요. AssemblyAI 공식 SDK에서 베이스 URL만 프록시로 바꿔서 사용하는 예시를 볼게요. 음성 인식(transcription) 예시입니다.

import assemblyai as aai
aai.settings.base_url = "http://0.0.0.0:4000/assemblyai" # <your-proxy-base-url>/assemblyai
aai.settings.api_key = "Bearer sk-<your-litellm-api-key>" # Bearer <your-virtual-key>
# Use a publicly-accessible URL
audio_file = "https://assembly.ai/wildfires.mp3"
# Or use a local file:
# audio_file = "./example.mp3"
config = aai.TranscriptionConfig(
    speech_models=["universal-3-pro", "universal-2"],
    language_detection=True,
    speaker_labels=True,
    # Speech understanding features
    # sentiment_analysis=True,
    # entity_detection=True,
    # auto_chapters=True,
    # summarization=True,
    # summary_type=aai.SummarizationType.bullets,
    # redact_pii=True,
    # content_safety=True,
)
transcript = aai.Transcriber().transcribe(audio_file, config=config)
if transcript.status == aai.TranscriptStatus.error:
    raise RuntimeError(f"Transcription failed: {transcript.error}")
print(f"\nFull Transcript:\n\n{transcript.text}")
# Optionally print speaker diarization results
# for utterance in transcript.utterances:
#     print(f"Speaker {utterance.speaker}: {utterance.text}")

말하기 프롬프트(speech-to-text prompting)를 활용한 예시예요.

import assemblyai as aai
aai.settings.base_url = "http://0.0.0.0:4000/assemblyai" # <your-proxy-base-url>/assemblyai
aai.settings.api_key = "Bearer sk-<your-litellm-api-key>" # Bearer <your-virtual-key>
audio_file = "https://assemblyaiassets.com/audios/verbatim.mp3"
config = aai.TranscriptionConfig(
    speech_models=["universal-3-pro", "universal-2"],
    language_detection=True,
    prompt="Produce a transcript suitable for conversational analysis. Every disfluency is meaningful data. Include: fillers (um, uh, er, ah, hmm, mhm, like, you know, I mean), repetitions (I I, the the), restarts (I was- I went), stutters (th-that, b-but, no-not), and informal speech (gonna, wanna, gotta)",
)
transcript = aai.Transcriber().transcribe(audio_file, config)
print(transcript.text)

AssemblyAI EU 엔드포인트 호출

LITELLM_PROXY_BASE_URL 환경 변수를 활용하면 EU 엔드포인트도 쉽게 연결할 수 있어요. 베이스 URL을 <your-proxy-base-url>/eu.assemblyai로 설정하면 됩니다.

import assemblyai as aai
aai.settings.base_url = "http://0.0.0.0:4000/eu.assemblyai" # <your-proxy-base-url>/eu.assemblyai
aai.settings.api_key = "Bearer sk-<your-litellm-api-key>" # Bearer <your-virtual-key>
# Use a publicly-accessible URL
audio_file = "https://assembly.ai/wildfires.mp3"
# Or use a local file:
# audio_file = "./path/to/file.mp3"
transcriber = aai.Transcriber()
transcript = transcriber.transcribe(audio_file)
print(transcript)
print(transcript.id)

LLM 게이트웨이 (LLM Gateway)

AssemblyAI는 자체 LLM 게이트웨이 모델도 제공해요. LiteLLM을 통해서도 이 모델들을 호출할 수 있습니다.

LiteLLM Python SDK

import litellm
import os
os.environ["ASSEMBLYAI_API_KEY"] = "your-assemblyai-api-key"
response = litellm.completion(
    model="assemblyai/claude-sonnet-4-5-20250929",
    messages=[{"role": "user", "content": "What is the capital of France?"}]
)
print(response.choices[0].message.content)

LiteLLM 프록시

프록시 설정 파일(config.yaml)에 모델을 등록해요.

model_list:
  - model_name: assemblyai/*
    litellm_params:
      model: assemblyai/*
      api_key: os.environ/ASSEMBLYAI_API_KEY

프록시를 실행하고,

litellm --config config.yaml
# RUNNING on http://0.0.0.0:4000

OpenAI 호환 /v1/chat/completions로 호출하면 됩니다.

import requests
headers = {
    "authorization": "Bearer sk-<your-litellm-api-key>"  # Bearer <your-virtual-key>
}
response = requests.post(
    "http://0.0.0.0:4000/v1/chat/completions",
    headers=headers,
    json={
        "model": "assemblyai/claude-sonnet-4-5-20250929",
        "messages": [
            {"role": "user", "content": "What is the capital of France?"}
        ],
        "max_tokens": 1000
    }
)
result = response.json()
print(result["choices"][0]["message"]["content"])

더 알아보기 (Learn more)