Coverage for agentos/llm/deepseek_provider.py: 60%

15 statements  

« prev     ^ index     » next       coverage.py v7.14.3, created at 2026-07-06 10:59 +0800

1""" 

2DeepSeek Provider — 基于 OpenAIProvider 子类化,仅换 base_url。 

3DeepSeek API 完全兼容 OpenAI Chat Completions 格式。 

4v1.3.36: 首个实现,支持 Function Calling。 

5""" 

6 

7from __future__ import annotations 

8 

9 

10from agentos.llm.openai_provider import OpenAIProvider 

11 

12__all__ = ["DeepSeekProvider"] 

13 

14# USD per 1M tokens (DeepSeek pricing as of 2025-06) 

15_DEEPSEEK_PRICING: dict[str, tuple[float, float]] = { 

16 "deepseek-chat": (0.27, 1.10), 

17 "deepseek-reasoner": (0.55, 2.19), 

18} 

19 

20 

21class DeepSeekProvider(OpenAIProvider): 

22 """DeepSeek Provider — OpenAI 兼容,零额外代码。 

23 

24 用法: 

25 provider = DeepSeekProvider(api_key="sk-...") 

26 result = provider.chat([Message(role=MessageRole.USER, content="Hello")]) 

27 """ 

28 

29 _pricing_injected: bool = False 

30 

31 def __init__( 

32 self, 

33 model: str = "deepseek-chat", 

34 api_key: str = "", 

35 base_url: str = "https://api.deepseek.com/v1", 

36 timeout: float = 120.0, 

37 ): 

38 super().__init__(model=model, api_key=api_key, base_url=base_url, timeout=timeout) 

39 if not self._pricing_injected: 

40 from agentos.llm.openai_provider import _PRICING 

41 _PRICING.update(_DEEPSEEK_PRICING) 

42 DeepSeekProvider._pricing_injected = True 

43 

44 @property 

45 def provider_name(self) -> str: 

46 return "deepseek"