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

1""" 

2Ollama Provider — 本地 LLM 推理,OpenAI 兼容协议。 

3零额外依赖,纯 httpx 实现。支持任意 Ollama 模型(qwen2.5, llama3, gemma, mistral 等)。 

4 

5用法: 

6 provider = OllamaProvider(model="qwen2.5:7b", base_url="http://localhost:11434/v1") 

7""" 

8 

9from __future__ import annotations 

10 

11from typing import Any 

12 

13from agentos.llm.openai_provider import OpenAIProvider 

14 

15__all__ = ["OllamaProvider"] 

16 

17OLLAMA_DEFAULT_BASE = "http://localhost:11434/v1" 

18OLLAMA_DEFAULT_MODEL = "qwen2.5:7b" 

19 

20 

21class OllamaProvider(OpenAIProvider): 

22 """Ollama 本地 LLM Provider — 通过 OpenAI 兼容 API 调用。 

23 

24 支持所有 Ollama 模型:qwen2.5, llama3.1, gemma2, mistral, deepseek-r1 等。 

25 

26 环境变量: 

27 OLLAMA_API_KEY: API Key(Ollama 默认不需要,可留空) 

28 OLLAMA_BASE_URL: Ollama 服务地址,默认 http://localhost:11434/v1 

29 """ 

30 

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 

39 

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

42 

43 super().__init__( 

44 model=model, 

45 api_key=resolved_key, 

46 base_url=resolved_base, 

47 ) 

48 self._timeout = timeout 

49 

50 @property 

51 def provider_name(self) -> str: 

52 return "ollama" 

53 

54 def chat(self, *args: Any, **kwargs: Any): 

55 # Override timeout 

56 kwargs.setdefault("timeout", self._timeout) 

57 return super().chat(*args, **kwargs) 

58 

59 async def achat(self, *args: Any, **kwargs: Any): 

60 kwargs.setdefault("timeout", self._timeout) 

61 return await super().achat(*args, **kwargs)