@effect/ai 0.1.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/AiChat/package.json +6 -0
- package/AiError/package.json +6 -0
- package/AiInput/package.json +6 -0
- package/AiResponse/package.json +6 -0
- package/AiRole/package.json +6 -0
- package/AiToolkit/package.json +6 -0
- package/Completions/package.json +6 -0
- package/LICENSE +21 -0
- package/README.md +1 -0
- package/Tokenizer/package.json +6 -0
- package/dist/cjs/AiChat.js +151 -0
- package/dist/cjs/AiChat.js.map +1 -0
- package/dist/cjs/AiError.js +41 -0
- package/dist/cjs/AiError.js.map +1 -0
- package/dist/cjs/AiInput.js +349 -0
- package/dist/cjs/AiInput.js.map +1 -0
- package/dist/cjs/AiResponse.js +295 -0
- package/dist/cjs/AiResponse.js.map +1 -0
- package/dist/cjs/AiRole.js +106 -0
- package/dist/cjs/AiRole.js.map +1 -0
- package/dist/cjs/AiToolkit.js +132 -0
- package/dist/cjs/AiToolkit.js.map +1 -0
- package/dist/cjs/Completions.js +217 -0
- package/dist/cjs/Completions.js.map +1 -0
- package/dist/cjs/Tokenizer.js +59 -0
- package/dist/cjs/Tokenizer.js.map +1 -0
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/dts/AiChat.d.ts +73 -0
- package/dist/dts/AiChat.d.ts.map +1 -0
- package/dist/dts/AiError.d.ts +38 -0
- package/dist/dts/AiError.d.ts.map +1 -0
- package/dist/dts/AiInput.d.ts +283 -0
- package/dist/dts/AiInput.d.ts.map +1 -0
- package/dist/dts/AiResponse.d.ts +235 -0
- package/dist/dts/AiResponse.d.ts.map +1 -0
- package/dist/dts/AiRole.d.ts +111 -0
- package/dist/dts/AiRole.d.ts.map +1 -0
- package/dist/dts/AiToolkit.d.ts +158 -0
- package/dist/dts/AiToolkit.d.ts.map +1 -0
- package/dist/dts/Completions.d.ts +104 -0
- package/dist/dts/Completions.d.ts.map +1 -0
- package/dist/dts/Tokenizer.d.ts +34 -0
- package/dist/dts/Tokenizer.d.ts.map +1 -0
- package/dist/dts/index.d.ts +33 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/esm/AiChat.js +139 -0
- package/dist/esm/AiChat.js.map +1 -0
- package/dist/esm/AiError.js +31 -0
- package/dist/esm/AiError.js.map +1 -0
- package/dist/esm/AiInput.js +332 -0
- package/dist/esm/AiInput.js.map +1 -0
- package/dist/esm/AiResponse.js +281 -0
- package/dist/esm/AiResponse.js.map +1 -0
- package/dist/esm/AiRole.js +93 -0
- package/dist/esm/AiRole.js.map +1 -0
- package/dist/esm/AiToolkit.js +123 -0
- package/dist/esm/AiToolkit.js.map +1 -0
- package/dist/esm/Completions.js +206 -0
- package/dist/esm/Completions.js.map +1 -0
- package/dist/esm/Tokenizer.js +48 -0
- package/dist/esm/Tokenizer.js.map +1 -0
- package/dist/esm/index.js +33 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +4 -0
- package/package.json +100 -0
- package/src/AiChat.ts +274 -0
- package/src/AiError.ts +38 -0
- package/src/AiInput.ts +456 -0
- package/src/AiResponse.ts +343 -0
- package/src/AiRole.ts +122 -0
- package/src/AiToolkit.ts +314 -0
- package/src/Completions.ts +354 -0
- package/src/Tokenizer.ts +78 -0
- package/src/index.ts +39 -0
package/src/Tokenizer.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as Chunk from "effect/Chunk"
|
|
5
|
+
import * as Context from "effect/Context"
|
|
6
|
+
import * as Effect from "effect/Effect"
|
|
7
|
+
import * as Option from "effect/Option"
|
|
8
|
+
import type { AiError } from "./AiError.js"
|
|
9
|
+
import type { Message } from "./AiInput.js"
|
|
10
|
+
import * as AiInput from "./AiInput.js"
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @since 1.0.0
|
|
14
|
+
* @category tags
|
|
15
|
+
*/
|
|
16
|
+
export class Tokenizer extends Context.Tag("@effect/ai/Tokenizer")<
|
|
17
|
+
Tokenizer,
|
|
18
|
+
Tokenizer.Service
|
|
19
|
+
>() {}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @since 1.0.0
|
|
23
|
+
* @category models
|
|
24
|
+
*/
|
|
25
|
+
export declare namespace Tokenizer {
|
|
26
|
+
/**
|
|
27
|
+
* @since 1.0.0
|
|
28
|
+
* @models
|
|
29
|
+
*/
|
|
30
|
+
export interface Service {
|
|
31
|
+
readonly tokenize: (content: AiInput.Input) => Effect.Effect<Array<number>, AiError>
|
|
32
|
+
readonly truncate: (content: AiInput.Input, tokens: number) => Effect.Effect<AiInput.Input, AiError>
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @since 1.0.0
|
|
38
|
+
* @category constructors
|
|
39
|
+
*/
|
|
40
|
+
export const make = (options: {
|
|
41
|
+
readonly tokenize: (content: AiInput.AiInput) => Effect.Effect<Array<number>, AiError>
|
|
42
|
+
}): Tokenizer.Service =>
|
|
43
|
+
Tokenizer.of({
|
|
44
|
+
tokenize(input) {
|
|
45
|
+
return options.tokenize(AiInput.make(input))
|
|
46
|
+
},
|
|
47
|
+
truncate(content, tokens) {
|
|
48
|
+
return truncate(AiInput.make(content), options.tokenize, tokens)
|
|
49
|
+
}
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
const truncate = (
|
|
53
|
+
self: AiInput.AiInput,
|
|
54
|
+
tokenize: (content: AiInput.AiInput) => Effect.Effect<Array<number>, AiError>,
|
|
55
|
+
maxTokens: number
|
|
56
|
+
): Effect.Effect<AiInput.AiInput, AiError> =>
|
|
57
|
+
Effect.suspend(() => {
|
|
58
|
+
let count = 0
|
|
59
|
+
let inParts = self
|
|
60
|
+
let outParts: Chunk.Chunk<Message> = Chunk.empty()
|
|
61
|
+
const loop: Effect.Effect<AiInput.AiInput, AiError> = Effect.suspend(() => {
|
|
62
|
+
const o = Chunk.last(inParts)
|
|
63
|
+
if (Option.isNone(o)) {
|
|
64
|
+
return Effect.succeed(AiInput.make(outParts))
|
|
65
|
+
}
|
|
66
|
+
const part = o.value
|
|
67
|
+
inParts = Chunk.dropRight(inParts, 1)
|
|
68
|
+
return Effect.flatMap(tokenize(Chunk.of(part)), (tokens) => {
|
|
69
|
+
count += tokens.length
|
|
70
|
+
if (count > maxTokens) {
|
|
71
|
+
return Effect.succeed(AiInput.make(outParts))
|
|
72
|
+
}
|
|
73
|
+
outParts = Chunk.prepend(outParts, part)
|
|
74
|
+
return loop
|
|
75
|
+
})
|
|
76
|
+
})
|
|
77
|
+
return loop
|
|
78
|
+
})
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
export * as AiChat from "./AiChat.js"
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @since 1.0.0
|
|
8
|
+
*/
|
|
9
|
+
export * as AiError from "./AiError.js"
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
export * as AiInput from "./AiInput.js"
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @since 1.0.0
|
|
18
|
+
*/
|
|
19
|
+
export * as AiResponse from "./AiResponse.js"
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @since 1.0.0
|
|
23
|
+
*/
|
|
24
|
+
export * as AiRole from "./AiRole.js"
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @since 1.0.0
|
|
28
|
+
*/
|
|
29
|
+
export * as AiToolkit from "./AiToolkit.js"
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @since 1.0.0
|
|
33
|
+
*/
|
|
34
|
+
export * as Completions from "./Completions.js"
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @since 1.0.0
|
|
38
|
+
*/
|
|
39
|
+
export * as Tokenizer from "./Tokenizer.js"
|