Coverage for agentos/llm/ollama_provider.py: 55%
22 statements
« prev ^ index » next coverage.py v7.14.3, created at 2026-07-02 09:59 +0800
« prev ^ index » next coverage.py v7.14.3, created at 2026-07-02 09:59 +0800
1"""
2Ollama Provider — 本地 LLM 推理,OpenAI 兼容协议。
3零额外依赖,纯 httpx 实现。支持任意 Ollama 模型(qwen2.5, llama3, gemma, mistral 等)。
5用法:
6 provider = OllamaProvider(model="qwen2.5:7b", base_url="http://localhost:11434/v1")
7"""
9from __future__ import annotations
11from typing import Any
13from agentos.llm.openai_provider import OpenAIProvider
15__all__ = ["OllamaProvider"]
17OLLAMA_DEFAULT_BASE = "http://localhost:11434/v1"
18OLLAMA_DEFAULT_MODEL = "qwen2.5:7b"
21class OllamaProvider(OpenAIProvider):
22 """Ollama 本地 LLM Provider — 通过 OpenAI 兼容 API 调用。
24 支持所有 Ollama 模型:qwen2.5, llama3.1, gemma2, mistral, deepseek-r1 等。
26 环境变量:
27 OLLAMA_API_KEY: API Key(Ollama 默认不需要,可留空)
28 OLLAMA_BASE_URL: Ollama 服务地址,默认 http://localhost:11434/v1
29 """
31 def __init__(
32 self,
33 model: str = OLLAMA_DEFAULT_MODEL,
34 api_key: str = "",
35 base_url: str = "",
36 timeout: float = 120.0,
37 ):
38 import os
40 resolved_base = base_url or os.getenv("OLLAMA_BASE_URL", OLLAMA_DEFAULT_BASE)
41 resolved_key = api_key or os.getenv("OLLAMA_API_KEY", "ollama")
43 super().__init__(
44 model=model,
45 api_key=resolved_key,
46 base_url=resolved_base,
47 )
48 self._timeout = timeout
50 @property
51 def provider_name(self) -> str:
52 return "ollama"
54 def chat(self, *args: Any, **kwargs: Any):
55 # Override timeout
56 kwargs.setdefault("timeout", self._timeout)
57 return super().chat(*args, **kwargs)
59 async def achat(self, *args: Any, **kwargs: Any):
60 kwargs.setdefault("timeout", self._timeout)
61 return await super().achat(*args, **kwargs)