@arikusi/deepseek-mcp-server 1.1.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/CHANGELOG.md +44 -1
  2. package/README.md +134 -18
  3. package/dist/circuit-breaker.d.ts +37 -0
  4. package/dist/circuit-breaker.d.ts.map +1 -0
  5. package/dist/circuit-breaker.js +101 -0
  6. package/dist/circuit-breaker.js.map +1 -0
  7. package/dist/config.d.ts +9 -0
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js +10 -0
  10. package/dist/config.js.map +1 -1
  11. package/dist/cost.d.ts +30 -13
  12. package/dist/cost.d.ts.map +1 -1
  13. package/dist/cost.js +58 -19
  14. package/dist/cost.js.map +1 -1
  15. package/dist/deepseek-client.d.ts +23 -5
  16. package/dist/deepseek-client.d.ts.map +1 -1
  17. package/dist/deepseek-client.js +256 -115
  18. package/dist/deepseek-client.js.map +1 -1
  19. package/dist/errors.d.ts +13 -0
  20. package/dist/errors.d.ts.map +1 -1
  21. package/dist/errors.js +18 -0
  22. package/dist/errors.js.map +1 -1
  23. package/dist/index.js +5 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/resources/config.d.ts +7 -0
  26. package/dist/resources/config.d.ts.map +1 -0
  27. package/dist/resources/config.js +44 -0
  28. package/dist/resources/config.js.map +1 -0
  29. package/dist/resources/index.d.ts +7 -0
  30. package/dist/resources/index.d.ts.map +1 -0
  31. package/dist/resources/index.js +13 -0
  32. package/dist/resources/index.js.map +1 -0
  33. package/dist/resources/models.d.ts +7 -0
  34. package/dist/resources/models.d.ts.map +1 -0
  35. package/dist/resources/models.js +62 -0
  36. package/dist/resources/models.js.map +1 -0
  37. package/dist/resources/usage.d.ts +7 -0
  38. package/dist/resources/usage.d.ts.map +1 -0
  39. package/dist/resources/usage.js +31 -0
  40. package/dist/resources/usage.js.map +1 -0
  41. package/dist/schemas.d.ts +72 -20
  42. package/dist/schemas.d.ts.map +1 -1
  43. package/dist/schemas.js +15 -2
  44. package/dist/schemas.js.map +1 -1
  45. package/dist/session.d.ts +68 -0
  46. package/dist/session.d.ts.map +1 -0
  47. package/dist/session.js +184 -0
  48. package/dist/session.js.map +1 -0
  49. package/dist/tools/deepseek-chat.d.ts +2 -1
  50. package/dist/tools/deepseek-chat.d.ts.map +1 -1
  51. package/dist/tools/deepseek-chat.js +97 -32
  52. package/dist/tools/deepseek-chat.js.map +1 -1
  53. package/dist/tools/deepseek-sessions.d.ts +7 -0
  54. package/dist/tools/deepseek-sessions.d.ts.map +1 -0
  55. package/dist/tools/deepseek-sessions.js +101 -0
  56. package/dist/tools/deepseek-sessions.js.map +1 -0
  57. package/dist/tools/index.d.ts.map +1 -1
  58. package/dist/tools/index.js +2 -0
  59. package/dist/tools/index.js.map +1 -1
  60. package/dist/types.d.ts +71 -0
  61. package/dist/types.d.ts.map +1 -1
  62. package/dist/types.js.map +1 -1
  63. package/dist/usage-tracker.d.ts +40 -0
  64. package/dist/usage-tracker.d.ts.map +1 -0
  65. package/dist/usage-tracker.js +76 -0
  66. package/dist/usage-tracker.js.map +1 -0
  67. package/package.json +5 -2
package/dist/cost.js CHANGED
@@ -1,34 +1,73 @@
1
1
  /**
2
2
  * Cost Calculation Module
3
3
  * Handles pricing and cost formatting for DeepSeek API requests
4
+ *
5
+ * DeepSeek V3.2 unified pricing (both deepseek-chat and deepseek-reasoner):
6
+ * - Cache hit input: $0.028/1M tokens
7
+ * - Cache miss input: $0.28/1M tokens
8
+ * - Output: $0.42/1M tokens
4
9
  */
5
- /** DeepSeek pricing per 1M tokens (USD) */
10
+ /** DeepSeek V3.2 unified pricing per 1M tokens (USD) */
6
11
  export const PRICING = {
7
- 'deepseek-chat': {
8
- prompt: 0.14,
9
- completion: 0.28,
10
- },
11
- 'deepseek-reasoner': {
12
- prompt: 0.55,
13
- completion: 2.19,
14
- },
12
+ cache_hit: 0.028,
13
+ cache_miss: 0.28,
14
+ output: 0.42,
15
15
  };
16
16
  /**
17
- * Calculate cost for a request based on token usage
17
+ * Calculate cost for a request based on token usage.
18
+ * Supports V3.2 cache hit/miss pricing. If cache fields are absent,
19
+ * treats all input tokens as cache miss (backward compatible).
18
20
  */
19
- export function calculateCost(promptTokens, completionTokens, model) {
20
- const modelPricing = PRICING[model] || PRICING['deepseek-chat'];
21
- const promptCost = (promptTokens / 1_000_000) * modelPricing.prompt;
22
- const completionCost = (completionTokens / 1_000_000) * modelPricing.completion;
23
- return promptCost + completionCost;
21
+ export function calculateCost(usage) {
22
+ const { prompt_tokens, completion_tokens, prompt_cache_hit_tokens, prompt_cache_miss_tokens, } = usage;
23
+ let inputCost;
24
+ let cacheHitRatio;
25
+ let cacheSavings;
26
+ if (prompt_cache_hit_tokens !== undefined &&
27
+ prompt_cache_miss_tokens !== undefined) {
28
+ // V3.2 cache-aware pricing
29
+ const hitCost = (prompt_cache_hit_tokens / 1_000_000) * PRICING.cache_hit;
30
+ const missCost = (prompt_cache_miss_tokens / 1_000_000) * PRICING.cache_miss;
31
+ inputCost = hitCost + missCost;
32
+ if (prompt_tokens > 0) {
33
+ cacheHitRatio = prompt_cache_hit_tokens / prompt_tokens;
34
+ }
35
+ // Savings = what all-miss would cost minus actual cost
36
+ const allMissCost = (prompt_tokens / 1_000_000) * PRICING.cache_miss;
37
+ cacheSavings = allMissCost - inputCost;
38
+ }
39
+ else {
40
+ // Backward compatible: treat all input as cache miss
41
+ inputCost = (prompt_tokens / 1_000_000) * PRICING.cache_miss;
42
+ }
43
+ const outputCost = (completion_tokens / 1_000_000) * PRICING.output;
44
+ return {
45
+ inputCost,
46
+ outputCost,
47
+ totalCost: inputCost + outputCost,
48
+ cacheHitRatio,
49
+ cacheSavings,
50
+ };
24
51
  }
25
52
  /**
26
- * Format cost as readable USD string
53
+ * Format cost as readable USD string with optional cache savings info
27
54
  */
28
- export function formatCost(cost) {
55
+ export function formatCost(breakdown) {
56
+ const cost = breakdown.totalCost;
57
+ let formatted;
29
58
  if (cost < 0.01) {
30
- return `$${cost.toFixed(4)}`;
59
+ formatted = `$${cost.toFixed(4)}`;
60
+ }
61
+ else {
62
+ formatted = `$${cost.toFixed(2)}`;
63
+ }
64
+ if (breakdown.cacheHitRatio !== undefined &&
65
+ breakdown.cacheHitRatio > 0 &&
66
+ breakdown.cacheSavings !== undefined &&
67
+ breakdown.cacheSavings > 0) {
68
+ const pct = Math.round(breakdown.cacheHitRatio * 100);
69
+ formatted += ` (cache hit: ${pct}%, saved ~$${breakdown.cacheSavings.toFixed(4)})`;
31
70
  }
32
- return `$${cost.toFixed(2)}`;
71
+ return formatted;
33
72
  }
34
73
  //# sourceMappingURL=cost.js.map
package/dist/cost.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2CAA2C;AAC3C,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,eAAe,EAAE;QACf,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,IAAI;KACjB;IACD,mBAAmB,EAAE;QACnB,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,IAAI;KACjB;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,YAAoB,EACpB,gBAAwB,EACxB,KAAa;IAEb,MAAM,YAAY,GAChB,OAAO,CAAC,KAA6B,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAErE,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;IACpE,MAAM,cAAc,GAClB,CAAC,gBAAgB,GAAG,SAAS,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC;IAE3D,OAAO,UAAU,GAAG,cAAc,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QAChB,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wDAAwD;AACxD,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,SAAS,EAAE,KAAK;IAChB,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;CACJ,CAAC;AAaX;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAK7B;IACC,MAAM,EACJ,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,GACzB,GAAG,KAAK,CAAC;IAEV,IAAI,SAAiB,CAAC;IACtB,IAAI,aAAiC,CAAC;IACtC,IAAI,YAAgC,CAAC;IAErC,IACE,uBAAuB,KAAK,SAAS;QACrC,wBAAwB,KAAK,SAAS,EACtC,CAAC;QACD,2BAA2B;QAC3B,MAAM,OAAO,GACX,CAAC,uBAAuB,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;QAC5D,MAAM,QAAQ,GACZ,CAAC,wBAAwB,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;QAC9D,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;QAE/B,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACtB,aAAa,GAAG,uBAAuB,GAAG,aAAa,CAAC;QAC1D,CAAC;QAED,uDAAuD;QACvD,MAAM,WAAW,GAAG,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;QACrE,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,qDAAqD;QACrD,SAAS,GAAG,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAC/D,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,iBAAiB,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAEpE,OAAO;QACL,SAAS;QACT,UAAU;QACV,SAAS,EAAE,SAAS,GAAG,UAAU;QACjC,aAAa;QACb,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,SAAwB;IACjD,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC;IACjC,IAAI,SAAiB,CAAC;IAEtB,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QAChB,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,CAAC;IAED,IACE,SAAS,CAAC,aAAa,KAAK,SAAS;QACrC,SAAS,CAAC,aAAa,GAAG,CAAC;QAC3B,SAAS,CAAC,YAAY,KAAK,SAAS;QACpC,SAAS,CAAC,YAAY,GAAG,CAAC,EAC1B,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;QACtD,SAAS,IAAI,gBAAgB,GAAG,cAAc,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACrF,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1,11 +1,21 @@
1
1
  /**
2
2
  * DeepSeek API Client
3
3
  * Wrapper around OpenAI SDK for DeepSeek API
4
+ * Features: circuit breaker protection, automatic model fallback
4
5
  */
5
- import type { ChatCompletionParams, ChatCompletionResponse } from './types.js';
6
+ import type { ChatCompletionParams, ChatCompletionResponse, FallbackInfo } from './types.js';
7
+ /** Extended response with optional fallback info */
8
+ export interface ChatCompletionResponseWithFallback extends ChatCompletionResponse {
9
+ fallback?: FallbackInfo;
10
+ }
6
11
  export declare class DeepSeekClient {
7
12
  private client;
13
+ private circuitBreaker;
8
14
  constructor();
15
+ /**
16
+ * Get circuit breaker status
17
+ */
18
+ getCircuitBreakerStatus(): import("./types.js").CircuitBreakerStatus;
9
19
  /**
10
20
  * Build request params shared between streaming and non-streaming
11
21
  */
@@ -15,14 +25,22 @@ export declare class DeepSeekClient {
15
25
  */
16
26
  private wrapError;
17
27
  /**
18
- * Create a chat completion (non-streaming)
28
+ * Parse raw API response into ChatCompletionResponse
19
29
  */
20
- createChatCompletion(params: ChatCompletionParams): Promise<ChatCompletionResponse>;
30
+ private parseResponse;
21
31
  /**
22
- * Create a streaming chat completion
32
+ * Create a chat completion (non-streaming) with circuit breaker and fallback
33
+ */
34
+ createChatCompletion(params: ChatCompletionParams): Promise<ChatCompletionResponseWithFallback>;
35
+ /**
36
+ * Create a streaming chat completion with circuit breaker and fallback
23
37
  * Returns the full text after streaming completes (buffered)
24
38
  */
25
- createStreamingChatCompletion(params: ChatCompletionParams): Promise<ChatCompletionResponse>;
39
+ createStreamingChatCompletion(params: ChatCompletionParams): Promise<ChatCompletionResponseWithFallback>;
40
+ /**
41
+ * Internal streaming implementation
42
+ */
43
+ private streamInternal;
26
44
  /**
27
45
  * Test API connection
28
46
  */
@@ -1 +1 @@
1
- {"version":3,"file":"deepseek-client.d.ts","sourceRoot":"","sources":["../src/deepseek-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EAKvB,MAAM,YAAY,CAAC;AAGpB,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;;IAavB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB;;OAEG;IACG,oBAAoB,CACxB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,sBAAsB,CAAC;IA6ClC;;;OAGG;IACG,6BAA6B,CACjC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,sBAAsB,CAAC;IAoGlC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;CAazC"}
1
+ {"version":3,"file":"deepseek-client.d.ts","sourceRoot":"","sources":["../src/deepseek-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EAItB,YAAY,EAEb,MAAM,YAAY,CAAC;AAiBpB,oDAAoD;AACpD,MAAM,WAAW,kCAAmC,SAAQ,sBAAsB;IAChF,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAwBD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAiB;;IAevC;;OAEG;IACH,uBAAuB;IAIvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyD1B;;OAEG;IACH,OAAO,CAAC,SAAS;IASjB;;OAEG;IACH,OAAO,CAAC,aAAa;IAoCrB;;OAEG;IACG,oBAAoB,CACxB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,kCAAkC,CAAC;IAoD9C;;;OAGG;IACG,6BAA6B,CACjC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,kCAAkC,CAAC;IAwC9C;;OAEG;YACW,cAAc;IA4F5B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;CAazC"}
@@ -1,13 +1,56 @@
1
1
  /**
2
2
  * DeepSeek API Client
3
3
  * Wrapper around OpenAI SDK for DeepSeek API
4
+ * Features: circuit breaker protection, automatic model fallback
4
5
  */
5
6
  import OpenAI from 'openai';
6
7
  import { getConfig } from './config.js';
7
- import { ApiError } from './errors.js';
8
+ import { ApiError, CircuitBreakerOpenError, FallbackExhaustedError, } from './errors.js';
9
+ import { CircuitBreaker } from './circuit-breaker.js';
8
10
  import { hasReasoningContent, getErrorMessage } from './types.js';
11
+ /** Parameters that are incompatible with thinking mode */
12
+ const THINKING_INCOMPATIBLE_PARAMS = [
13
+ 'temperature',
14
+ 'top_p',
15
+ 'frequency_penalty',
16
+ 'presence_penalty',
17
+ ];
18
+ /** Fallback model mapping */
19
+ const FALLBACK_MODEL = {
20
+ 'deepseek-reasoner': 'deepseek-chat',
21
+ 'deepseek-chat': 'deepseek-reasoner',
22
+ };
23
+ /**
24
+ * Check if an error is retryable / should trigger fallback
25
+ */
26
+ function isRetryableError(error) {
27
+ if (error instanceof CircuitBreakerOpenError)
28
+ return true;
29
+ if (error instanceof Error) {
30
+ const msg = error.message.toLowerCase();
31
+ // Rate limit, server errors, timeouts
32
+ if (msg.includes('429') || msg.includes('rate limit'))
33
+ return true;
34
+ if (msg.includes('503') || msg.includes('service unavailable'))
35
+ return true;
36
+ if (msg.includes('502') || msg.includes('bad gateway'))
37
+ return true;
38
+ if (msg.includes('timeout') || msg.includes('timed out'))
39
+ return true;
40
+ if (msg.includes('econnrefused') || msg.includes('econnreset'))
41
+ return true;
42
+ }
43
+ // OpenAI SDK errors with status code
44
+ if (typeof error === 'object' && error !== null && 'status' in error) {
45
+ const status = error.status;
46
+ if (status === 429 || status === 502 || status === 503)
47
+ return true;
48
+ }
49
+ return false;
50
+ }
9
51
  export class DeepSeekClient {
10
52
  client;
53
+ circuitBreaker;
11
54
  constructor() {
12
55
  const config = getConfig();
13
56
  this.client = new OpenAI({
@@ -16,22 +59,53 @@ export class DeepSeekClient {
16
59
  timeout: config.requestTimeout,
17
60
  maxRetries: config.maxRetries,
18
61
  });
62
+ this.circuitBreaker = new CircuitBreaker(5, 30000);
63
+ }
64
+ /**
65
+ * Get circuit breaker status
66
+ */
67
+ getCircuitBreakerStatus() {
68
+ return this.circuitBreaker.getStatus();
19
69
  }
20
70
  /**
21
71
  * Build request params shared between streaming and non-streaming
22
72
  */
23
73
  buildRequestParams(params, stream) {
74
+ const isThinkingEnabled = params.thinking?.type === 'enabled';
75
+ // Filter incompatible params when thinking mode is active
76
+ if (isThinkingEnabled) {
77
+ const filtered = [];
78
+ for (const key of THINKING_INCOMPATIBLE_PARAMS) {
79
+ if (params[key] !== undefined) {
80
+ filtered.push(key);
81
+ }
82
+ }
83
+ if (filtered.length > 0) {
84
+ console.error(`[DeepSeek MCP] Warning: Thinking mode active, ignoring incompatible params: ${filtered.join(', ')}`);
85
+ }
86
+ }
24
87
  const requestParams = {
25
88
  model: params.model,
26
89
  messages: params.messages,
27
- temperature: params.temperature ?? 1.0,
90
+ temperature: isThinkingEnabled ? undefined : (params.temperature ?? 1.0),
28
91
  max_tokens: params.max_tokens,
29
- top_p: params.top_p,
30
- frequency_penalty: params.frequency_penalty,
31
- presence_penalty: params.presence_penalty,
92
+ top_p: isThinkingEnabled ? undefined : params.top_p,
93
+ frequency_penalty: isThinkingEnabled ? undefined : params.frequency_penalty,
94
+ presence_penalty: isThinkingEnabled ? undefined : params.presence_penalty,
32
95
  stop: params.stop,
33
96
  stream,
34
97
  };
98
+ // Pass thinking config via extra_body (DeepSeek extension)
99
+ if (params.thinking) {
100
+ requestParams.extra_body = {
101
+ ...requestParams.extra_body,
102
+ thinking: params.thinking,
103
+ };
104
+ }
105
+ // Pass response_format for JSON mode
106
+ if (params.response_format) {
107
+ requestParams.response_format = params.response_format;
108
+ }
35
109
  if (params.tools?.length) {
36
110
  requestParams.tools = params.tools;
37
111
  }
@@ -47,142 +121,209 @@ export class DeepSeekClient {
47
121
  wrapError(error, context) {
48
122
  if (error instanceof ApiError)
49
123
  throw error;
124
+ if (error instanceof FallbackExhaustedError)
125
+ throw error;
126
+ if (error instanceof CircuitBreakerOpenError)
127
+ throw error;
50
128
  const message = getErrorMessage(error);
51
129
  const cause = error instanceof Error ? error : undefined;
52
130
  throw new ApiError(`${context}: ${message}`, { cause });
53
131
  }
54
132
  /**
55
- * Create a chat completion (non-streaming)
133
+ * Parse raw API response into ChatCompletionResponse
134
+ */
135
+ parseResponse(response) {
136
+ const choice = response.choices[0];
137
+ if (!choice) {
138
+ throw new ApiError('No response from DeepSeek API');
139
+ }
140
+ const reasoning_content = hasReasoningContent(choice.message)
141
+ ? choice.message.reasoning_content
142
+ : undefined;
143
+ const tool_calls = choice.message.tool_calls
144
+ ?.map((tc) => ({
145
+ id: tc.id,
146
+ type: 'function',
147
+ function: {
148
+ name: tc.function.name,
149
+ arguments: tc.function.arguments,
150
+ },
151
+ }));
152
+ return {
153
+ content: choice.message.content || '',
154
+ reasoning_content,
155
+ model: response.model,
156
+ usage: {
157
+ prompt_tokens: response.usage?.prompt_tokens || 0,
158
+ completion_tokens: response.usage?.completion_tokens || 0,
159
+ total_tokens: response.usage?.total_tokens || 0,
160
+ prompt_cache_hit_tokens: response.usage?.prompt_cache_hit_tokens,
161
+ prompt_cache_miss_tokens: response.usage?.prompt_cache_miss_tokens,
162
+ },
163
+ finish_reason: choice.finish_reason || 'stop',
164
+ tool_calls: tool_calls?.length ? tool_calls : undefined,
165
+ };
166
+ }
167
+ /**
168
+ * Create a chat completion (non-streaming) with circuit breaker and fallback
56
169
  */
57
170
  async createChatCompletion(params) {
171
+ const config = getConfig();
58
172
  try {
59
- const requestParams = this.buildRequestParams(params, false);
60
- const rawResponse = await this.client.chat.completions.create(requestParams);
61
- const response = rawResponse;
62
- const choice = response.choices[0];
63
- if (!choice) {
64
- throw new ApiError('No response from DeepSeek API');
65
- }
66
- // Extract reasoning content if available (for deepseek-reasoner)
67
- const reasoning_content = hasReasoningContent(choice.message)
68
- ? choice.message.reasoning_content
69
- : undefined;
70
- // Extract tool_calls if present
71
- const tool_calls = choice.message.tool_calls
72
- ?.map((tc) => ({
73
- id: tc.id,
74
- type: 'function',
75
- function: {
76
- name: tc.function.name,
77
- arguments: tc.function.arguments,
78
- },
79
- }));
80
- return {
81
- content: choice.message.content || '',
82
- reasoning_content,
83
- model: response.model,
84
- usage: {
85
- prompt_tokens: response.usage?.prompt_tokens || 0,
86
- completion_tokens: response.usage?.completion_tokens || 0,
87
- total_tokens: response.usage?.total_tokens || 0,
88
- },
89
- finish_reason: choice.finish_reason || 'stop',
90
- tool_calls: tool_calls?.length ? tool_calls : undefined,
91
- };
173
+ // Primary attempt through circuit breaker
174
+ const result = await this.circuitBreaker.execute(async () => {
175
+ const requestParams = this.buildRequestParams(params, false);
176
+ const rawResponse = await this.client.chat.completions.create(requestParams);
177
+ return this.parseResponse(rawResponse);
178
+ });
179
+ return result;
92
180
  }
93
181
  catch (error) {
182
+ // Try fallback if enabled and error is retryable
183
+ if (config.fallbackEnabled && isRetryableError(error)) {
184
+ const fallbackModel = FALLBACK_MODEL[params.model];
185
+ const reason = getErrorMessage(error);
186
+ console.error(`[DeepSeek MCP] Primary model ${params.model} failed (${reason}), falling back to ${fallbackModel}`);
187
+ try {
188
+ const fallbackParams = { ...params, model: fallbackModel };
189
+ // Fallback bypasses circuit breaker (it's a different attempt)
190
+ const requestParams = this.buildRequestParams(fallbackParams, false);
191
+ const rawResponse = await this.client.chat.completions.create(requestParams);
192
+ const result = this.parseResponse(rawResponse);
193
+ return {
194
+ ...result,
195
+ fallback: {
196
+ originalModel: params.model,
197
+ fallbackModel,
198
+ reason,
199
+ },
200
+ };
201
+ }
202
+ catch (fallbackError) {
203
+ console.error(`[DeepSeek MCP] Fallback model ${fallbackModel} also failed:`, fallbackError);
204
+ throw new FallbackExhaustedError(`All models failed. Primary (${params.model}): ${reason}. Fallback (${fallbackModel}): ${getErrorMessage(fallbackError)}`, [params.model, fallbackModel]);
205
+ }
206
+ }
207
+ // Not retryable or fallback disabled
94
208
  console.error('DeepSeek API Error:', error);
95
209
  this.wrapError(error, 'DeepSeek API Error');
96
210
  }
97
211
  }
98
212
  /**
99
- * Create a streaming chat completion
213
+ * Create a streaming chat completion with circuit breaker and fallback
100
214
  * Returns the full text after streaming completes (buffered)
101
215
  */
102
216
  async createStreamingChatCompletion(params) {
217
+ const config = getConfig();
103
218
  try {
104
- const requestParams = this.buildRequestParams(params, true);
105
- const stream = await this.client.chat.completions.create(requestParams);
106
- let fullContent = '';
107
- let reasoningContent = '';
108
- let modelName = params.model;
109
- let finishReason = 'stop';
110
- let usage = {
111
- prompt_tokens: 0,
112
- completion_tokens: 0,
113
- total_tokens: 0,
114
- };
115
- // Tool calls accumulation (index-based)
116
- const toolCallsMap = new Map();
117
- // Collect all chunks
118
- for await (const rawChunk of stream) {
119
- const chunk = rawChunk;
120
- const choice = chunk.choices[0];
121
- if (!choice)
122
- continue;
123
- // Collect content
124
- if (choice.delta?.content) {
125
- fullContent += choice.delta.content;
126
- }
127
- // Collect reasoning content (for deepseek-reasoner)
128
- if (choice.delta && hasReasoningContent(choice.delta)) {
129
- reasoningContent += choice.delta.reasoning_content;
130
- }
131
- // Accumulate tool_calls deltas
132
- if (choice.delta?.tool_calls) {
133
- for (const tc of choice.delta.tool_calls) {
134
- const existing = toolCallsMap.get(tc.index);
135
- if (existing) {
136
- if (tc.function?.name)
137
- existing.function.name += tc.function.name;
138
- if (tc.function?.arguments)
139
- existing.function.arguments += tc.function.arguments;
140
- }
141
- else {
142
- toolCallsMap.set(tc.index, {
143
- id: tc.id || '',
144
- type: 'function',
145
- function: {
146
- name: tc.function?.name || '',
147
- arguments: tc.function?.arguments || '',
148
- },
149
- });
150
- }
151
- }
152
- }
153
- // Get finish reason
154
- if (choice.finish_reason) {
155
- finishReason = choice.finish_reason;
156
- }
157
- // Get model name
158
- if (chunk.model) {
159
- modelName = chunk.model;
219
+ const result = await this.circuitBreaker.execute(async () => {
220
+ return this.streamInternal(params);
221
+ });
222
+ return result;
223
+ }
224
+ catch (error) {
225
+ if (config.fallbackEnabled && isRetryableError(error)) {
226
+ const fallbackModel = FALLBACK_MODEL[params.model];
227
+ const reason = getErrorMessage(error);
228
+ console.error(`[DeepSeek MCP] Streaming primary ${params.model} failed (${reason}), falling back to ${fallbackModel}`);
229
+ try {
230
+ const fallbackParams = { ...params, model: fallbackModel };
231
+ const result = await this.streamInternal(fallbackParams);
232
+ return {
233
+ ...result,
234
+ fallback: {
235
+ originalModel: params.model,
236
+ fallbackModel,
237
+ reason,
238
+ },
239
+ };
160
240
  }
161
- // Get usage info (usually in last chunk)
162
- if (chunk.usage) {
163
- usage = chunk.usage;
241
+ catch (fallbackError) {
242
+ throw new FallbackExhaustedError(`All models failed (streaming). Primary (${params.model}): ${reason}. Fallback (${fallbackModel}): ${getErrorMessage(fallbackError)}`, [params.model, fallbackModel]);
164
243
  }
165
244
  }
166
- // Convert tool calls map to sorted array
167
- const toolCalls = toolCallsMap.size > 0
168
- ? Array.from(toolCallsMap.entries())
169
- .sort(([a], [b]) => a - b)
170
- .map(([, tc]) => tc)
171
- : undefined;
172
- return {
173
- content: fullContent,
174
- reasoning_content: reasoningContent || undefined,
175
- model: modelName,
176
- usage,
177
- finish_reason: finishReason,
178
- tool_calls: toolCalls,
179
- };
180
- }
181
- catch (error) {
182
245
  console.error('DeepSeek Streaming API Error:', error);
183
246
  this.wrapError(error, 'DeepSeek Streaming API Error');
184
247
  }
185
248
  }
249
+ /**
250
+ * Internal streaming implementation
251
+ */
252
+ async streamInternal(params) {
253
+ const requestParams = this.buildRequestParams(params, true);
254
+ const stream = await this.client.chat.completions.create(requestParams);
255
+ let fullContent = '';
256
+ let reasoningContent = '';
257
+ let modelName = params.model;
258
+ let finishReason = 'stop';
259
+ let usage = {
260
+ prompt_tokens: 0,
261
+ completion_tokens: 0,
262
+ total_tokens: 0,
263
+ };
264
+ const toolCallsMap = new Map();
265
+ for await (const rawChunk of stream) {
266
+ const chunk = rawChunk;
267
+ const choice = chunk.choices[0];
268
+ if (!choice)
269
+ continue;
270
+ if (choice.delta?.content) {
271
+ fullContent += choice.delta.content;
272
+ }
273
+ if (choice.delta && hasReasoningContent(choice.delta)) {
274
+ reasoningContent += choice.delta.reasoning_content;
275
+ }
276
+ if (choice.delta?.tool_calls) {
277
+ for (const tc of choice.delta.tool_calls) {
278
+ const existing = toolCallsMap.get(tc.index);
279
+ if (existing) {
280
+ if (tc.function?.name)
281
+ existing.function.name += tc.function.name;
282
+ if (tc.function?.arguments)
283
+ existing.function.arguments += tc.function.arguments;
284
+ }
285
+ else {
286
+ toolCallsMap.set(tc.index, {
287
+ id: tc.id || '',
288
+ type: 'function',
289
+ function: {
290
+ name: tc.function?.name || '',
291
+ arguments: tc.function?.arguments || '',
292
+ },
293
+ });
294
+ }
295
+ }
296
+ }
297
+ if (choice.finish_reason) {
298
+ finishReason = choice.finish_reason;
299
+ }
300
+ if (chunk.model) {
301
+ modelName = chunk.model;
302
+ }
303
+ if (chunk.usage) {
304
+ usage = {
305
+ prompt_tokens: chunk.usage.prompt_tokens,
306
+ completion_tokens: chunk.usage.completion_tokens,
307
+ total_tokens: chunk.usage.total_tokens,
308
+ prompt_cache_hit_tokens: chunk.usage.prompt_cache_hit_tokens,
309
+ prompt_cache_miss_tokens: chunk.usage.prompt_cache_miss_tokens,
310
+ };
311
+ }
312
+ }
313
+ const toolCalls = toolCallsMap.size > 0
314
+ ? Array.from(toolCallsMap.entries())
315
+ .sort(([a], [b]) => a - b)
316
+ .map(([, tc]) => tc)
317
+ : undefined;
318
+ return {
319
+ content: fullContent,
320
+ reasoning_content: reasoningContent || undefined,
321
+ model: modelName,
322
+ usage,
323
+ finish_reason: finishReason,
324
+ tool_calls: toolCalls,
325
+ };
326
+ }
186
327
  /**
187
328
  * Test API connection
188
329
  */
@@ -1 +1 @@
1
- {"version":3,"file":"deepseek-client.js","sourceRoot":"","sources":["../src/deepseek-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deepseek-client.js","sourceRoot":"","sources":["../src/deepseek-client.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -59,6 +59,19 @@ export declare class ValidationError extends BaseError {
59
59
  message: string;
60
60
  }>, options?: ErrorOptions);
61
61
  }
62
+ /**
63
+ * All fallback models exhausted
64
+ */
65
+ export declare class FallbackExhaustedError extends ApiError {
66
+ readonly attemptedModels: string[];
67
+ constructor(message: string, attemptedModels: string[], options?: ErrorOptions);
68
+ }
69
+ /**
70
+ * Circuit breaker is open — fast-fail
71
+ */
72
+ export declare class CircuitBreakerOpenError extends BaseError {
73
+ constructor(message?: string, options?: ErrorOptions);
74
+ }
62
75
  /**
63
76
  * Network/connection error
64
77
  */