Files
FoodClassifier/exp_multimodal/vlm_providers/ollama_provider.py
T

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}>"