@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.
Files changed (75) hide show
  1. package/AiChat/package.json +6 -0
  2. package/AiError/package.json +6 -0
  3. package/AiInput/package.json +6 -0
  4. package/AiResponse/package.json +6 -0
  5. package/AiRole/package.json +6 -0
  6. package/AiToolkit/package.json +6 -0
  7. package/Completions/package.json +6 -0
  8. package/LICENSE +21 -0
  9. package/README.md +1 -0
  10. package/Tokenizer/package.json +6 -0
  11. package/dist/cjs/AiChat.js +151 -0
  12. package/dist/cjs/AiChat.js.map +1 -0
  13. package/dist/cjs/AiError.js +41 -0
  14. package/dist/cjs/AiError.js.map +1 -0
  15. package/dist/cjs/AiInput.js +349 -0
  16. package/dist/cjs/AiInput.js.map +1 -0
  17. package/dist/cjs/AiResponse.js +295 -0
  18. package/dist/cjs/AiResponse.js.map +1 -0
  19. package/dist/cjs/AiRole.js +106 -0
  20. package/dist/cjs/AiRole.js.map +1 -0
  21. package/dist/cjs/AiToolkit.js +132 -0
  22. package/dist/cjs/AiToolkit.js.map +1 -0
  23. package/dist/cjs/Completions.js +217 -0
  24. package/dist/cjs/Completions.js.map +1 -0
  25. package/dist/cjs/Tokenizer.js +59 -0
  26. package/dist/cjs/Tokenizer.js.map +1 -0
  27. package/dist/cjs/index.js +25 -0
  28. package/dist/cjs/index.js.map +1 -0
  29. package/dist/dts/AiChat.d.ts +73 -0
  30. package/dist/dts/AiChat.d.ts.map +1 -0
  31. package/dist/dts/AiError.d.ts +38 -0
  32. package/dist/dts/AiError.d.ts.map +1 -0
  33. package/dist/dts/AiInput.d.ts +283 -0
  34. package/dist/dts/AiInput.d.ts.map +1 -0
  35. package/dist/dts/AiResponse.d.ts +235 -0
  36. package/dist/dts/AiResponse.d.ts.map +1 -0
  37. package/dist/dts/AiRole.d.ts +111 -0
  38. package/dist/dts/AiRole.d.ts.map +1 -0
  39. package/dist/dts/AiToolkit.d.ts +158 -0
  40. package/dist/dts/AiToolkit.d.ts.map +1 -0
  41. package/dist/dts/Completions.d.ts +104 -0
  42. package/dist/dts/Completions.d.ts.map +1 -0
  43. package/dist/dts/Tokenizer.d.ts +34 -0
  44. package/dist/dts/Tokenizer.d.ts.map +1 -0
  45. package/dist/dts/index.d.ts +33 -0
  46. package/dist/dts/index.d.ts.map +1 -0
  47. package/dist/esm/AiChat.js +139 -0
  48. package/dist/esm/AiChat.js.map +1 -0
  49. package/dist/esm/AiError.js +31 -0
  50. package/dist/esm/AiError.js.map +1 -0
  51. package/dist/esm/AiInput.js +332 -0
  52. package/dist/esm/AiInput.js.map +1 -0
  53. package/dist/esm/AiResponse.js +281 -0
  54. package/dist/esm/AiResponse.js.map +1 -0
  55. package/dist/esm/AiRole.js +93 -0
  56. package/dist/esm/AiRole.js.map +1 -0
  57. package/dist/esm/AiToolkit.js +123 -0
  58. package/dist/esm/AiToolkit.js.map +1 -0
  59. package/dist/esm/Completions.js +206 -0
  60. package/dist/esm/Completions.js.map +1 -0
  61. package/dist/esm/Tokenizer.js +48 -0
  62. package/dist/esm/Tokenizer.js.map +1 -0
  63. package/dist/esm/index.js +33 -0
  64. package/dist/esm/index.js.map +1 -0
  65. package/dist/esm/package.json +4 -0
  66. package/package.json +100 -0
  67. package/src/AiChat.ts +274 -0
  68. package/src/AiError.ts +38 -0
  69. package/src/AiInput.ts +456 -0
  70. package/src/AiResponse.ts +343 -0
  71. package/src/AiRole.ts +122 -0
  72. package/src/AiToolkit.ts +314 -0
  73. package/src/Completions.ts +354 -0
  74. package/src/Tokenizer.ts +78 -0
  75. package/src/index.ts +39 -0
@@ -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"