Files
xiaozhi-esp32-server/main/xiaozhi-server/core/providers/llm/base.py
T

35 lines
1.1 KiB
Python
Raw Normal View History

from abc import ABC, abstractmethod
2025-03-09 21:33:45 +08:00
from config.logger import setup_logging
2025-03-09 21:33:45 +08:00
TAG = __name__
logger = setup_logging()
2025-02-14 00:54:59 +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
def response_no_stream(self, system_prompt, user_prompt, **kwargs):
# 构造对话格式
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-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):
yield token, None