baca-baca dikit, sambil rubah-rubah dikit
This commit is contained in:
parent
bf5c0bd43e
commit
346223d1a2
@ -5,25 +5,16 @@ import urllib.request
|
|||||||
import urllib.error
|
import urllib.error
|
||||||
|
|
||||||
class _LLMFail(Exception):
|
class _LLMFail(Exception):
|
||||||
"""Kegagalan network dari satu kandidat chain.
|
"""
|
||||||
|
- 'auth' : 401/403 → rotasi key (coba key berikutnya di provider yang sama)
|
||||||
kind:
|
- 'unreachable' : koneksi gagal / timeout / 5xx / 429 / 404 → pindah model/provider
|
||||||
- 'auth' : 401/403 → rotasi key (coba key berikutnya di provider yang sama)
|
|
||||||
- 'unreachable' : koneksi gagal / timeout / 5xx / 429 / 404 → pindah model/provider
|
|
||||||
"""
|
"""
|
||||||
def __init__(self, kind, message):
|
def __init__(self, kind, message):
|
||||||
super().__init__(message)
|
super().__init__(message)
|
||||||
self.kind = kind
|
self.kind = kind
|
||||||
self.message = message
|
self.message = message
|
||||||
|
|
||||||
|
|
||||||
class LLMClient:
|
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):
|
def __init__(self, base_url, model, api_key, timeout=600):
|
||||||
self.base_url = (base_url or "").rstrip('/')
|
self.base_url = (base_url or "").rstrip('/')
|
||||||
@ -32,12 +23,19 @@ class LLMClient:
|
|||||||
self.timeout = timeout
|
self.timeout = timeout
|
||||||
self.cancel_requested = False
|
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._chains: dict[str, list[dict]] = {}
|
||||||
self._chain: list[dict] | None = None
|
self._chain: list[dict] | None = None
|
||||||
self._chain_key: str | None = None
|
self._chain_key: str | None = None
|
||||||
self._chain_index = 0
|
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 ---
|
# ------------------------------------------------------------ config ---
|
||||||
|
|
||||||
def set_chains(self, chains):
|
def set_chains(self, chains):
|
||||||
@ -108,11 +106,15 @@ class LLMClient:
|
|||||||
return "llm"
|
return "llm"
|
||||||
|
|
||||||
def chat(self, messages, tools=None, on_stream_chunk=None, disable_reasoning=False, tool_reminder=None):
|
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(
|
return self._chat_once(
|
||||||
self.base_url, self.model, self.api_key, messages,
|
self.base_url, self.model, self.api_key,
|
||||||
tools=tools, on_stream_chunk=on_stream_chunk,
|
messages,
|
||||||
disable_reasoning=disable_reasoning, tool_reminder=tool_reminder,
|
tools=tools,
|
||||||
|
on_stream_chunk=on_stream_chunk,
|
||||||
|
disable_reasoning=disable_reasoning,
|
||||||
|
tool_reminder=tool_reminder,
|
||||||
)
|
)
|
||||||
|
|
||||||
chain_type = self._pick_chain_type(messages)
|
chain_type = self._pick_chain_type(messages)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user