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

15 statements  

« prev     ^ index     » next       coverage.py v7.14.3, created at 2026-07-08 12:20 +0800

1""" 

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

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

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

5""" 

6 

7from __future__ import annotations 

8 

9from agentos.llm.openai_provider import OpenAIProvider 

10 

11__all__ = ["DeepSeekProvider"] 

12 

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

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

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

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

17} 

18 

19 

20class DeepSeekProvider(OpenAIProvider): 

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

22 

23 用法: 

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

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

26 """ 

27 

28 _pricing_injected: bool = False 

29 

30 def __init__( 

31 self, 

32 model: str = "deepseek-chat", 

33 api_key: str = "", 

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

35 timeout: float = 120.0, 

36 ): 

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

38 if not self._pricing_injected: 

39 from agentos.llm.openai_provider import _PRICING 

40 

41 _PRICING.update(_DEEPSEEK_PRICING) 

42 DeepSeekProvider._pricing_injected = True 

43 

44 @property 

45 def provider_name(self) -> str: 

46 return "deepseek"