@effect/ai 0.33.1 → 0.34.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/dist/cjs/AiError.js +8 -3
- package/dist/cjs/AiError.js.map +1 -1
- package/dist/cjs/Chat.js +2 -2
- package/dist/cjs/EmbeddingModel.js +9 -2
- package/dist/cjs/EmbeddingModel.js.map +1 -1
- package/dist/cjs/LanguageModel.js +2 -2
- package/dist/cjs/Prompt.js +10 -3
- package/dist/cjs/Prompt.js.map +1 -1
- package/dist/cjs/Telemetry.js +4 -2
- package/dist/cjs/Telemetry.js.map +1 -1
- package/dist/cjs/Tool.js +0 -9
- package/dist/cjs/Tool.js.map +1 -1
- package/dist/dts/AiError.d.ts +4 -3
- package/dist/dts/AiError.d.ts.map +1 -1
- package/dist/dts/Chat.d.ts +2 -2
- package/dist/dts/EmbeddingModel.d.ts +9 -2
- package/dist/dts/EmbeddingModel.d.ts.map +1 -1
- package/dist/dts/LanguageModel.d.ts +2 -2
- package/dist/dts/McpSchema.d.ts +1 -1
- package/dist/dts/Prompt.d.ts +14 -3
- package/dist/dts/Prompt.d.ts.map +1 -1
- package/dist/dts/Telemetry.d.ts +4 -2
- package/dist/dts/Telemetry.d.ts.map +1 -1
- package/dist/dts/Tool.d.ts.map +1 -1
- package/dist/esm/AiError.js +8 -3
- package/dist/esm/AiError.js.map +1 -1
- package/dist/esm/Chat.js +2 -2
- package/dist/esm/EmbeddingModel.js +9 -2
- package/dist/esm/EmbeddingModel.js.map +1 -1
- package/dist/esm/LanguageModel.js +2 -2
- package/dist/esm/Prompt.js +10 -3
- package/dist/esm/Prompt.js.map +1 -1
- package/dist/esm/Telemetry.js +4 -2
- package/dist/esm/Telemetry.js.map +1 -1
- package/dist/esm/Tool.js +0 -9
- package/dist/esm/Tool.js.map +1 -1
- package/package.json +5 -5
- package/src/AiError.ts +6 -5
- package/src/Chat.ts +2 -2
- package/src/EmbeddingModel.ts +9 -2
- package/src/LanguageModel.ts +2 -2
- package/src/Prompt.ts +24 -6
- package/src/Telemetry.ts +4 -2
- package/src/Tool.ts +0 -9
package/src/Chat.ts
CHANGED
|
@@ -78,10 +78,10 @@ import type * as Tool from "./Tool.js"
|
|
|
78
78
|
* @example
|
|
79
79
|
* ```ts
|
|
80
80
|
* import { Chat } from "@effect/ai"
|
|
81
|
-
* import
|
|
81
|
+
* import * as Effect from "effect/Effect"
|
|
82
82
|
*
|
|
83
83
|
* const useChat = Effect.gen(function* () {
|
|
84
|
-
* const chat = yield* Chat
|
|
84
|
+
* const chat = yield* Chat.Chat
|
|
85
85
|
* const response = yield* chat.generateText({
|
|
86
86
|
* prompt: "Explain quantum computing in simple terms"
|
|
87
87
|
* })
|
package/src/EmbeddingModel.ts
CHANGED
|
@@ -69,10 +69,17 @@ import * as AiError from "./AiError.js"
|
|
|
69
69
|
* @example
|
|
70
70
|
* ```ts
|
|
71
71
|
* import { EmbeddingModel } from "@effect/ai"
|
|
72
|
-
* import
|
|
72
|
+
* import * as Effect from "effect/Effect"
|
|
73
|
+
*
|
|
74
|
+
* const cosineSimilarity = (a: ReadonlyArray<number>, b: ReadonlyArray<number>): number => {
|
|
75
|
+
* const dot = a.reduce((sum, ai, i) => sum + ai * (b[i] ?? 0), 0)
|
|
76
|
+
* const normA = Math.sqrt(a.reduce((sum, ai) => sum + ai * ai, 0))
|
|
77
|
+
* const normB = Math.sqrt(b.reduce((sum, bi) => sum + bi * bi, 0))
|
|
78
|
+
* return normA === 0 || normB === 0 ? 0 : dot / (normA * normB)
|
|
79
|
+
* }
|
|
73
80
|
*
|
|
74
81
|
* const useEmbeddings = Effect.gen(function* () {
|
|
75
|
-
* const embedder = yield* EmbeddingModel
|
|
82
|
+
* const embedder = yield* EmbeddingModel.EmbeddingModel
|
|
76
83
|
*
|
|
77
84
|
* const documentVector = yield* embedder.embed("This is a sample document")
|
|
78
85
|
* const queryVector = yield* embedder.embed("sample query")
|
package/src/LanguageModel.ts
CHANGED
|
@@ -83,10 +83,10 @@ import * as Toolkit from "./Toolkit.js"
|
|
|
83
83
|
* @example
|
|
84
84
|
* ```ts
|
|
85
85
|
* import { LanguageModel } from "@effect/ai"
|
|
86
|
-
* import
|
|
86
|
+
* import * as Effect from "effect/Effect"
|
|
87
87
|
*
|
|
88
88
|
* const useLanguageModel = Effect.gen(function* () {
|
|
89
|
-
* const model = yield* LanguageModel
|
|
89
|
+
* const model = yield* LanguageModel.LanguageModel
|
|
90
90
|
* const response = yield* model.generateText({
|
|
91
91
|
* prompt: "What is machine learning?"
|
|
92
92
|
* })
|
package/src/Prompt.ts
CHANGED
|
@@ -611,7 +611,8 @@ export const toolCallPart = (params: PartConstructorParams<ToolCallPart>): ToolC
|
|
|
611
611
|
* temperature: 22,
|
|
612
612
|
* condition: "sunny",
|
|
613
613
|
* humidity: 65
|
|
614
|
-
* }
|
|
614
|
+
* },
|
|
615
|
+
* providerExecuted: false
|
|
615
616
|
* })
|
|
616
617
|
* ```
|
|
617
618
|
*
|
|
@@ -635,6 +636,10 @@ export interface ToolResultPart extends BasePart<"tool-result", ToolResultPartOp
|
|
|
635
636
|
* The result returned by the tool execution.
|
|
636
637
|
*/
|
|
637
638
|
readonly result: unknown
|
|
639
|
+
/**
|
|
640
|
+
* Whether the tool was executed by the provider (true) or framework (false).
|
|
641
|
+
*/
|
|
642
|
+
readonly providerExecuted: boolean
|
|
638
643
|
}
|
|
639
644
|
|
|
640
645
|
/**
|
|
@@ -660,6 +665,10 @@ export interface ToolResultPartEncoded extends BasePartEncoded<"tool-result", To
|
|
|
660
665
|
* The result returned by the tool execution.
|
|
661
666
|
*/
|
|
662
667
|
readonly result: unknown
|
|
668
|
+
/**
|
|
669
|
+
* Whether the tool was executed by the provider (true) or framework (false).
|
|
670
|
+
*/
|
|
671
|
+
readonly providerExecuted: boolean
|
|
663
672
|
}
|
|
664
673
|
|
|
665
674
|
/**
|
|
@@ -683,6 +692,7 @@ export const ToolResultPart: Schema.Schema<ToolResultPart, ToolResultPartEncoded
|
|
|
683
692
|
name: Schema.String,
|
|
684
693
|
isFailure: Schema.Boolean,
|
|
685
694
|
result: Schema.Unknown,
|
|
695
|
+
providerExecuted: Schema.Boolean,
|
|
686
696
|
options: Schema.optionalWith(ProviderOptions, { default: constEmptyObject })
|
|
687
697
|
}).pipe(
|
|
688
698
|
Schema.attachPropertySignature(PartTypeId, PartTypeId),
|
|
@@ -1036,7 +1046,8 @@ export const userMessage = (params: MessageConstructorParams<UserMessage>): User
|
|
|
1036
1046
|
* result: {
|
|
1037
1047
|
* temperature: 72,
|
|
1038
1048
|
* condition: "sunny"
|
|
1039
|
-
* }
|
|
1049
|
+
* },
|
|
1050
|
+
* providerExecuted: false
|
|
1040
1051
|
* }),
|
|
1041
1052
|
* Prompt.makePart("text", {
|
|
1042
1053
|
* text: "The weather in San Francisco is currently 72°F and sunny."
|
|
@@ -1150,7 +1161,8 @@ export const assistantMessage = (params: MessageConstructorParams<AssistantMessa
|
|
|
1150
1161
|
* { title: "TypeScript Handbook", url: "https://..." },
|
|
1151
1162
|
* { title: "Effective TypeScript", url: "https://..." }
|
|
1152
1163
|
* ]
|
|
1153
|
-
* }
|
|
1164
|
+
* },
|
|
1165
|
+
* providerExecuted: false
|
|
1154
1166
|
* })
|
|
1155
1167
|
* ]
|
|
1156
1168
|
* })
|
|
@@ -1624,12 +1636,18 @@ export const fromResponseParts = (parts: ReadonlyArray<Response.AnyPart>): Promp
|
|
|
1624
1636
|
|
|
1625
1637
|
// Tool Result Parts
|
|
1626
1638
|
case "tool-result": {
|
|
1627
|
-
|
|
1639
|
+
const toolPart = makePart("tool-result", {
|
|
1628
1640
|
id: part.id,
|
|
1629
1641
|
name: part.providerName ?? part.name,
|
|
1630
1642
|
isFailure: part.isFailure,
|
|
1631
|
-
result: part.encodedResult
|
|
1632
|
-
|
|
1643
|
+
result: part.encodedResult,
|
|
1644
|
+
providerExecuted: part.providerExecuted ?? false
|
|
1645
|
+
})
|
|
1646
|
+
if (part.providerExecuted) {
|
|
1647
|
+
assistantParts.push(toolPart)
|
|
1648
|
+
} else {
|
|
1649
|
+
toolParts.push(toolPart)
|
|
1650
|
+
}
|
|
1633
1651
|
}
|
|
1634
1652
|
}
|
|
1635
1653
|
}
|
package/src/Telemetry.ts
CHANGED
|
@@ -627,11 +627,13 @@ export interface SpanTransformer {
|
|
|
627
627
|
* @example
|
|
628
628
|
* ```ts
|
|
629
629
|
* import { Telemetry } from "@effect/ai"
|
|
630
|
-
* import
|
|
630
|
+
* import * as Effect from "effect/Effect"
|
|
631
|
+
*
|
|
632
|
+
* declare const myAIOperation: Effect.Effect<void>
|
|
631
633
|
*
|
|
632
634
|
* // Create a custom span transformer
|
|
633
635
|
* const loggingTransformer: Telemetry.SpanTransformer = (options) => {
|
|
634
|
-
* console.log(`AI request completed: ${options.
|
|
636
|
+
* console.log(`AI request completed: ${options.response.length} part(s)`)
|
|
635
637
|
* options.response.forEach((part, index) => {
|
|
636
638
|
* console.log(`Part ${index}: ${part.type}`)
|
|
637
639
|
* })
|
package/src/Tool.ts
CHANGED
|
@@ -1297,15 +1297,6 @@ export const getJsonSchema = <
|
|
|
1297
1297
|
export const getJsonSchemaFromSchemaAst = (
|
|
1298
1298
|
ast: AST.AST
|
|
1299
1299
|
): JsonSchema.JsonSchema7 => {
|
|
1300
|
-
const props = AST.getPropertySignatures(ast)
|
|
1301
|
-
if (props.length === 0) {
|
|
1302
|
-
return {
|
|
1303
|
-
type: "object",
|
|
1304
|
-
properties: {},
|
|
1305
|
-
required: [],
|
|
1306
|
-
additionalProperties: false
|
|
1307
|
-
}
|
|
1308
|
-
}
|
|
1309
1300
|
const $defs = {}
|
|
1310
1301
|
const schema = JsonSchema.fromAST(ast, {
|
|
1311
1302
|
definitions: $defs,
|