ElGraph.RateLimiter (ElGraph v0.3.0)

Copy Markdown View Source

프로바이더별 동시 실행 제한 세마포어 (SPEC §5).

에이전트 50개가 같은 LLM API를 동시에 때리는 상황의 필수 장치. 보유자(holder)를 모니터링해 프로세스가 죽으면 슬롯을 자동 회수한다 — 누수 없음. 프로세스당 슬롯 1개 (재진입 불가).

children = [{ElGraph.RateLimiter, limit: 5, name: MyApp.OpenAILimiter}]
ElGraph.RateLimiter.with_limit(MyApp.OpenAILimiter, fn -> OpenAI.chat(...) end)

Summary

Functions

슬롯을 획득한다. 빈 슬롯이 없으면 대기한다.

Returns a specification to start this module under a supervisor.

슬롯을 반환한다.

슬롯 안에서 함수를 실행한다. 예외가 나도 슬롯은 반환된다.

Functions

acquire(server, timeout \\ 5000)

@spec acquire(GenServer.server(), timeout()) :: :ok

슬롯을 획득한다. 빈 슬롯이 없으면 대기한다.

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

release(server)

@spec release(GenServer.server()) :: :ok

슬롯을 반환한다.

start_link(opts)

with_limit(server, fun)

@spec with_limit(GenServer.server(), (-> result)) :: result when result: term()

슬롯 안에서 함수를 실행한다. 예외가 나도 슬롯은 반환된다.