hazo_llm_api 1.2.12 → 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.
- package/README.md +321 -8
- package/config/hazo_llm_api_config.ini +33 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/llm_call_inspector/index.d.ts +6 -0
- package/dist/components/llm_call_inspector/index.d.ts.map +1 -0
- package/dist/components/llm_call_inspector/index.js +5 -0
- package/dist/components/llm_call_inspector/index.js.map +1 -0
- package/dist/components/llm_call_inspector/llm_call_inspector.d.ts +18 -0
- package/dist/components/llm_call_inspector/llm_call_inspector.d.ts.map +1 -0
- package/dist/components/llm_call_inspector/llm_call_inspector.js +103 -0
- package/dist/components/llm_call_inspector/llm_call_inspector.js.map +1 -0
- package/dist/components/llm_cost_dashboard/index.d.ts +6 -0
- package/dist/components/llm_cost_dashboard/index.d.ts.map +1 -0
- package/dist/components/llm_cost_dashboard/index.js +5 -0
- package/dist/components/llm_cost_dashboard/index.js.map +1 -0
- package/dist/components/llm_cost_dashboard/llm_cost_dashboard.d.ts +16 -0
- package/dist/components/llm_cost_dashboard/llm_cost_dashboard.d.ts.map +1 -0
- package/dist/components/llm_cost_dashboard/llm_cost_dashboard.js +154 -0
- package/dist/components/llm_cost_dashboard/llm_cost_dashboard.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/cascade/cascade_runner.d.ts +50 -0
- package/dist/lib/cascade/cascade_runner.d.ts.map +1 -0
- package/dist/lib/cascade/cascade_runner.js +115 -0
- package/dist/lib/cascade/cascade_runner.js.map +1 -0
- package/dist/lib/cascade/index.d.ts +5 -0
- package/dist/lib/cascade/index.d.ts.map +1 -0
- package/dist/lib/cascade/index.js +4 -0
- package/dist/lib/cascade/index.js.map +1 -0
- package/dist/lib/cascade/types.d.ts +35 -0
- package/dist/lib/cascade/types.d.ts.map +1 -0
- package/dist/lib/cascade/types.js +14 -0
- package/dist/lib/cascade/types.js.map +1 -0
- package/dist/lib/cost_cap/cost_cap.d.ts +40 -0
- package/dist/lib/cost_cap/cost_cap.d.ts.map +1 -0
- package/dist/lib/cost_cap/cost_cap.js +150 -0
- package/dist/lib/cost_cap/cost_cap.js.map +1 -0
- package/dist/lib/cost_cap/index.d.ts +3 -0
- package/dist/lib/cost_cap/index.d.ts.map +1 -0
- package/dist/lib/cost_cap/index.js +2 -0
- package/dist/lib/cost_cap/index.js.map +1 -0
- package/dist/lib/database/init_api_log.d.ts +10 -0
- package/dist/lib/database/init_api_log.d.ts.map +1 -0
- package/dist/lib/database/init_api_log.js +91 -0
- package/dist/lib/database/init_api_log.js.map +1 -0
- package/dist/lib/hazo_connect/direct_db_connect.d.ts +11 -7
- package/dist/lib/hazo_connect/direct_db_connect.d.ts.map +1 -1
- package/dist/lib/hazo_connect/direct_db_connect.js +59 -6
- package/dist/lib/hazo_connect/direct_db_connect.js.map +1 -1
- package/dist/lib/hazo_connect/types.d.ts +35 -3
- package/dist/lib/hazo_connect/types.d.ts.map +1 -1
- package/dist/lib/llm_api/embed_cache.d.ts +15 -0
- package/dist/lib/llm_api/embed_cache.d.ts.map +1 -0
- package/dist/lib/llm_api/embed_cache.js +53 -0
- package/dist/lib/llm_api/embed_cache.js.map +1 -0
- package/dist/lib/llm_api/hazo_llm_document_text.d.ts.map +1 -1
- package/dist/lib/llm_api/hazo_llm_document_text.js +56 -14
- package/dist/lib/llm_api/hazo_llm_document_text.js.map +1 -1
- package/dist/lib/llm_api/hazo_llm_dynamic_data_extract.d.ts.map +1 -1
- package/dist/lib/llm_api/hazo_llm_dynamic_data_extract.js +19 -1
- package/dist/lib/llm_api/hazo_llm_dynamic_data_extract.js.map +1 -1
- package/dist/lib/llm_api/hazo_llm_embed.d.ts +10 -0
- package/dist/lib/llm_api/hazo_llm_embed.d.ts.map +1 -0
- package/dist/lib/llm_api/hazo_llm_embed.js +80 -0
- package/dist/lib/llm_api/hazo_llm_embed.js.map +1 -0
- package/dist/lib/llm_api/hazo_llm_image_image.d.ts.map +1 -1
- package/dist/lib/llm_api/hazo_llm_image_image.js +56 -14
- package/dist/lib/llm_api/hazo_llm_image_image.js.map +1 -1
- package/dist/lib/llm_api/hazo_llm_image_text.d.ts.map +1 -1
- package/dist/lib/llm_api/hazo_llm_image_text.js +56 -14
- package/dist/lib/llm_api/hazo_llm_image_text.js.map +1 -1
- package/dist/lib/llm_api/hazo_llm_prompt_chain.d.ts.map +1 -1
- package/dist/lib/llm_api/hazo_llm_prompt_chain.js +17 -1
- package/dist/lib/llm_api/hazo_llm_prompt_chain.js.map +1 -1
- package/dist/lib/llm_api/hazo_llm_text_image.d.ts.map +1 -1
- package/dist/lib/llm_api/hazo_llm_text_image.js +56 -14
- package/dist/lib/llm_api/hazo_llm_text_image.js.map +1 -1
- package/dist/lib/llm_api/hazo_llm_text_text.d.ts.map +1 -1
- package/dist/lib/llm_api/hazo_llm_text_text.js +90 -15
- package/dist/lib/llm_api/hazo_llm_text_text.js.map +1 -1
- package/dist/lib/llm_api/index.d.ts +29 -1
- package/dist/lib/llm_api/index.d.ts.map +1 -1
- package/dist/lib/llm_api/index.js +433 -6
- package/dist/lib/llm_api/index.js.map +1 -1
- package/dist/lib/llm_api/prompt_parts_helper.d.ts +15 -0
- package/dist/lib/llm_api/prompt_parts_helper.d.ts.map +1 -0
- package/dist/lib/llm_api/prompt_parts_helper.js +9 -0
- package/dist/lib/llm_api/prompt_parts_helper.js.map +1 -0
- package/dist/lib/llm_api/types.d.ts +187 -2
- package/dist/lib/llm_api/types.d.ts.map +1 -1
- package/dist/lib/llm_api/types.js +4 -0
- package/dist/lib/llm_api/types.js.map +1 -1
- package/dist/lib/maintenance/purge_log_job.d.ts +23 -0
- package/dist/lib/maintenance/purge_log_job.d.ts.map +1 -0
- package/dist/lib/maintenance/purge_log_job.js +42 -0
- package/dist/lib/maintenance/purge_log_job.js.map +1 -0
- package/dist/lib/observability/log_context.d.ts +15 -0
- package/dist/lib/observability/log_context.d.ts.map +1 -0
- package/dist/lib/observability/log_context.js +32 -0
- package/dist/lib/observability/log_context.js.map +1 -0
- package/dist/lib/observability/log_writer.d.ts +35 -0
- package/dist/lib/observability/log_writer.d.ts.map +1 -0
- package/dist/lib/observability/log_writer.js +106 -0
- package/dist/lib/observability/log_writer.js.map +1 -0
- package/dist/lib/observability/queries.d.ts +15 -0
- package/dist/lib/observability/queries.d.ts.map +1 -0
- package/dist/lib/observability/queries.js +78 -0
- package/dist/lib/observability/queries.js.map +1 -0
- package/dist/lib/observability/types.d.ts +77 -0
- package/dist/lib/observability/types.d.ts.map +1 -0
- package/dist/lib/observability/types.js +8 -0
- package/dist/lib/observability/types.js.map +1 -0
- package/dist/lib/pricing/pricing.d.ts +49 -0
- package/dist/lib/pricing/pricing.d.ts.map +1 -0
- package/dist/lib/pricing/pricing.js +153 -0
- package/dist/lib/pricing/pricing.js.map +1 -0
- package/dist/lib/pricing/pricing.json +75 -0
- package/dist/lib/pricing/types.d.ts +58 -0
- package/dist/lib/pricing/types.d.ts.map +1 -0
- package/dist/lib/pricing/types.js +8 -0
- package/dist/lib/pricing/types.js.map +1 -0
- package/dist/lib/providers/anthropic/anthropic_client.d.ts +71 -0
- package/dist/lib/providers/anthropic/anthropic_client.d.ts.map +1 -0
- package/dist/lib/providers/anthropic/anthropic_client.js +134 -0
- package/dist/lib/providers/anthropic/anthropic_client.js.map +1 -0
- package/dist/lib/providers/anthropic/anthropic_provider.d.ts +60 -0
- package/dist/lib/providers/anthropic/anthropic_provider.d.ts.map +1 -0
- package/dist/lib/providers/anthropic/anthropic_provider.js +273 -0
- package/dist/lib/providers/anthropic/anthropic_provider.js.map +1 -0
- package/dist/lib/providers/anthropic/anthropic_response_to_usage.d.ts +21 -0
- package/dist/lib/providers/anthropic/anthropic_response_to_usage.d.ts.map +1 -0
- package/dist/lib/providers/anthropic/anthropic_response_to_usage.js +46 -0
- package/dist/lib/providers/anthropic/anthropic_response_to_usage.js.map +1 -0
- package/dist/lib/providers/anthropic/index.d.ts +3 -0
- package/dist/lib/providers/anthropic/index.d.ts.map +1 -0
- package/dist/lib/providers/anthropic/index.js +2 -0
- package/dist/lib/providers/anthropic/index.js.map +1 -0
- package/dist/lib/providers/deepseek/deepseek_client.d.ts +55 -0
- package/dist/lib/providers/deepseek/deepseek_client.d.ts.map +1 -0
- package/dist/lib/providers/deepseek/deepseek_client.js +129 -0
- package/dist/lib/providers/deepseek/deepseek_client.js.map +1 -0
- package/dist/lib/providers/deepseek/deepseek_provider.d.ts +50 -0
- package/dist/lib/providers/deepseek/deepseek_provider.d.ts.map +1 -0
- package/dist/lib/providers/deepseek/deepseek_provider.js +147 -0
- package/dist/lib/providers/deepseek/deepseek_provider.js.map +1 -0
- package/dist/lib/providers/deepseek/deepseek_response_to_usage.d.ts +21 -0
- package/dist/lib/providers/deepseek/deepseek_response_to_usage.d.ts.map +1 -0
- package/dist/lib/providers/deepseek/deepseek_response_to_usage.js +40 -0
- package/dist/lib/providers/deepseek/deepseek_response_to_usage.js.map +1 -0
- package/dist/lib/providers/deepseek/index.d.ts +3 -0
- package/dist/lib/providers/deepseek/index.d.ts.map +1 -0
- package/dist/lib/providers/deepseek/index.js +2 -0
- package/dist/lib/providers/deepseek/index.js.map +1 -0
- package/dist/lib/providers/gemini/gemini_provider.d.ts.map +1 -1
- package/dist/lib/providers/gemini/gemini_provider.js +40 -4
- package/dist/lib/providers/gemini/gemini_provider.js.map +1 -1
- package/dist/lib/providers/gemini/gemini_response_to_usage.d.ts +37 -0
- package/dist/lib/providers/gemini/gemini_response_to_usage.d.ts.map +1 -0
- package/dist/lib/providers/gemini/gemini_response_to_usage.js +49 -0
- package/dist/lib/providers/gemini/gemini_response_to_usage.js.map +1 -0
- package/dist/lib/providers/index.d.ts +3 -0
- package/dist/lib/providers/index.d.ts.map +1 -1
- package/dist/lib/providers/index.js +3 -0
- package/dist/lib/providers/index.js.map +1 -1
- package/dist/lib/providers/openai/index.d.ts +3 -0
- package/dist/lib/providers/openai/index.d.ts.map +1 -0
- package/dist/lib/providers/openai/index.js +2 -0
- package/dist/lib/providers/openai/index.js.map +1 -0
- package/dist/lib/providers/openai/openai_client.d.ts +99 -0
- package/dist/lib/providers/openai/openai_client.d.ts.map +1 -0
- package/dist/lib/providers/openai/openai_client.js +187 -0
- package/dist/lib/providers/openai/openai_client.js.map +1 -0
- package/dist/lib/providers/openai/openai_provider.d.ts +66 -0
- package/dist/lib/providers/openai/openai_provider.d.ts.map +1 -0
- package/dist/lib/providers/openai/openai_provider.js +297 -0
- package/dist/lib/providers/openai/openai_provider.js.map +1 -0
- package/dist/lib/providers/openai/openai_response_to_usage.d.ts +21 -0
- package/dist/lib/providers/openai/openai_response_to_usage.d.ts.map +1 -0
- package/dist/lib/providers/openai/openai_response_to_usage.js +50 -0
- package/dist/lib/providers/openai/openai_response_to_usage.js.map +1 -0
- package/dist/lib/providers/qwen/qwen_provider.d.ts.map +1 -1
- package/dist/lib/providers/qwen/qwen_provider.js +52 -5
- package/dist/lib/providers/qwen/qwen_provider.js.map +1 -1
- package/dist/lib/providers/qwen/qwen_response_to_usage.d.ts +36 -0
- package/dist/lib/providers/qwen/qwen_response_to_usage.d.ts.map +1 -0
- package/dist/lib/providers/qwen/qwen_response_to_usage.js +50 -0
- package/dist/lib/providers/qwen/qwen_response_to_usage.js.map +1 -0
- package/dist/lib/providers/types.d.ts +16 -6
- package/dist/lib/providers/types.d.ts.map +1 -1
- package/dist/lib/providers/types.js +1 -0
- package/dist/lib/providers/types.js.map +1 -1
- package/dist/lib/utils.d.ts +13 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +16 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/server.d.ts +16 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +29 -2
- package/dist/server.js.map +1 -1
- package/migrations/hazo_llm_api_log.sql +69 -0
- package/package.json +26 -11
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic Provider Implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements the LLMProvider interface for Anthropic's Claude API.
|
|
5
|
+
* Handles all Anthropic-specific logic including API calls, configuration,
|
|
6
|
+
* and capabilities (text_text, image_text, document_text, text_text_stream).
|
|
7
|
+
*/
|
|
8
|
+
import { SERVICE_TYPES } from '../types.js';
|
|
9
|
+
import { call_anthropic_api, call_anthropic_api_stream, } from './anthropic_client.js';
|
|
10
|
+
import { anthropic_response_to_usage } from './anthropic_response_to_usage.js';
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// Default constants
|
|
13
|
+
// =============================================================================
|
|
14
|
+
const DEFAULT_API_URL = 'https://api.anthropic.com/v1/messages';
|
|
15
|
+
const DEFAULT_API_VERSION = '2023-06-01';
|
|
16
|
+
const DEFAULT_MODEL = 'claude-sonnet-4-6';
|
|
17
|
+
// =============================================================================
|
|
18
|
+
// Anthropic Provider Class
|
|
19
|
+
// =============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Anthropic LLM Provider
|
|
22
|
+
* Implements the LLMProvider interface for Anthropic Claude API
|
|
23
|
+
*/
|
|
24
|
+
export class AnthropicProvider {
|
|
25
|
+
constructor(config) {
|
|
26
|
+
this.name = 'anthropic';
|
|
27
|
+
this.api_key = config.api_key;
|
|
28
|
+
this.api_url = config.api_url ?? DEFAULT_API_URL;
|
|
29
|
+
this.api_version = config.api_version ?? DEFAULT_API_VERSION;
|
|
30
|
+
this.model_text_text = config.model_text_text;
|
|
31
|
+
this.model_image_text = config.model_image_text;
|
|
32
|
+
this.model_document_text = config.model_document_text;
|
|
33
|
+
this.generation_config = config.generation_config;
|
|
34
|
+
this.logger = config.logger;
|
|
35
|
+
if (config.capabilities && config.capabilities.length > 0) {
|
|
36
|
+
this.capabilities = new Set(config.capabilities);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
this.capabilities = new Set([
|
|
40
|
+
SERVICE_TYPES.TEXT_TEXT,
|
|
41
|
+
SERVICE_TYPES.IMAGE_TEXT,
|
|
42
|
+
SERVICE_TYPES.DOCUMENT_TEXT,
|
|
43
|
+
'text_text_stream',
|
|
44
|
+
]);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// =========================================================================
|
|
48
|
+
// LLMProvider interface — identity & introspection
|
|
49
|
+
// =========================================================================
|
|
50
|
+
get_name() {
|
|
51
|
+
return this.name;
|
|
52
|
+
}
|
|
53
|
+
get_capabilities() {
|
|
54
|
+
return new Set(this.capabilities);
|
|
55
|
+
}
|
|
56
|
+
get_model_for_service(service_type) {
|
|
57
|
+
switch (service_type) {
|
|
58
|
+
case SERVICE_TYPES.TEXT_TEXT:
|
|
59
|
+
return this.model_text_text;
|
|
60
|
+
case SERVICE_TYPES.IMAGE_TEXT:
|
|
61
|
+
return this.model_image_text;
|
|
62
|
+
case SERVICE_TYPES.DOCUMENT_TEXT:
|
|
63
|
+
return this.model_document_text;
|
|
64
|
+
default:
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// =========================================================================
|
|
69
|
+
// text_text — Text input → Text output
|
|
70
|
+
// =========================================================================
|
|
71
|
+
async text_text(params, _logger) {
|
|
72
|
+
const model = this.model_text_text ?? DEFAULT_MODEL;
|
|
73
|
+
// Build message content — support prompt_parts for native caching
|
|
74
|
+
let content;
|
|
75
|
+
if (params.prompt_parts && params.prompt_parts.length > 0) {
|
|
76
|
+
content = params.prompt_parts.map(part => {
|
|
77
|
+
const text_item = { type: 'text', text: part.text };
|
|
78
|
+
if (part.cache) {
|
|
79
|
+
// Add cache_control for Anthropic's prompt caching feature
|
|
80
|
+
text_item['cache_control'] = { type: 'ephemeral' };
|
|
81
|
+
}
|
|
82
|
+
return text_item;
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
content = [{ type: 'text', text: params.prompt ?? '' }];
|
|
87
|
+
}
|
|
88
|
+
const messages = [{ role: 'user', content }];
|
|
89
|
+
const start_time = Date.now();
|
|
90
|
+
let raw;
|
|
91
|
+
let status;
|
|
92
|
+
try {
|
|
93
|
+
({ raw, status } = await call_anthropic_api({
|
|
94
|
+
api_key: this.api_key,
|
|
95
|
+
api_url: this.api_url,
|
|
96
|
+
api_version: this.api_version,
|
|
97
|
+
model,
|
|
98
|
+
messages,
|
|
99
|
+
generation_config: this.generation_config,
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
104
|
+
return { success: false, error, error_code: 'NETWORK_ERROR', retryable: true };
|
|
105
|
+
}
|
|
106
|
+
const latency_ms = Date.now() - start_time;
|
|
107
|
+
if (status >= 400) {
|
|
108
|
+
const error_code = status === 429 ? 'RATE_LIMITED' : 'API_ERROR';
|
|
109
|
+
return {
|
|
110
|
+
success: false,
|
|
111
|
+
error: `Anthropic API error: ${status}`,
|
|
112
|
+
error_code,
|
|
113
|
+
retryable: error_code === 'RATE_LIMITED',
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
const response_content = raw.content;
|
|
117
|
+
const data = response_content?.[0]?.text;
|
|
118
|
+
const usage = anthropic_response_to_usage({ raw, model_fallback: model, latency_ms });
|
|
119
|
+
return {
|
|
120
|
+
success: true,
|
|
121
|
+
data,
|
|
122
|
+
text: data,
|
|
123
|
+
raw_response: raw,
|
|
124
|
+
usage,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// =========================================================================
|
|
128
|
+
// image_text — Image input → Text output
|
|
129
|
+
// =========================================================================
|
|
130
|
+
async image_text(params, _logger) {
|
|
131
|
+
const model = this.model_image_text ?? DEFAULT_MODEL;
|
|
132
|
+
const content = [
|
|
133
|
+
{
|
|
134
|
+
type: 'image',
|
|
135
|
+
source: {
|
|
136
|
+
type: 'base64',
|
|
137
|
+
media_type: params.image_mime_type,
|
|
138
|
+
data: params.image_b64,
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
{ type: 'text', text: params.prompt },
|
|
142
|
+
];
|
|
143
|
+
const messages = [{ role: 'user', content }];
|
|
144
|
+
const start_time = Date.now();
|
|
145
|
+
let raw;
|
|
146
|
+
let status;
|
|
147
|
+
try {
|
|
148
|
+
({ raw, status } = await call_anthropic_api({
|
|
149
|
+
api_key: this.api_key,
|
|
150
|
+
api_url: this.api_url,
|
|
151
|
+
api_version: this.api_version,
|
|
152
|
+
model,
|
|
153
|
+
messages,
|
|
154
|
+
generation_config: this.generation_config,
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
159
|
+
return { success: false, error, error_code: 'NETWORK_ERROR', retryable: true };
|
|
160
|
+
}
|
|
161
|
+
const latency_ms = Date.now() - start_time;
|
|
162
|
+
if (status >= 400) {
|
|
163
|
+
const error_code = status === 429 ? 'RATE_LIMITED' : 'API_ERROR';
|
|
164
|
+
return {
|
|
165
|
+
success: false,
|
|
166
|
+
error: `Anthropic API error: ${status}`,
|
|
167
|
+
error_code,
|
|
168
|
+
retryable: error_code === 'RATE_LIMITED',
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
const content_arr = raw.content;
|
|
172
|
+
const data = content_arr?.[0]?.text;
|
|
173
|
+
const usage = anthropic_response_to_usage({ raw, model_fallback: model, latency_ms });
|
|
174
|
+
return {
|
|
175
|
+
success: true,
|
|
176
|
+
data,
|
|
177
|
+
text: data,
|
|
178
|
+
raw_response: raw,
|
|
179
|
+
usage,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
// =========================================================================
|
|
183
|
+
// document_text — Document (PDF) input → Text output
|
|
184
|
+
// =========================================================================
|
|
185
|
+
async document_text(params, _logger) {
|
|
186
|
+
const model = this.model_document_text ?? DEFAULT_MODEL;
|
|
187
|
+
const content = [
|
|
188
|
+
{
|
|
189
|
+
type: 'document',
|
|
190
|
+
source: {
|
|
191
|
+
type: 'base64',
|
|
192
|
+
media_type: 'application/pdf',
|
|
193
|
+
data: params.document_b64,
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
{ type: 'text', text: params.prompt },
|
|
197
|
+
];
|
|
198
|
+
const messages = [{ role: 'user', content }];
|
|
199
|
+
const start_time = Date.now();
|
|
200
|
+
let raw;
|
|
201
|
+
let status;
|
|
202
|
+
try {
|
|
203
|
+
({ raw, status } = await call_anthropic_api({
|
|
204
|
+
api_key: this.api_key,
|
|
205
|
+
api_url: this.api_url,
|
|
206
|
+
api_version: this.api_version,
|
|
207
|
+
model,
|
|
208
|
+
messages,
|
|
209
|
+
generation_config: this.generation_config,
|
|
210
|
+
}));
|
|
211
|
+
}
|
|
212
|
+
catch (err) {
|
|
213
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
214
|
+
return { success: false, error, error_code: 'NETWORK_ERROR', retryable: true };
|
|
215
|
+
}
|
|
216
|
+
const latency_ms = Date.now() - start_time;
|
|
217
|
+
if (status >= 400) {
|
|
218
|
+
const error_code = status === 429 ? 'RATE_LIMITED' : 'API_ERROR';
|
|
219
|
+
return {
|
|
220
|
+
success: false,
|
|
221
|
+
error: `Anthropic API error: ${status}`,
|
|
222
|
+
error_code,
|
|
223
|
+
retryable: error_code === 'RATE_LIMITED',
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
const content_arr = raw.content;
|
|
227
|
+
const data = content_arr?.[0]?.text;
|
|
228
|
+
const usage = anthropic_response_to_usage({ raw, model_fallback: model, latency_ms });
|
|
229
|
+
return {
|
|
230
|
+
success: true,
|
|
231
|
+
data,
|
|
232
|
+
text: data,
|
|
233
|
+
raw_response: raw,
|
|
234
|
+
usage,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
// =========================================================================
|
|
238
|
+
// text_text_stream — Text input → streaming Text output
|
|
239
|
+
// =========================================================================
|
|
240
|
+
async text_text_stream(params, _logger) {
|
|
241
|
+
const model = this.model_text_text ?? DEFAULT_MODEL;
|
|
242
|
+
const messages = [
|
|
243
|
+
{
|
|
244
|
+
role: 'user',
|
|
245
|
+
content: [{ type: 'text', text: params.prompt ?? '' }],
|
|
246
|
+
},
|
|
247
|
+
];
|
|
248
|
+
return call_anthropic_api_stream({
|
|
249
|
+
api_key: this.api_key,
|
|
250
|
+
api_url: this.api_url,
|
|
251
|
+
api_version: this.api_version,
|
|
252
|
+
model,
|
|
253
|
+
messages,
|
|
254
|
+
generation_config: this.generation_config,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
// =========================================================================
|
|
258
|
+
// Unsupported methods (satisfy LLMProvider interface completeness)
|
|
259
|
+
// =========================================================================
|
|
260
|
+
async text_image(_params, _logger) {
|
|
261
|
+
return {
|
|
262
|
+
success: false,
|
|
263
|
+
error: 'Anthropic provider does not support text_image',
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
async image_image(_params, _logger) {
|
|
267
|
+
return {
|
|
268
|
+
success: false,
|
|
269
|
+
error: 'Anthropic provider does not support image_image',
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=anthropic_provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic_provider.js","sourceRoot":"","sources":["../../../../src/lib/providers/anthropic/anthropic_provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure transform: Anthropic API response → normalized UsageInfo.
|
|
3
|
+
*
|
|
4
|
+
* Kept separate so it can be unit-tested without network access or mocking
|
|
5
|
+
* any provider internals.
|
|
6
|
+
*/
|
|
7
|
+
import type { UsageInfo } from '../../pricing/types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Convert a raw Anthropic Messages API response into a normalized UsageInfo object.
|
|
10
|
+
* Calls compute_cost() to enrich with pricing data.
|
|
11
|
+
*
|
|
12
|
+
* @param opts.raw - The raw JSON response from the Anthropic API
|
|
13
|
+
* @param opts.model_fallback - Model string used when raw.model is absent
|
|
14
|
+
* @param opts.latency_ms - Wall-clock milliseconds from request start to response received
|
|
15
|
+
*/
|
|
16
|
+
export declare function anthropic_response_to_usage(opts: {
|
|
17
|
+
raw: Record<string, unknown>;
|
|
18
|
+
model_fallback: string;
|
|
19
|
+
latency_ms: number;
|
|
20
|
+
}): UsageInfo;
|
|
21
|
+
//# sourceMappingURL=anthropic_response_to_usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic_response_to_usage.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/anthropic/anthropic_response_to_usage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,SAAS,CAoCZ"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure transform: Anthropic API response → normalized UsageInfo.
|
|
3
|
+
*
|
|
4
|
+
* Kept separate so it can be unit-tested without network access or mocking
|
|
5
|
+
* any provider internals.
|
|
6
|
+
*/
|
|
7
|
+
import { compute_cost } from '../../pricing/pricing.js';
|
|
8
|
+
/**
|
|
9
|
+
* Convert a raw Anthropic Messages API response into a normalized UsageInfo object.
|
|
10
|
+
* Calls compute_cost() to enrich with pricing data.
|
|
11
|
+
*
|
|
12
|
+
* @param opts.raw - The raw JSON response from the Anthropic API
|
|
13
|
+
* @param opts.model_fallback - Model string used when raw.model is absent
|
|
14
|
+
* @param opts.latency_ms - Wall-clock milliseconds from request start to response received
|
|
15
|
+
*/
|
|
16
|
+
export function anthropic_response_to_usage(opts) {
|
|
17
|
+
const { raw, model_fallback, latency_ms } = opts;
|
|
18
|
+
const usage = raw.usage;
|
|
19
|
+
const input_tokens = typeof usage?.input_tokens === 'number' ? usage.input_tokens : 0;
|
|
20
|
+
const output_tokens = typeof usage?.output_tokens === 'number' ? usage.output_tokens : 0;
|
|
21
|
+
const model = typeof raw.model === 'string' ? raw.model : model_fallback;
|
|
22
|
+
const finish_reason = typeof raw.stop_reason === 'string' ? raw.stop_reason : undefined;
|
|
23
|
+
const cost_usd = compute_cost({
|
|
24
|
+
provider: 'anthropic',
|
|
25
|
+
model,
|
|
26
|
+
tokens: {
|
|
27
|
+
input: input_tokens,
|
|
28
|
+
output: output_tokens,
|
|
29
|
+
total: input_tokens + output_tokens,
|
|
30
|
+
},
|
|
31
|
+
latency_ms,
|
|
32
|
+
}).cost_usd;
|
|
33
|
+
return {
|
|
34
|
+
provider: 'anthropic',
|
|
35
|
+
model,
|
|
36
|
+
tokens: {
|
|
37
|
+
input: input_tokens,
|
|
38
|
+
output: output_tokens,
|
|
39
|
+
total: input_tokens + output_tokens,
|
|
40
|
+
},
|
|
41
|
+
cost_usd,
|
|
42
|
+
latency_ms,
|
|
43
|
+
finish_reason: finish_reason,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=anthropic_response_to_usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic_response_to_usage.js","sourceRoot":"","sources":["../../../../src/lib/providers/anthropic/anthropic_response_to_usage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGxD;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAI3C;IACC,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAEjD,MAAM,KAAK,GAAG,GAAG,CAAC,KAA4C,CAAC;IAC/D,MAAM,YAAY,GAChB,OAAO,KAAK,EAAE,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,aAAa,GACjB,OAAO,KAAK,EAAE,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC;IACzE,MAAM,aAAa,GACjB,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpE,MAAM,QAAQ,GAAG,YAAY,CAAC;QAC5B,QAAQ,EAAE,WAAW;QACrB,KAAK;QACL,MAAM,EAAE;YACN,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,YAAY,GAAG,aAAa;SACpC;QACD,UAAU;KACX,CAAC,CAAC,QAAQ,CAAC;IAEZ,OAAO;QACL,QAAQ,EAAE,WAAW;QACrB,KAAK;QACL,MAAM,EAAE;YACN,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,YAAY,GAAG,aAAa;SACpC;QACD,QAAQ;QACR,UAAU;QACV,aAAa,EAAE,aAA2C;KAC3D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/anthropic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,YAAY,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/providers/anthropic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAgC,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeepSeek API Client Module
|
|
3
|
+
*
|
|
4
|
+
* Handles communication with the DeepSeek Chat Completions API.
|
|
5
|
+
* Uses the OpenAI-compatible API format.
|
|
6
|
+
*/
|
|
7
|
+
import type { LLMStreamChunk } from '../../llm_api/types.js';
|
|
8
|
+
/**
|
|
9
|
+
* DeepSeek message role
|
|
10
|
+
*/
|
|
11
|
+
export interface DeepSeekMessage {
|
|
12
|
+
role: 'user' | 'assistant' | 'system';
|
|
13
|
+
content: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* DeepSeek generation configuration parameters
|
|
17
|
+
*/
|
|
18
|
+
export interface DeepSeekGenerationConfig {
|
|
19
|
+
/** Controls randomness in output (0.0-2.0). Lower = more deterministic */
|
|
20
|
+
temperature?: number;
|
|
21
|
+
/** Nucleus sampling probability (0.0-1.0) */
|
|
22
|
+
top_p?: number;
|
|
23
|
+
/** Maximum number of tokens in the response */
|
|
24
|
+
max_tokens?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Call the DeepSeek Chat Completions API (non-streaming)
|
|
28
|
+
* @param opts - API call options
|
|
29
|
+
* @returns Raw API response and HTTP status code
|
|
30
|
+
*/
|
|
31
|
+
export declare function call_deepseek_api(opts: {
|
|
32
|
+
api_key: string;
|
|
33
|
+
api_url: string;
|
|
34
|
+
model: string;
|
|
35
|
+
messages: DeepSeekMessage[];
|
|
36
|
+
generation_config?: DeepSeekGenerationConfig;
|
|
37
|
+
}): Promise<{
|
|
38
|
+
raw: Record<string, unknown>;
|
|
39
|
+
status: number;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Call the DeepSeek Chat Completions API with streaming enabled.
|
|
43
|
+
* Yields LLMStreamChunk objects as SSE events arrive.
|
|
44
|
+
*
|
|
45
|
+
* @param opts - API call options
|
|
46
|
+
* @yields LLMStreamChunk objects with text deltas or done/error signals
|
|
47
|
+
*/
|
|
48
|
+
export declare function call_deepseek_api_stream(opts: {
|
|
49
|
+
api_key: string;
|
|
50
|
+
api_url: string;
|
|
51
|
+
model: string;
|
|
52
|
+
messages: DeepSeekMessage[];
|
|
53
|
+
generation_config?: DeepSeekGenerationConfig;
|
|
54
|
+
}): AsyncGenerator<LLMStreamChunk, void, unknown>;
|
|
55
|
+
//# sourceMappingURL=deepseek_client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek_client.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/deepseek/deepseek_client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAM7D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;CAC9C,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA6B5D;AAMD;;;;;;GAMG;AACH,wBAAuB,wBAAwB,CAAC,IAAI,EAAE;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;CAC9C,GAAG,cAAc,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAiFhD"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeepSeek API Client Module
|
|
3
|
+
*
|
|
4
|
+
* Handles communication with the DeepSeek Chat Completions API.
|
|
5
|
+
* Uses the OpenAI-compatible API format.
|
|
6
|
+
*/
|
|
7
|
+
// =============================================================================
|
|
8
|
+
// DeepSeek Chat Completions API Client
|
|
9
|
+
// =============================================================================
|
|
10
|
+
/**
|
|
11
|
+
* Call the DeepSeek Chat Completions API (non-streaming)
|
|
12
|
+
* @param opts - API call options
|
|
13
|
+
* @returns Raw API response and HTTP status code
|
|
14
|
+
*/
|
|
15
|
+
export async function call_deepseek_api(opts) {
|
|
16
|
+
const body = {
|
|
17
|
+
model: opts.model,
|
|
18
|
+
messages: opts.messages,
|
|
19
|
+
};
|
|
20
|
+
if (opts.generation_config) {
|
|
21
|
+
if (opts.generation_config.temperature !== undefined) {
|
|
22
|
+
body.temperature = opts.generation_config.temperature;
|
|
23
|
+
}
|
|
24
|
+
if (opts.generation_config.top_p !== undefined) {
|
|
25
|
+
body.top_p = opts.generation_config.top_p;
|
|
26
|
+
}
|
|
27
|
+
if (opts.generation_config.max_tokens !== undefined) {
|
|
28
|
+
body.max_tokens = opts.generation_config.max_tokens;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const response = await fetch(opts.api_url, {
|
|
32
|
+
method: 'POST',
|
|
33
|
+
headers: {
|
|
34
|
+
'Authorization': `Bearer ${opts.api_key}`,
|
|
35
|
+
'Content-Type': 'application/json',
|
|
36
|
+
},
|
|
37
|
+
body: JSON.stringify(body),
|
|
38
|
+
});
|
|
39
|
+
const raw = (await response.json());
|
|
40
|
+
return { raw, status: response.status };
|
|
41
|
+
}
|
|
42
|
+
// =============================================================================
|
|
43
|
+
// DeepSeek Streaming API Client
|
|
44
|
+
// =============================================================================
|
|
45
|
+
/**
|
|
46
|
+
* Call the DeepSeek Chat Completions API with streaming enabled.
|
|
47
|
+
* Yields LLMStreamChunk objects as SSE events arrive.
|
|
48
|
+
*
|
|
49
|
+
* @param opts - API call options
|
|
50
|
+
* @yields LLMStreamChunk objects with text deltas or done/error signals
|
|
51
|
+
*/
|
|
52
|
+
export async function* call_deepseek_api_stream(opts) {
|
|
53
|
+
const body = {
|
|
54
|
+
model: opts.model,
|
|
55
|
+
messages: opts.messages,
|
|
56
|
+
stream: true,
|
|
57
|
+
};
|
|
58
|
+
if (opts.generation_config) {
|
|
59
|
+
if (opts.generation_config.temperature !== undefined) {
|
|
60
|
+
body.temperature = opts.generation_config.temperature;
|
|
61
|
+
}
|
|
62
|
+
if (opts.generation_config.top_p !== undefined) {
|
|
63
|
+
body.top_p = opts.generation_config.top_p;
|
|
64
|
+
}
|
|
65
|
+
if (opts.generation_config.max_tokens !== undefined) {
|
|
66
|
+
body.max_tokens = opts.generation_config.max_tokens;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
let response;
|
|
70
|
+
try {
|
|
71
|
+
response = await fetch(opts.api_url, {
|
|
72
|
+
method: 'POST',
|
|
73
|
+
headers: {
|
|
74
|
+
'Authorization': `Bearer ${opts.api_key}`,
|
|
75
|
+
'Content-Type': 'application/json',
|
|
76
|
+
},
|
|
77
|
+
body: JSON.stringify(body),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
82
|
+
yield { text: '', done: false, error: `DeepSeek network error: ${msg}` };
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (!response.ok || !response.body) {
|
|
86
|
+
yield { text: '', done: false, error: `DeepSeek API error: ${response.status}` };
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const reader = response.body.getReader();
|
|
90
|
+
const decoder = new TextDecoder();
|
|
91
|
+
let buffer = '';
|
|
92
|
+
try {
|
|
93
|
+
while (true) {
|
|
94
|
+
const { done, value } = await reader.read();
|
|
95
|
+
if (done)
|
|
96
|
+
break;
|
|
97
|
+
buffer += decoder.decode(value, { stream: true });
|
|
98
|
+
const lines = buffer.split('\n');
|
|
99
|
+
buffer = lines.pop() ?? '';
|
|
100
|
+
for (const line of lines) {
|
|
101
|
+
if (!line.startsWith('data: '))
|
|
102
|
+
continue;
|
|
103
|
+
const data_str = line.slice(6).trim();
|
|
104
|
+
if (!data_str)
|
|
105
|
+
continue;
|
|
106
|
+
if (data_str === '[DONE]') {
|
|
107
|
+
yield { text: '', done: true };
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
try {
|
|
111
|
+
const data = JSON.parse(data_str);
|
|
112
|
+
const choices = data.choices;
|
|
113
|
+
const delta = choices?.[0]?.delta;
|
|
114
|
+
const content = delta?.content;
|
|
115
|
+
if (content !== null && content !== undefined) {
|
|
116
|
+
yield { text: content, done: false };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// Ignore malformed SSE data lines
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
reader.releaseLock();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=deepseek_client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek_client.js","sourceRoot":"","sources":["../../../../src/lib/providers/deepseek/deepseek_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeepSeek Provider Implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements the LLMProvider interface for the DeepSeek API.
|
|
5
|
+
* Handles text generation and streaming using OpenAI-compatible API format.
|
|
6
|
+
*/
|
|
7
|
+
import type { LLMProvider, LLMCapabilities, ServiceType } from '../types.js';
|
|
8
|
+
import type { TextTextParams, ImageTextParams, TextImageParams, ImageImageParams, DocumentTextParams, LLMResponse, LLMStreamResponse, Logger } from '../../llm_api/types.js';
|
|
9
|
+
import { type DeepSeekGenerationConfig } from './deepseek_client.js';
|
|
10
|
+
/**
|
|
11
|
+
* Configuration for the DeepSeek provider
|
|
12
|
+
*/
|
|
13
|
+
export interface DeepSeekProviderConfig {
|
|
14
|
+
/** API key from .env.local (DEEPSEEK_API_KEY) */
|
|
15
|
+
api_key: string;
|
|
16
|
+
/** Chat completions API URL (default: 'https://api.deepseek.com/v1/chat/completions') */
|
|
17
|
+
api_url?: string;
|
|
18
|
+
/** Model for text_text service (default: 'deepseek-chat') */
|
|
19
|
+
model_text_text?: string;
|
|
20
|
+
/** Generation parameters applied to text calls */
|
|
21
|
+
generation_config?: DeepSeekGenerationConfig;
|
|
22
|
+
/** Capabilities this provider supports (overrides defaults when specified) */
|
|
23
|
+
capabilities?: ServiceType[];
|
|
24
|
+
/** Logger instance */
|
|
25
|
+
logger: Logger;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* DeepSeek LLM Provider
|
|
29
|
+
* Implements the LLMProvider interface for the DeepSeek API
|
|
30
|
+
*/
|
|
31
|
+
export declare class DeepSeekProvider implements LLMProvider {
|
|
32
|
+
private readonly name;
|
|
33
|
+
private readonly api_key;
|
|
34
|
+
private readonly api_url;
|
|
35
|
+
private readonly model_text_text;
|
|
36
|
+
private readonly generation_config;
|
|
37
|
+
private readonly capabilities;
|
|
38
|
+
private readonly logger;
|
|
39
|
+
constructor(config: DeepSeekProviderConfig);
|
|
40
|
+
get_name(): string;
|
|
41
|
+
get_capabilities(): LLMCapabilities;
|
|
42
|
+
get_model_for_service(service_type: ServiceType): string | undefined;
|
|
43
|
+
text_text(params: TextTextParams, _logger: Logger): Promise<LLMResponse>;
|
|
44
|
+
text_text_stream(params: TextTextParams, _logger: Logger): Promise<LLMStreamResponse>;
|
|
45
|
+
image_text(_params: ImageTextParams, _logger: Logger): Promise<LLMResponse>;
|
|
46
|
+
text_image(_params: TextImageParams, _logger: Logger): Promise<LLMResponse>;
|
|
47
|
+
image_image(_params: ImageImageParams, _logger: Logger): Promise<LLMResponse>;
|
|
48
|
+
document_text(_params: DocumentTextParams, _logger: Logger): Promise<LLMResponse>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=deepseek_provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek_provider.d.ts","sourceRoot":"","sources":["../../../../src/lib/providers/deepseek/deepseek_provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,MAAM,EACP,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAIL,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAc9B;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAEhB,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAE7C,8EAA8E;IAC9E,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAE7B,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAClD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuC;IACzE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,sBAAsB;IAqB1C,QAAQ,IAAI,MAAM;IAIlB,gBAAgB,IAAI,eAAe;IAInC,qBAAqB,CAAC,YAAY,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS;IAa9D,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAqDxE,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmBrF,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAO3E,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAO3E,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAO7E,aAAa,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAMxF"}
|