feat(ai): config-driven sampling profile — triage T=0, primary T=0.3 top_p=0.9

P1 of family-adaptive-bengio (Mac mini 4-lever bundle).

AIModelConfig: temperature/top_p Optional fields (None = server default). _request OpenAI/MLX branch payload 조건부 sampling 인자 삽입. config.yaml ai.models.triage.temperature=0.0 (deterministic) / primary temperature=0.3 top_p=0.9 (summary creativity). fallback (Anthropic) branch 미적용 — 별 plan 범위. caller 코드 무변경.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
hyungi
2026-05-23 06:37:46 +00:00
parent e4cfd81e15
commit 5cb8d04b50
3 changed files with 18 additions and 6 deletions
+11 -6
View File
@@ -262,14 +262,19 @@ class AIClient:
data = response.json() data = response.json()
return data["content"][0]["text"] return data["content"][0]["text"]
else: else:
payload = {
"model": model_config.model,
"messages": [{"role": "user", "content": prompt}],
"max_tokens": model_config.max_tokens,
"chat_template_kwargs": {"enable_thinking": False},
}
if model_config.temperature is not None:
payload["temperature"] = model_config.temperature
if model_config.top_p is not None:
payload["top_p"] = model_config.top_p
response = await self._http.post( response = await self._http.post(
model_config.endpoint, model_config.endpoint,
json={ json=payload,
"model": model_config.model,
"messages": [{"role": "user", "content": prompt}],
"max_tokens": model_config.max_tokens,
"chat_template_kwargs": {"enable_thinking": False},
},
timeout=model_config.timeout, timeout=model_config.timeout,
) )
response.raise_for_status() response.raise_for_status()
+4
View File
@@ -26,6 +26,10 @@ class AIModelConfig(BaseModel):
# B-0: 4B/26B 에 부여한 실사용 컨텍스트 상한 (char). triage=120k, primary=260k. # B-0: 4B/26B 에 부여한 실사용 컨텍스트 상한 (char). triage=120k, primary=260k.
# classify_worker 가 에스컬레이션 판정 시 참고. 0/None 이면 상한 무시. # classify_worker 가 에스컬레이션 판정 시 참고. 0/None 이면 상한 무시.
context_char_limit: int | None = None context_char_limit: int | None = None
# P1 of family-adaptive-bengio (2026-05-23): config-driven sampling profile.
# None = MLX/OpenAI server default. Anthropic branch 는 미적용 (별 plan 범위).
temperature: float | None = None
top_p: float | None = None
class DeepSummaryBacklogConfig(BaseModel): class DeepSummaryBacklogConfig(BaseModel):
+3
View File
@@ -17,6 +17,7 @@ ai:
max_tokens: 4096 max_tokens: 4096
timeout: 30 timeout: 30
context_char_limit: 120000 context_char_limit: 120000
temperature: 0.0
# primary: 에스컬레이션 전용. 26B MLX (맥미니 Semaphore(1) 보호 대상). # primary: 에스컬레이션 전용. 26B MLX (맥미니 Semaphore(1) 보호 대상).
primary: primary:
@@ -25,6 +26,8 @@ ai:
max_tokens: 8192 max_tokens: 8192
timeout: 180 timeout: 180
context_char_limit: 260000 context_char_limit: 260000
temperature: 0.3
top_p: 0.9
# fallback: primary 장애 시 최후 방어선. Claude Sonnet 4 API (소액 한도, 자동 trigger). # fallback: primary 장애 시 최후 방어선. Claude Sonnet 4 API (소액 한도, 자동 trigger).
# 호출 빈도 낮음 가정 (Mac mini 가 거의 항상 up) → premium 과 budget 공유 OK. # 호출 빈도 낮음 가정 (Mac mini 가 거의 항상 up) → premium 과 budget 공유 OK.