62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
"""
|
|
Ollama VLM Provider
|
|
支持本地/自建 Ollama 服务
|
|
"""
|
|
|
|
import os
|
|
from typing import List
|
|
|
|
from .base import VLMProvider
|
|
|
|
|
|
class OllamaProvider(VLMProvider):
|
|
"""
|
|
Ollama 本地/自建服务提供商
|
|
使用 OpenAI-compatible API (/v1/chat/completions)
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
ollama_url: str = None,
|
|
model: str = None,
|
|
):
|
|
"""
|
|
Args:
|
|
ollama_url: Ollama 服务地址,默认从环境变量 OLLAMA_URL 读取
|
|
model: 模型名称,默认从环境变量 VLM_MODEL 读取
|
|
"""
|
|
self.ollama_url = ollama_url or os.getenv("OLLAMA_URL", "http://192.168.1.250:11434")
|
|
self.model = model or os.getenv("VLM_MODEL", "qwen2.5vl:32b")
|
|
|
|
def chat_vision(
|
|
self,
|
|
prompt: str,
|
|
image_paths: List[str],
|
|
temperature: float = 0.1,
|
|
timeout_sec: int = 120,
|
|
) -> str:
|
|
"""调用 Ollama 服务进行视觉推理"""
|
|
# 导入原有的 ollama_client 逻辑(复用代码)
|
|
from .. import ollama_client
|
|
|
|
# 临时覆盖模块常量(确保使用实例配置)
|
|
original_url = ollama_client.OLLAMA_URL
|
|
original_model = ollama_client.DEFAULT_MODEL
|
|
try:
|
|
ollama_client.OLLAMA_URL = self.ollama_url
|
|
ollama_client.DEFAULT_MODEL = self.model
|
|
return ollama_client.chat_vision(
|
|
prompt=prompt,
|
|
image_paths=image_paths,
|
|
temperature=temperature,
|
|
model=self.model,
|
|
timeout_sec=timeout_sec,
|
|
)
|
|
finally:
|
|
# 恢复原始值
|
|
ollama_client.OLLAMA_URL = original_url
|
|
ollama_client.DEFAULT_MODEL = original_model
|
|
|
|
def __repr__(self):
|
|
return f"<OllamaProvider url={self.ollama_url} model={self.model}>"
|