2025-02-11 23:13:18 +08:00
|
|
|
from abc import ABC, abstractmethod
|
2025-03-09 21:33:45 +08:00
|
|
|
from config.logger import setup_logging
|
2025-02-11 23:13:18 +08:00
|
|
|
|
2025-03-09 21:33:45 +08:00
|
|
|
TAG = __name__
|
|
|
|
|
logger = setup_logging()
|
2025-02-14 00:54:59 +08:00
|
|
|
|
2025-02-11 23:13:18 +08:00
|
|
|
class LLMProviderBase(ABC):
|
|
|
|
|
@abstractmethod
|
|
|
|
|
def response(self, session_id, dialogue):
|
|
|
|
|
"""LLM response generator"""
|
2025-02-14 00:54:59 +08:00
|
|
|
pass
|
2025-03-09 21:33:45 +08:00
|
|
|
|
2025-05-22 17:14:58 +08:00
|
|
|
def response_no_stream(self, system_prompt, user_prompt, **kwargs):
|
2026-01-25 16:45:01 +08:00
|
|
|
# 构造对话格式
|
|
|
|
|
dialogue = [
|
|
|
|
|
{"role": "system", "content": system_prompt},
|
|
|
|
|
{"role": "user", "content": user_prompt}
|
|
|
|
|
]
|
|
|
|
|
result = ""
|
|
|
|
|
for part in self.response("", dialogue, **kwargs):
|
|
|
|
|
result += part
|
|
|
|
|
return result
|
2025-03-09 21:33:45 +08:00
|
|
|
|
|
|
|
|
def response_with_functions(self, session_id, dialogue, functions=None):
|
|
|
|
|
"""
|
|
|
|
|
Default implementation for function calling (streaming)
|
|
|
|
|
This should be overridden by providers that support function calls
|
2025-05-22 17:14:58 +08:00
|
|
|
|
2025-03-09 21:33:45 +08:00
|
|
|
Returns: generator that yields either text tokens or a special function call token
|
|
|
|
|
"""
|
|
|
|
|
# For providers that don't support functions, just return regular response
|
|
|
|
|
for token in self.response(session_id, dialogue):
|
2025-04-16 08:56:23 +08:00
|
|
|
yield token, None
|
|
|
|
|
|