mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-23 15:43:54 +08:00
47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
from config.logger import setup_logging
|
|
import requests, json
|
|
from core.providers.llm.base import LLMProviderBase
|
|
|
|
TAG = __name__
|
|
logger = setup_logging()
|
|
|
|
|
|
class LLMProvider(LLMProviderBase):
|
|
def __init__(self, config):
|
|
|
|
self.model_name = config.get("model_name")
|
|
self.base_url = config.get("base_url", "http://localhost:11434")
|
|
|
|
def response(self, session_id, dialogue):
|
|
try:
|
|
# Convert dialogue format to Ollama format
|
|
prompt = ""
|
|
for msg in dialogue:
|
|
if msg["role"] == "system":
|
|
prompt += f"System: {msg['content']}\n"
|
|
elif msg["role"] == "user":
|
|
prompt += f"User: {msg['content']}\n"
|
|
elif msg["role"] == "assistant":
|
|
prompt += f"Assistant: {msg['content']}\n"
|
|
|
|
# Make request to Ollama API
|
|
response = requests.post(
|
|
f"{self.base_url}/api/generate",
|
|
json={
|
|
"model": self.model_name,
|
|
"prompt": prompt,
|
|
"stream": True
|
|
},
|
|
stream=True
|
|
)
|
|
|
|
for line in response.iter_lines():
|
|
if line:
|
|
json_response = json.loads(line)
|
|
if "response" in json_response:
|
|
yield json_response["response"]
|
|
|
|
except Exception as e:
|
|
logger.bind(tag=TAG).error(f"Error in Ollama response generation: {e}")
|
|
yield "【Ollama服务响应异常】"
|