baca-baca dikit, sambil rubah-rubah dikit

This commit is contained in:
Dita Aji Pratama 2026-09-14 12:49:54 +07:00
parent bf5c0bd43e
commit 346223d1a2

View File

@ -5,9 +5,7 @@ import urllib.request
import urllib.error
class _LLMFail(Exception):
"""Kegagalan network dari satu kandidat chain.
kind:
"""
- 'auth' : 401/403 rotasi key (coba key berikutnya di provider yang sama)
- 'unreachable' : koneksi gagal / timeout / 5xx / 429 / 404 pindah model/provider
"""
@ -16,14 +14,7 @@ class _LLMFail(Exception):
self.kind = kind
self.message = message
class LLMClient:
class Message:
def __init__(self, msg):
raw_content = msg.get('content', '') # Ambil konten mentah
self.content = gadget.strip_thinking(raw_content) if isinstance(raw_content, str) else raw_content # Auto-strip <thinking> dari content
self.tool_calls = msg.get('tool_calls', None) # Ambil tool calls
self.warning = None
def __init__(self, base_url, model, api_key, timeout=600):
self.base_url = (base_url or "").rstrip('/')
@ -32,12 +23,19 @@ class LLMClient:
self.timeout = timeout
self.cancel_requested = False
# Chain kandidat per tipe ('llm', 'imagevision', ...)
# Chaining kandidat set model per tipe ('llm', 'imagevision', ...)
self._chains: dict[str, list[dict]] = {}
self._chain: list[dict] | None = None
self._chain_key: str | None = None
self._chain_index = 0
class Message:
def __init__(self, msg):
raw_content = msg.get('content', '') # Ambil konten mentah
self.content = gadget.strip_thinking(raw_content) if isinstance(raw_content, str) else raw_content # Auto-strip <thinking> dari content
self.tool_calls = msg.get('tool_calls', None) # Ambil tool calls
self.warning = None
# ------------------------------------------------------------ config ---
def set_chains(self, chains):
@ -108,11 +106,15 @@ class LLMClient:
return "llm"
def chat(self, messages, tools=None, on_stream_chunk=None, disable_reasoning=False, tool_reminder=None):
if not self._chains:
if not self._chains: # kalau bukan chain
return self._chat_once(
self.base_url, self.model, self.api_key, messages,
tools=tools, on_stream_chunk=on_stream_chunk,
disable_reasoning=disable_reasoning, tool_reminder=tool_reminder,
self.base_url, self.model, self.api_key,
messages,
tools=tools,
on_stream_chunk=on_stream_chunk,
disable_reasoning=disable_reasoning,
tool_reminder=tool_reminder,
)
chain_type = self._pick_chain_type(messages)