@holokai/holo-provider-claude 0.1.3 → 1.0.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 +81 -64
- package/dist/claude.auditor.d.ts +6 -3
- package/dist/claude.auditor.d.ts.map +1 -1
- package/dist/claude.auditor.js +14 -13
- package/dist/claude.auditor.js.map +1 -1
- package/dist/claude.provider.d.ts +4 -2
- package/dist/claude.provider.d.ts.map +1 -1
- package/dist/claude.provider.js +13 -9
- package/dist/claude.provider.js.map +1 -1
- package/dist/claude.response.factory.d.ts +16 -15
- package/dist/claude.response.factory.d.ts.map +1 -1
- package/dist/claude.response.factory.js +16 -16
- package/dist/claude.response.factory.js.map +1 -1
- package/dist/claude.translator.d.ts +10 -9
- package/dist/claude.translator.d.ts.map +1 -1
- package/dist/claude.translator.js.map +1 -1
- package/dist/claude.wire.adapter.d.ts +1 -1
- package/dist/claude.wire.adapter.d.ts.map +1 -1
- package/dist/claude.wire.adapter.js +1 -1
- package/dist/claude.wire.adapter.js.map +1 -1
- package/dist/manifest.d.ts +2 -2
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +2 -139
- package/dist/manifest.js.map +1 -1
- package/dist/plugin.d.ts +8 -7
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +2 -1
- package/dist/plugin.js.map +1 -1
- package/dist/translators/claude.content.translators.d.ts +6 -6
- package/dist/translators/claude.content.translators.d.ts.map +1 -1
- package/dist/translators/claude.content.translators.js.map +1 -1
- package/dist/translators/claude.message.translators.d.ts +6 -6
- package/dist/translators/claude.message.translators.d.ts.map +1 -1
- package/dist/translators/claude.message.translators.js +1 -1
- package/dist/translators/claude.message.translators.js.map +1 -1
- package/dist/translators/claude.request.translators.d.ts +6 -6
- package/dist/translators/claude.request.translators.d.ts.map +1 -1
- package/dist/translators/claude.request.translators.js +2 -2
- package/dist/translators/claude.request.translators.js.map +1 -1
- package/dist/translators/claude.response.content.translators.d.ts +6 -6
- package/dist/translators/claude.response.content.translators.d.ts.map +1 -1
- package/dist/translators/claude.response.content.translators.js.map +1 -1
- package/dist/translators/claude.response.message.translators.d.ts +6 -6
- package/dist/translators/claude.response.message.translators.d.ts.map +1 -1
- package/dist/translators/claude.response.message.translators.js +1 -2
- package/dist/translators/claude.response.message.translators.js.map +1 -1
- package/dist/translators/claude.response.translators.d.ts +7 -7
- package/dist/translators/claude.response.translators.d.ts.map +1 -1
- package/dist/translators/claude.response.translators.js +1 -1
- package/dist/translators/claude.response.translators.js.map +1 -1
- package/dist/translators/claude.tool.translators.d.ts +10 -10
- package/dist/translators/claude.tool.translators.d.ts.map +1 -1
- package/dist/translators/claude.tool.translators.js.map +1 -1
- package/dist/translators/claude.usage.translators.d.ts +6 -6
- package/dist/translators/claude.usage.translators.d.ts.map +1 -1
- package/dist/translators/claude.usage.translators.js.map +1 -1
- package/dist/translators/streaming/claude.content.block.delta.event.translator.d.ts +6 -6
- package/dist/translators/streaming/claude.content.block.delta.event.translator.d.ts.map +1 -1
- package/dist/translators/streaming/claude.content.block.delta.event.translator.js.map +1 -1
- package/dist/translators/streaming/claude.content.block.start.event.translator.d.ts +6 -6
- package/dist/translators/streaming/claude.content.block.start.event.translator.d.ts.map +1 -1
- package/dist/translators/streaming/claude.content.block.start.event.translator.js.map +1 -1
- package/dist/translators/streaming/claude.content.block.stop.event.translator.d.ts +6 -6
- package/dist/translators/streaming/claude.content.block.stop.event.translator.d.ts.map +1 -1
- package/dist/translators/streaming/claude.content.block.stop.event.translator.js.map +1 -1
- package/dist/translators/streaming/claude.message.delta.event.translator.d.ts +6 -6
- package/dist/translators/streaming/claude.message.delta.event.translator.d.ts.map +1 -1
- package/dist/translators/streaming/claude.message.delta.event.translator.js +0 -1
- package/dist/translators/streaming/claude.message.delta.event.translator.js.map +1 -1
- package/dist/translators/streaming/claude.message.start.event.translator.d.ts +6 -6
- package/dist/translators/streaming/claude.message.start.event.translator.d.ts.map +1 -1
- package/dist/translators/streaming/claude.message.start.event.translator.js.map +1 -1
- package/dist/translators/streaming/claude.message.stop.event.translator.d.ts +6 -6
- package/dist/translators/streaming/claude.message.stop.event.translator.d.ts.map +1 -1
- package/dist/translators/streaming/claude.message.stop.event.translator.js.map +1 -1
- package/dist/translators/streaming/claude.stream.translator.d.ts +6 -6
- package/dist/translators/streaming/claude.stream.translator.d.ts.map +1 -1
- package/dist/translators/streaming/claude.stream.translator.js.map +1 -1
- package/dist/utils/finish.reason.mapper.d.ts +3 -3
- package/dist/utils/finish.reason.mapper.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/types/index.d.ts +0 -3
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -3
- package/dist/types/index.js.map +0 -1
- package/dist/types/request.types.d.ts +0 -8
- package/dist/types/request.types.d.ts.map +0 -1
- package/dist/types/request.types.js +0 -2
- package/dist/types/request.types.js.map +0 -1
- package/dist/types/response.types.d.ts +0 -16
- package/dist/types/response.types.d.ts.map +0 -1
- package/dist/types/response.types.js +0 -2
- package/dist/types/response.types.js.map +0 -1
- package/dist/utils/stable-id.d.ts +0 -2
- package/dist/utils/stable-id.d.ts.map +0 -1
- package/dist/utils/stable-id.js +0 -13
- package/dist/utils/stable-id.js.map +0 -1
package/README.md
CHANGED
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
|
|
10
10
|
## Overview
|
|
11
11
|
|
|
12
|
-
The Claude provider plugin enables Holo to communicate with Anthropic's Claude API through the universal Holo format.
|
|
12
|
+
The Claude provider plugin enables Holo to communicate with Anthropic's Claude API through the universal Holo format.
|
|
13
|
+
This plugin is part of the migration from the monolithic provider architecture to a plugin-based system, providing
|
|
14
|
+
complete bidirectional translation between Claude's native API and the portable Holo format.
|
|
13
15
|
|
|
14
16
|
### Key Features
|
|
15
17
|
|
|
@@ -33,6 +35,7 @@ npm install @holokai/holo-provider-claude
|
|
|
33
35
|
### Peer Dependencies
|
|
34
36
|
|
|
35
37
|
This plugin requires:
|
|
38
|
+
|
|
36
39
|
- `@holokai/sdk` ^0.1.0 - Holo universal format types and plugin contracts
|
|
37
40
|
|
|
38
41
|
---
|
|
@@ -41,7 +44,8 @@ This plugin requires:
|
|
|
41
44
|
|
|
42
45
|
### Automatic Discovery
|
|
43
46
|
|
|
44
|
-
When installed in a Holo worker environment, this plugin is automatically discovered and loaded by the plugin system. No
|
|
47
|
+
When installed in a Holo worker environment, this plugin is automatically discovered and loaded by the plugin system. No
|
|
48
|
+
manual registration required.
|
|
45
49
|
|
|
46
50
|
### Configuration
|
|
47
51
|
|
|
@@ -87,9 +91,11 @@ const response: HoloResponse = await holoClient.chat(request);
|
|
|
87
91
|
|
|
88
92
|
### What Changed
|
|
89
93
|
|
|
90
|
-
This plugin represents the extraction of Claude provider logic from the monolithic `src/providers/claude/` codebase into
|
|
94
|
+
This plugin represents the extraction of Claude provider logic from the monolithic `src/providers/claude/` codebase into
|
|
95
|
+
a standalone, independently versioned package.
|
|
91
96
|
|
|
92
97
|
**Before** (Monolithic):
|
|
98
|
+
|
|
93
99
|
```
|
|
94
100
|
src/providers/claude/
|
|
95
101
|
├── claude.translator.ts
|
|
@@ -99,6 +105,7 @@ src/providers/claude/
|
|
|
99
105
|
```
|
|
100
106
|
|
|
101
107
|
**After** (Plugin):
|
|
108
|
+
|
|
102
109
|
```
|
|
103
110
|
@holokai/holo-provider-claude
|
|
104
111
|
├── src/
|
|
@@ -202,26 +209,27 @@ This plugin implements the official Holo format mappings as documented in the SD
|
|
|
202
209
|
|
|
203
210
|
### Request Mapping: Holo → Claude
|
|
204
211
|
|
|
205
|
-
| Holo Field
|
|
206
|
-
|
|
207
|
-
| **Direct 1:1**
|
|
208
|
-
| `model`
|
|
209
|
-
| `temperature`
|
|
210
|
-
| `top_p`
|
|
211
|
-
| `top_k`
|
|
212
|
-
| `stream`
|
|
213
|
-
| `max_tokens`
|
|
214
|
-
| `stop_sequences`
|
|
215
|
-
| **Structure Transforms**
|
|
216
|
-
| `system` (string)
|
|
217
|
-
| `system` (string[])
|
|
218
|
-
| `metadata.user_id`
|
|
219
|
-
| `tools[].parameters`
|
|
220
|
-
| `tool_choice.type: 'specific'` | `tool_choice.type: 'tool'` | Map type + name
|
|
221
|
-
| `tool_choice.type: 'required'` | `tool_choice.type: 'any'`
|
|
222
|
-
| `messages[]`
|
|
212
|
+
| Holo Field | Claude Field | Transformation | Notes |
|
|
213
|
+
|--------------------------------|----------------------------|----------------------------------|---------------------|
|
|
214
|
+
| **Direct 1:1** | | | |
|
|
215
|
+
| `model` | `model` | Direct | Required |
|
|
216
|
+
| `temperature` | `temperature` | Direct | 0-1 for Claude |
|
|
217
|
+
| `top_p` | `top_p` | Direct | Optional |
|
|
218
|
+
| `top_k` | `top_k` | Direct | Optional |
|
|
219
|
+
| `stream` | `stream` | Direct | Optional |
|
|
220
|
+
| `max_tokens` | `max_tokens` | Direct | Required by Claude |
|
|
221
|
+
| `stop_sequences` | `stop_sequences` | Direct | Array format |
|
|
222
|
+
| **Structure Transforms** | | | |
|
|
223
|
+
| `system` (string) | `system` | Direct | Top-level |
|
|
224
|
+
| `system` (string[]) | `system` | Join with `\n\n` + drop metadata | Lossy if structured |
|
|
225
|
+
| `metadata.user_id` | `metadata.user_id` | Direct | Optional |
|
|
226
|
+
| `tools[].parameters` | `tools[].input_schema` | Rename field | JSON Schema |
|
|
227
|
+
| `tool_choice.type: 'specific'` | `tool_choice.type: 'tool'` | Map type + name | Specific tool |
|
|
228
|
+
| `tool_choice.type: 'required'` | `tool_choice.type: 'any'` | Map type | Any tool |
|
|
229
|
+
| `messages[]` | `messages[]` | Transform content | See Content Mapping |
|
|
223
230
|
|
|
224
231
|
**Dropped Fields** (Holo → Claude):
|
|
232
|
+
|
|
225
233
|
- `response_format` - Claude doesn't support structured output modes
|
|
226
234
|
- `frequency_penalty` - Not supported
|
|
227
235
|
- `presence_penalty` - Not supported
|
|
@@ -231,31 +239,31 @@ See [SDK Provider Mappings](../../packages/sdk/docs/PROVIDER_MAPPINGS.md#claude-
|
|
|
231
239
|
|
|
232
240
|
### Response Mapping: Claude → Holo
|
|
233
241
|
|
|
234
|
-
| Claude Field
|
|
235
|
-
|
|
236
|
-
| **Direct 1:1**
|
|
237
|
-
| `id`
|
|
238
|
-
| `model`
|
|
239
|
-
| `role: 'assistant'`
|
|
240
|
-
| **Structure Transforms**
|
|
241
|
-
| `content[]` blocks
|
|
242
|
-
| `stop_reason`
|
|
243
|
-
| `usage.input_tokens`
|
|
244
|
-
| `usage.output_tokens`
|
|
245
|
-
| `usage.cache_read_input_tokens`
|
|
246
|
-
| `usage.cache_creation_input_tokens` | `usage.cache_write_tokens` | Direct
|
|
247
|
-
| `usage.service_tier`
|
|
248
|
-
| N/A
|
|
242
|
+
| Claude Field | Holo Field | Transformation | Notes |
|
|
243
|
+
|-------------------------------------|----------------------------|------------------------------|------------------------|
|
|
244
|
+
| **Direct 1:1** | | | |
|
|
245
|
+
| `id` | `id` | Direct | Always present |
|
|
246
|
+
| `model` | `model` | Direct | Always present |
|
|
247
|
+
| `role: 'assistant'` | `messages[0].role` | Wrap in array | Always assistant |
|
|
248
|
+
| **Structure Transforms** | | | |
|
|
249
|
+
| `content[]` blocks | `messages[0].content` | Extract text + tools | Multi-part |
|
|
250
|
+
| `stop_reason` | `finish_reason` | Map codes | See table below |
|
|
251
|
+
| `usage.input_tokens` | `usage.input_tokens` | Direct | Optional |
|
|
252
|
+
| `usage.output_tokens` | `usage.output_tokens` | Direct | Optional |
|
|
253
|
+
| `usage.cache_read_input_tokens` | `usage.cache_read_tokens` | Direct | Optional |
|
|
254
|
+
| `usage.cache_creation_input_tokens` | `usage.cache_write_tokens` | Direct | Optional |
|
|
255
|
+
| `usage.service_tier` | `service_tier` | Promote to top-level | Optional |
|
|
256
|
+
| N/A | `created` | Synthesize with `Date.now()` | Claude lacks timestamp |
|
|
249
257
|
|
|
250
258
|
**Finish Reason Mapping**:
|
|
251
259
|
|
|
252
|
-
| Claude `stop_reason` | Holo `finish_reason`
|
|
253
|
-
|
|
254
|
-
| `end_turn`
|
|
255
|
-
| `max_tokens`
|
|
256
|
-
| `tool_use`
|
|
257
|
-
| `refusal`
|
|
258
|
-
| `pause_turn`
|
|
260
|
+
| Claude `stop_reason` | Holo `finish_reason` |
|
|
261
|
+
|----------------------|-------------------------------|
|
|
262
|
+
| `end_turn` | `stop` |
|
|
263
|
+
| `max_tokens` | `length` |
|
|
264
|
+
| `tool_use` | `tool_calls` |
|
|
265
|
+
| `refusal` | `content_filter` |
|
|
266
|
+
| `pause_turn` | `stop` (preserve in metadata) |
|
|
259
267
|
|
|
260
268
|
### Content Mapping
|
|
261
269
|
|
|
@@ -290,23 +298,23 @@ See [SDK Provider Mappings](../../packages/sdk/docs/PROVIDER_MAPPINGS.md#claude-
|
|
|
290
298
|
```typescript
|
|
291
299
|
// Claude Response (embedded in content)
|
|
292
300
|
{
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
301
|
+
content: [
|
|
302
|
+
{type: 'text', text: 'Let me check that for you.'},
|
|
303
|
+
{type: 'tool_use', id: 'toolu_123', name: 'get_weather', input: {location: 'SF'}}
|
|
304
|
+
]
|
|
297
305
|
}
|
|
298
306
|
|
|
299
307
|
// Holo Response (extracted)
|
|
300
308
|
{
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
309
|
+
messages: [{
|
|
310
|
+
role: 'assistant',
|
|
311
|
+
content: 'Let me check that for you.',
|
|
312
|
+
tool_calls: [{
|
|
313
|
+
id: 'toolu_123',
|
|
314
|
+
type: 'function',
|
|
315
|
+
function: {name: 'get_weather', arguments: {location: 'SF'}}
|
|
316
|
+
}]
|
|
308
317
|
}]
|
|
309
|
-
}]
|
|
310
318
|
}
|
|
311
319
|
```
|
|
312
320
|
|
|
@@ -318,18 +326,19 @@ See [SDK Provider Mappings](../../packages/sdk/docs/PROVIDER_MAPPINGS.md#claude-
|
|
|
318
326
|
|
|
319
327
|
Claude provides the most granular streaming events (6 types):
|
|
320
328
|
|
|
321
|
-
| Event Type
|
|
322
|
-
|
|
323
|
-
| `message_start`
|
|
324
|
-
| `content_block_start` | Begin content block (text/tool) | Used internally
|
|
325
|
-
| `content_block_delta` | Incremental content
|
|
326
|
-
| `content_block_stop`
|
|
327
|
-
| `message_delta`
|
|
328
|
-
| `message_stop`
|
|
329
|
+
| Event Type | Purpose | Holo Mapping |
|
|
330
|
+
|-----------------------|---------------------------------|-------------------------|
|
|
331
|
+
| `message_start` | Initialize message | `type: 'message_start'` |
|
|
332
|
+
| `content_block_start` | Begin content block (text/tool) | Used internally |
|
|
333
|
+
| `content_block_delta` | Incremental content | `type: 'content_delta'` |
|
|
334
|
+
| `content_block_stop` | End content block | Used internally |
|
|
335
|
+
| `message_delta` | Usage/finish updates | `type: 'message_delta'` |
|
|
336
|
+
| `message_stop` | Completion marker | `type: 'message_stop'` |
|
|
329
337
|
|
|
330
338
|
### Orchestration
|
|
331
339
|
|
|
332
340
|
The `ClaudeStreamTranslator` maintains state to:
|
|
341
|
+
|
|
333
342
|
1. Track content blocks by index
|
|
334
343
|
2. Accumulate text and tool input deltas
|
|
335
344
|
3. Extract complete tool calls on block completion
|
|
@@ -382,7 +391,8 @@ const request: HoloRequest = {
|
|
|
382
391
|
};
|
|
383
392
|
```
|
|
384
393
|
|
|
385
|
-
**Note**: Thinking blocks (`content[].type = 'thinking'`) are Claude-specific and not part of the portable Holo format.
|
|
394
|
+
**Note**: Thinking blocks (`content[].type = 'thinking'`) are Claude-specific and not part of the portable Holo format.
|
|
395
|
+
They're preserved in `provider_delta` for debugging.
|
|
386
396
|
|
|
387
397
|
### Prompt Caching
|
|
388
398
|
|
|
@@ -437,6 +447,7 @@ import type {
|
|
|
437
447
|
### Migration from Legacy Types
|
|
438
448
|
|
|
439
449
|
**Before** (Legacy provider):
|
|
450
|
+
|
|
440
451
|
```typescript
|
|
441
452
|
import { HoloTool } from '../../types/holo/requests';
|
|
442
453
|
|
|
@@ -446,6 +457,7 @@ interface HoloTool {
|
|
|
446
457
|
```
|
|
447
458
|
|
|
448
459
|
**After** (Plugin SDK):
|
|
460
|
+
|
|
449
461
|
```typescript
|
|
450
462
|
import type { HoloTool, HoloJsonSchema } from '@holokai/sdk';
|
|
451
463
|
|
|
@@ -531,9 +543,11 @@ npm run clean
|
|
|
531
543
|
## Related Documentation
|
|
532
544
|
|
|
533
545
|
### SDK Documentation
|
|
546
|
+
|
|
534
547
|
- [SDK README](../sdk/README.md) - Plugin development guide and templates
|
|
535
548
|
|
|
536
549
|
### Claude API Documentation
|
|
550
|
+
|
|
537
551
|
- [Official API Reference](https://docs.anthropic.com/claude/reference)
|
|
538
552
|
- [Streaming Guide](https://docs.anthropic.com/claude/reference/streaming)
|
|
539
553
|
- [Tool Use](https://docs.anthropic.com/claude/docs/tool-use)
|
|
@@ -541,6 +555,7 @@ npm run clean
|
|
|
541
555
|
- [Prompt Caching](https://docs.anthropic.com/claude/docs/prompt-caching)
|
|
542
556
|
|
|
543
557
|
### Migration Notes
|
|
558
|
+
|
|
544
559
|
- This plugin was extracted from the monolithic `src/providers/claude/` codebase
|
|
545
560
|
- Migration to plugin architecture is complete
|
|
546
561
|
|
|
@@ -558,6 +573,7 @@ npm run clean
|
|
|
558
573
|
### Reporting Issues
|
|
559
574
|
|
|
560
575
|
Found a bug or have a feature request?
|
|
576
|
+
|
|
561
577
|
- GitHub Issues: https://github.com/holokai/holo-provider-claude/issues
|
|
562
578
|
- Include: Holo version, Claude model, request/response samples
|
|
563
579
|
|
|
@@ -572,6 +588,7 @@ MIT © Holokai
|
|
|
572
588
|
## Changelog
|
|
573
589
|
|
|
574
590
|
### v0.1.0 (Current)
|
|
591
|
+
|
|
575
592
|
- ✅ Initial plugin release
|
|
576
593
|
- ✅ Extracted from monolithic architecture
|
|
577
594
|
- ✅ Migrated to SDK types
|
package/dist/claude.auditor.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { BaseAuditor
|
|
1
|
+
import { BaseAuditor } from "@holokai/sdk/provider";
|
|
2
|
+
import type { ProviderEnvelope, ProviderEvent } from "@holokai/types/provider";
|
|
3
|
+
import type { HoloWorkerRequest } from "@holokai/types/worker";
|
|
4
|
+
import type { LlmRequest } from "@holokai/types/entities";
|
|
5
|
+
import { LlmStatus } from "@holokai/types/entities";
|
|
2
6
|
import { MessageCreateParamsBase } from "@anthropic-ai/sdk/resources/messages";
|
|
3
|
-
import { LlmRequest, LlmStatus } from "@holokai/sdk/core/entities";
|
|
4
7
|
export declare class ClaudeAuditor extends BaseAuditor {
|
|
5
8
|
readonly provider = "claude";
|
|
6
9
|
protected toHoloRequest(workerRequest: HoloWorkerRequest, llmRequest: Omit<LlmRequest, 'id'>): void;
|
|
@@ -15,7 +18,7 @@ export declare class ClaudeAuditor extends BaseAuditor {
|
|
|
15
18
|
total_processing_time: any;
|
|
16
19
|
}>>;
|
|
17
20
|
protected mapResponseStatus(providerEvent: ProviderEvent): Promise<LlmStatus>;
|
|
18
|
-
private extractUserPromptFromMessages;
|
|
19
21
|
protected createProviderEnvelope(payload: MessageCreateParamsBase): Promise<ProviderEnvelope>;
|
|
22
|
+
private extractUserPromptFromMessages;
|
|
20
23
|
}
|
|
21
24
|
//# sourceMappingURL=claude.auditor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.auditor.d.ts","sourceRoot":"","sources":["../src/claude.auditor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude.auditor.d.ts","sourceRoot":"","sources":["../src/claude.auditor.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAElD,OAAO,KAAK,EAAC,gBAAgB,EAAE,aAAa,EAAC,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAC,uBAAuB,EAAC,MAAM,sCAAsC,CAAC;AAI7E,qBACa,aAAc,SAAQ,WAAW;IAC1C,QAAQ,CAAC,QAAQ,YAAY;IAE7B,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,IAAI;IAiBnG,SAAS,CAAC,kBAAkB,CAAC,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,IAAI;cAiBxF,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;;;;;;;cAgBpF,iBAAiB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;cAQnE,sBAAsB,CAClC,OAAO,EAAE,uBAAuB,GACjC,OAAO,CAAC,gBAAgB,CAAC;IAa5B,OAAO,CAAC,6BAA6B;CAoBxC"}
|
package/dist/claude.auditor.js
CHANGED
|
@@ -5,8 +5,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { injectable } from 'tsyringe';
|
|
8
|
-
import { BaseAuditor
|
|
9
|
-
import {
|
|
8
|
+
import { BaseAuditor } from "@holokai/sdk/provider";
|
|
9
|
+
import { pickDefined } from "@holokai/sdk";
|
|
10
|
+
import { LlmStatus } from "@holokai/types/entities";
|
|
10
11
|
let ClaudeAuditor = class ClaudeAuditor extends BaseAuditor {
|
|
11
12
|
provider = 'claude';
|
|
12
13
|
toHoloRequest(workerRequest, llmRequest) {
|
|
@@ -64,6 +65,17 @@ let ClaudeAuditor = class ClaudeAuditor extends BaseAuditor {
|
|
|
64
65
|
}
|
|
65
66
|
return super.mapResponseStatus(providerEvent);
|
|
66
67
|
}
|
|
68
|
+
async createProviderEnvelope(payload) {
|
|
69
|
+
const logger = this.mlog(this.createProviderEnvelope);
|
|
70
|
+
if (!payload.model) {
|
|
71
|
+
logger.error(`Missing model: ${JSON.stringify(payload)}`);
|
|
72
|
+
}
|
|
73
|
+
return pickDefined({
|
|
74
|
+
model_slug: payload.model,
|
|
75
|
+
system_prompt: payload.system ?
|
|
76
|
+
(Array.isArray(payload.system) ? JSON.stringify(payload.system) : payload.system) : undefined
|
|
77
|
+
});
|
|
78
|
+
}
|
|
67
79
|
extractUserPromptFromMessages(messages) {
|
|
68
80
|
if (!messages || !Array.isArray(messages))
|
|
69
81
|
return undefined;
|
|
@@ -82,17 +94,6 @@ let ClaudeAuditor = class ClaudeAuditor extends BaseAuditor {
|
|
|
82
94
|
}
|
|
83
95
|
return undefined;
|
|
84
96
|
}
|
|
85
|
-
async createProviderEnvelope(payload) {
|
|
86
|
-
const logger = this.mlog(this.createProviderEnvelope);
|
|
87
|
-
if (!payload.model) {
|
|
88
|
-
logger.error(`Missing model: ${JSON.stringify(payload)}`);
|
|
89
|
-
}
|
|
90
|
-
return pickDefined({
|
|
91
|
-
model_slug: payload.model,
|
|
92
|
-
system_prompt: payload.system ?
|
|
93
|
-
(Array.isArray(payload.system) ? JSON.stringify(payload.system) : payload.system) : undefined
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
97
|
};
|
|
97
98
|
ClaudeAuditor = __decorate([
|
|
98
99
|
injectable()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.auditor.js","sourceRoot":"","sources":["../src/claude.auditor.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.auditor.js","sourceRoot":"","sources":["../src/claude.auditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { BaseProvider
|
|
1
|
+
import { BaseProvider } from '@holokai/sdk/provider';
|
|
2
|
+
import type { IAuditor, IProviderTranslator, IResponseFactory, ProviderContext } from '@holokai/types/provider';
|
|
2
3
|
import { Anthropic } from '@anthropic-ai/sdk/client';
|
|
3
4
|
import { MessageCreateParamsBase } from '@anthropic-ai/sdk/resources/messages';
|
|
4
5
|
import { ModelInfosPage } from '@anthropic-ai/sdk/resources/models';
|
|
@@ -6,11 +7,12 @@ import { Message } from '@anthropic-ai/sdk/resources/messages/messages';
|
|
|
6
7
|
import { APIError } from "@anthropic-ai/sdk";
|
|
7
8
|
import { ErrorResponse } from "@anthropic-ai/sdk/resources/shared";
|
|
8
9
|
export declare class ClaudeProvider extends BaseProvider<Anthropic, MessageCreateParamsBase> {
|
|
10
|
+
getModels(allowedModels: string[] | true): Promise<ModelInfosPage>;
|
|
11
|
+
getModelNameFromRequest(payload: MessageCreateParamsBase): Promise<string>;
|
|
9
12
|
protected createAuditor(): IAuditor;
|
|
10
13
|
protected createClient(): Anthropic;
|
|
11
14
|
protected createTranslator(): IProviderTranslator;
|
|
12
15
|
protected createResponseFactory(): IResponseFactory;
|
|
13
|
-
getModels(allowedModels: string[] | true): Promise<ModelInfosPage>;
|
|
14
16
|
protected handleRequest(payload: MessageCreateParamsBase, ctx: ProviderContext): Promise<{
|
|
15
17
|
final: () => Promise<Message>;
|
|
16
18
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.provider.d.ts","sourceRoot":"","sources":["../src/claude.provider.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"claude.provider.d.ts","sourceRoot":"","sources":["../src/claude.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAC,QAAQ,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAE9G,OAAO,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAC,uBAAuB,EAAC,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAC,cAAc,EAAC,MAAM,oCAAoC,CAAC;AAElE,OAAO,EAAC,OAAO,EAAC,MAAM,+CAA+C,CAAC;AAGtE,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAc,aAAa,EAAC,MAAM,oCAAoC,CAAC;AAE9E,qBAAa,cAAe,SAAQ,YAAY,CAAC,SAAS,EAAE,uBAAuB,CAAC;IAE1E,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC;IAUlE,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhF,SAAS,CAAC,aAAa,IAAI,QAAQ;IAInC,SAAS,CAAC,YAAY,IAAI,SAAS;IAInC,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IAIjD,SAAS,CAAC,qBAAqB,IAAI,gBAAgB;cAInC,aAAa,CAAC,OAAO,EAAE,uBAAuB,EAAE,GAAG,EAAE,eAAe;qBAcd,OAAO,CAAC,OAAO,CAAC;;cAGtE,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;CAUvE"}
|
package/dist/claude.provider.js
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
import { BaseProvider
|
|
1
|
+
import { BaseProvider } from '@holokai/sdk/provider';
|
|
2
|
+
import { pickHeadersByPrefix } from '@holokai/sdk';
|
|
2
3
|
import { Anthropic } from '@anthropic-ai/sdk/client';
|
|
3
4
|
import { ClaudeAuditor } from './claude.auditor';
|
|
4
5
|
import { ClaudeTranslator } from './claude.translator';
|
|
5
6
|
import { ClaudeResponseFactory } from './claude.response.factory';
|
|
6
7
|
export class ClaudeProvider extends BaseProvider {
|
|
8
|
+
async getModels(allowedModels) {
|
|
9
|
+
const response = await this.client.models.list({ limit: 100 });
|
|
10
|
+
if (allowedModels === true) {
|
|
11
|
+
return response;
|
|
12
|
+
}
|
|
13
|
+
response.data = response.data.filter(model => allowedModels.includes(model.id));
|
|
14
|
+
return response;
|
|
15
|
+
}
|
|
16
|
+
async getModelNameFromRequest(payload) {
|
|
17
|
+
return payload.model;
|
|
18
|
+
}
|
|
7
19
|
createAuditor() {
|
|
8
20
|
return new ClaudeAuditor();
|
|
9
21
|
}
|
|
@@ -16,14 +28,6 @@ export class ClaudeProvider extends BaseProvider {
|
|
|
16
28
|
createResponseFactory() {
|
|
17
29
|
return ClaudeResponseFactory.instance();
|
|
18
30
|
}
|
|
19
|
-
async getModels(allowedModels) {
|
|
20
|
-
const response = await this.client.models.list({ limit: 100 });
|
|
21
|
-
if (allowedModels === true) {
|
|
22
|
-
return response;
|
|
23
|
-
}
|
|
24
|
-
response.data = response.data.filter(model => allowedModels.includes(model.id));
|
|
25
|
-
return response;
|
|
26
|
-
}
|
|
27
31
|
async handleRequest(payload, ctx) {
|
|
28
32
|
const headers = ctx.headers ? pickHeadersByPrefix(ctx.headers, ['anthropic-']) : [];
|
|
29
33
|
const options = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.provider.js","sourceRoot":"","sources":["../src/claude.provider.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"claude.provider.js","sourceRoot":"","sources":["../src/claude.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { HoloErrorCode
|
|
1
|
+
import type { IResponseFactory } from '@holokai/types/provider';
|
|
2
|
+
import type { HoloErrorCode } from '@holokai/types/holo';
|
|
3
3
|
import { ErrorResponse } from '@anthropic-ai/sdk/resources/shared';
|
|
4
|
+
import { Message, RawContentBlockDeltaEvent, RawContentBlockStartEvent, RawContentBlockStopEvent, RawMessageDeltaEvent, RawMessageStartEvent, RawMessageStopEvent, TextBlock, TextDelta, Usage } from "@anthropic-ai/sdk/resources/messages/messages";
|
|
4
5
|
export type ClaudeResponseTypes = 'timeout_error' | 'invalid_request_error' | 'not_found_error' | 'overloaded_error' | 'permission_error' | 'rate_limit_error' | 'authentication_error' | 'billing_error' | 'api_error';
|
|
5
6
|
export declare class ClaudeResponseFactory implements IResponseFactory {
|
|
7
|
+
static streamResponseMessage(text?: string | string[]): (Partial<RawMessageStartEvent> | Partial<RawMessageDeltaEvent> | Partial<RawMessageStopEvent> | Partial<RawContentBlockStartEvent> | Partial<RawContentBlockDeltaEvent> | Partial<RawContentBlockStopEvent>)[];
|
|
8
|
+
static createResponseMessage(text?: string | string[]): Partial<Message>;
|
|
9
|
+
static createTextMessages(text: string | string[]): Partial<TextBlock>[];
|
|
10
|
+
static createTextMessage(text: string): Partial<TextBlock>;
|
|
11
|
+
static createUsage(): Partial<Usage>;
|
|
12
|
+
static createRawContentBlockStartEvent(text?: string, index?: number): Partial<RawContentBlockStartEvent>;
|
|
13
|
+
static createRawContentBlockDeltaEvent(text?: string, index?: number): Partial<RawContentBlockDeltaEvent>;
|
|
14
|
+
static createRawContentBlockStopEvent(index?: number): Partial<RawContentBlockStopEvent>;
|
|
15
|
+
static createTextDelta(text: string): Partial<TextDelta>;
|
|
16
|
+
static createRawMessageStartEvent(message: Message): Partial<RawMessageStartEvent>;
|
|
17
|
+
static createRawMessageDeltaEvent(): Partial<RawMessageDeltaEvent>;
|
|
18
|
+
static createRawMessageStopEvent(): Partial<RawMessageStopEvent>;
|
|
19
|
+
static instance(): ClaudeResponseFactory;
|
|
6
20
|
mapHoloCode(code: HoloErrorCode): ClaudeResponseTypes;
|
|
7
21
|
createError(message: string, code: HoloErrorCode): ErrorResponse;
|
|
8
|
-
static streamResponseMessage(text?: string | string[]): (Partial<import("@anthropic-ai/sdk/resources/beta").BetaRawMessageStartEvent> | Partial<import("@anthropic-ai/sdk/resources/beta").BetaRawMessageDeltaEvent> | Partial<import("@anthropic-ai/sdk/resources/beta").BetaRawMessageStopEvent> | Partial<import("@anthropic-ai/sdk/resources/beta").BetaRawContentBlockStartEvent> | Partial<import("@anthropic-ai/sdk/resources/beta").BetaRawContentBlockDeltaEvent> | Partial<import("@anthropic-ai/sdk/resources/beta").BetaRawContentBlockStopEvent>)[];
|
|
9
|
-
static createResponseMessage(text?: string | string[]): Partial<ClaudeResponseMessage>;
|
|
10
|
-
static createTextMessages(text: string | string[]): Partial<ClaudeTextBlock>[];
|
|
11
|
-
static createTextMessage(text: string): Partial<ClaudeTextBlock>;
|
|
12
|
-
static createUsage(): Partial<ClaudeUsage>;
|
|
13
|
-
static createRawContentBlockStartEvent(text?: string, index?: number): Partial<ClaudeRawContentBlockStartEvent>;
|
|
14
|
-
static createRawContentBlockDeltaEvent(text?: string, index?: number): Partial<ClaudeRawContentBlockDeltaEvent>;
|
|
15
|
-
static createRawContentBlockStopEvent(index?: number): Partial<ClaudeRawContentBlockStopEvent>;
|
|
16
|
-
static createTextDelta(text: string): Partial<ClaudeTextDelta>;
|
|
17
|
-
static createRawMessageStartEvent(message: ClaudeResponseMessage): Partial<ClaudeRawMessageStartEvent>;
|
|
18
|
-
static createRawMessageDeltaEvent(): Partial<ClaudeRawMessageDeltaEvent>;
|
|
19
|
-
static createRawMessageStopEvent(): Partial<ClaudeRawMessageStopEvent>;
|
|
20
|
-
static instance(): ClaudeResponseFactory;
|
|
21
22
|
}
|
|
22
23
|
//# sourceMappingURL=claude.response.factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.response.factory.d.ts","sourceRoot":"","sources":["../src/claude.response.factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude.response.factory.d.ts","sourceRoot":"","sources":["../src/claude.response.factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAC,aAAa,EAAC,MAAM,oCAAoC,CAAC;AACjE,OAAO,EACH,OAAO,EACP,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,KAAK,EACR,MAAM,+CAA+C,CAAC;AAEvD,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACb,uBAAuB,GACvB,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,GAClB,sBAAsB,GACtB,eAAe,GACf,WAAW,CAAC;AAElB,qBAAa,qBAAsB,YAAW,gBAAgB;IAE1D,MAAM,CAAC,qBAAqB,CAAC,IAAI,GAAE,MAAM,GAAG,MAAM,EAAO;IA6BzD,MAAM,CAAC,qBAAqB,CAAC,IAAI,GAAE,MAAM,GAAG,MAAM,EAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAe5E,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE;IAOxE,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAQ1D,MAAM,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;IAYpC,MAAM,CAAC,+BAA+B,CAAC,IAAI,GAAE,MAAW,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAQhH,MAAM,CAAC,+BAA+B,CAAC,IAAI,GAAE,MAAW,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAQhH,MAAM,CAAC,8BAA8B,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAO3F,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAOxD,MAAM,CAAC,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAOlF,MAAM,CAAC,0BAA0B,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAkBlE,MAAM,CAAC,yBAAyB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAMhE,MAAM,CAAC,QAAQ,IAAI,qBAAqB;IAIxC,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,mBAAmB;IAOrD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,aAAa;CAUnE"}
|
|
@@ -1,21 +1,5 @@
|
|
|
1
1
|
import { pickDefined } from '@holokai/sdk';
|
|
2
2
|
export class ClaudeResponseFactory {
|
|
3
|
-
mapHoloCode(code) {
|
|
4
|
-
switch (code) {
|
|
5
|
-
case 'guard_failure':
|
|
6
|
-
return 'invalid_request_error';
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
createError(message, code) {
|
|
10
|
-
return {
|
|
11
|
-
request_id: null,
|
|
12
|
-
type: 'error',
|
|
13
|
-
error: {
|
|
14
|
-
type: this.mapHoloCode(code),
|
|
15
|
-
message
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
3
|
static streamResponseMessage(text = '') {
|
|
20
4
|
const messages = [];
|
|
21
5
|
const responseMessage = this.createResponseMessage(text);
|
|
@@ -134,5 +118,21 @@ export class ClaudeResponseFactory {
|
|
|
134
118
|
static instance() {
|
|
135
119
|
return new ClaudeResponseFactory();
|
|
136
120
|
}
|
|
121
|
+
mapHoloCode(code) {
|
|
122
|
+
switch (code) {
|
|
123
|
+
case 'guard_failure':
|
|
124
|
+
return 'invalid_request_error';
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
createError(message, code) {
|
|
128
|
+
return {
|
|
129
|
+
request_id: null,
|
|
130
|
+
type: 'error',
|
|
131
|
+
error: {
|
|
132
|
+
type: this.mapHoloCode(code),
|
|
133
|
+
message
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
137
|
}
|
|
138
138
|
//# sourceMappingURL=claude.response.factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.response.factory.js","sourceRoot":"","sources":["../src/claude.response.factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude.response.factory.js","sourceRoot":"","sources":["../src/claude.response.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AA4BzC,MAAM,OAAO,qBAAqB;IAE9B,MAAM,CAAC,qBAAqB,CAAC,OAA0B,EAAE;QACrD,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAY,CAAC;QAEpE,iCAAiC;QACjC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,CAAC,CAAC;QAEhE,gCAAgC;QAChC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,EAAE,CAAC,CAAC,CAAC;QAExD,yCAAyC;QACzC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACb,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,8BAA8B;QAC9B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC;QAErD,qCAAqC;QACrC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;QACjD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;QAEhD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,qBAAqB,CAAC,OAA0B,EAAE;QACrD,OAAO,WAAW,CAAC;YACf,EAAE,EAAE,oBAAoB;YACxB,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAgB;YACrD,kBAAkB,EAAE,IAAI;YACxB,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,IAAI;YACjB,aAAa,EAAE,IAAI;YACnB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,IAAI,CAAC,WAAW,EAAW;SACrC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,IAAuB;QAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,IAAY;QACjC,OAAO,WAAW,CAAC;YACf,SAAS,EAAE,EAAE;YACb,IAAI,EAAE,MAAM;YACZ,IAAI;SACP,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,WAAW;QACd,OAAO,WAAW,CAAC;YACf,cAAc,EAAE,IAAI;YACpB,2BAA2B,EAAE,IAAI;YACjC,uBAAuB,EAAE,IAAI;YAC7B,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,CAAC;YAChB,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,IAAI;SACrB,CAAC,CAAA;IACN,CAAC;IAED,MAAM,CAAC,+BAA+B,CAAC,OAAe,EAAE,EAAE,QAAgB,CAAC;QACvE,OAAO,WAAW,CAAC;YACf,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAc;YACxD,KAAK;YACL,IAAI,EAAE,qBAAqB;SAC9B,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,+BAA+B,CAAC,OAAe,EAAE,EAAE,QAAgB,CAAC;QACvE,OAAO,WAAW,CAAC;YACf,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAc;YAC9C,KAAK;YACL,IAAI,EAAE,qBAAqB;SAC9B,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,8BAA8B,CAAC,QAAgB,CAAC;QACnD,OAAO,WAAW,CAAC;YACf,KAAK;YACL,IAAI,EAAE,oBAAoB;SAC7B,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,IAAY;QAC/B,OAAO,WAAW,CAAC;YACf,IAAI;YACJ,IAAI,EAAE,YAAY;SACrB,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,0BAA0B,CAAC,OAAgB;QAC9C,OAAO,WAAW,CAAC;YACf,OAAO;YACP,IAAI,EAAE,eAAe;SACxB,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,0BAA0B;QAC7B,OAAO,WAAW,CAAC;YACf,KAAK,EAAE;gBACH,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,UAAU;gBACvB,aAAa,EAAE,IAAI;aACtB;YACD,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE;gBACH,2BAA2B,EAAE,IAAI;gBACjC,uBAAuB,EAAE,IAAI;gBAC7B,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,CAAC;gBAChB,eAAe,EAAE,IAAI;aACxB;SACJ,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,yBAAyB;QAC5B,OAAO,WAAW,CAAC;YACf,IAAI,EAAE,cAAc;SACvB,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,QAAQ;QACX,OAAO,IAAI,qBAAqB,EAAE,CAAC;IACvC,CAAC;IAED,WAAW,CAAC,IAAmB;QAC3B,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,eAAe;gBAChB,OAAO,uBAAuB,CAAC;QACvC,CAAC;IACL,CAAC;IAED,WAAW,CAAC,OAAe,EAAE,IAAmB;QAC5C,OAAO;YACH,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACH,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBAC5B,OAAO;aACV;SACJ,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
2
|
import { ClaudeMessageTranslator, ClaudeRequestTranslator, ClaudeResponseTranslator, ClaudeStreamTranslator } from "./translators";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import type { IProviderTranslator } from "@holokai/types/provider";
|
|
4
|
+
import { ClassLogger } from "@holokai/sdk";
|
|
5
|
+
import type { HoloMessage, HoloRequest, HoloResponse, HoloStreamChunk } from "@holokai/types/holo";
|
|
6
|
+
import { Message, MessageParam, MessageStreamParams, RawMessageStreamEvent } from "@anthropic-ai/sdk/resources/messages/messages";
|
|
6
7
|
export declare class ClaudeTranslator extends ClassLogger implements IProviderTranslator {
|
|
7
8
|
private readonly requestTranslator;
|
|
8
9
|
private readonly messageTranslator;
|
|
@@ -10,12 +11,12 @@ export declare class ClaudeTranslator extends ClassLogger implements IProviderTr
|
|
|
10
11
|
private readonly streamTranslator;
|
|
11
12
|
constructor(requestTranslator: ClaudeRequestTranslator, messageTranslator: ClaudeMessageTranslator, responseTranslator: ClaudeResponseTranslator, streamTranslator: ClaudeStreamTranslator);
|
|
12
13
|
static instance(): IProviderTranslator;
|
|
13
|
-
fromHoloRequest(request: HoloRequest): Promise<Partial<
|
|
14
|
-
toHoloRequest(request:
|
|
15
|
-
fromHoloMessages(messages: HoloMessage[]): Promise<Partial<
|
|
16
|
-
toHoloMessages(messages:
|
|
17
|
-
fromHoloResponse(message: HoloResponse): Promise<Partial<
|
|
18
|
-
toHoloResponse(message:
|
|
14
|
+
fromHoloRequest(request: HoloRequest): Promise<Partial<MessageStreamParams>>;
|
|
15
|
+
toHoloRequest(request: MessageStreamParams): Promise<Partial<HoloRequest>>;
|
|
16
|
+
fromHoloMessages(messages: HoloMessage[]): Promise<Partial<MessageParam>[]>;
|
|
17
|
+
toHoloMessages(messages: MessageParam[]): Promise<Partial<HoloMessage>[]>;
|
|
18
|
+
fromHoloResponse(message: HoloResponse): Promise<Partial<RawMessageStreamEvent | Message>>;
|
|
19
|
+
toHoloResponse(message: RawMessageStreamEvent | Message): Promise<Partial<HoloResponse>>;
|
|
19
20
|
fromHoloStreamChunks(chunks: HoloStreamChunk[]): Promise<unknown>;
|
|
20
21
|
}
|
|
21
22
|
//# sourceMappingURL=claude.translator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.translator.d.ts","sourceRoot":"","sources":["../src/claude.translator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAQH,uBAAuB,EACvB,uBAAuB,EAGvB,wBAAwB,EACxB,sBAAsB,EAIzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"claude.translator.d.ts","sourceRoot":"","sources":["../src/claude.translator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAQH,uBAAuB,EACvB,uBAAuB,EAGvB,wBAAwB,EACxB,sBAAsB,EAIzB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAC,MAAM,qBAAqB,CAAC;AACjG,OAAO,EACH,OAAO,EACP,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACxB,MAAM,+CAA+C,CAAC;AAGvD,qBACa,gBAAiB,SAAQ,WAAY,YAAW,mBAAmB;IAExE,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAHhB,iBAAiB,EAAE,uBAAuB,EAC1C,iBAAiB,EAAE,uBAAuB,EAC1C,kBAAkB,EAAE,wBAAwB,EAC5C,gBAAgB,EAAE,sBAAsB;IAK7D,MAAM,CAAC,QAAQ,IAAI,mBAAmB;IAoChC,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAI5E,aAAa,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAI1E,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;IAI3E,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;IAIzE,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,GAAG,OAAO,CAAC,CAAC;IAI1F,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAIxF,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAG1E"}
|