1import type * as bedrock from "@distilled.cloud/aws/bedrock-agent-runtime";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { KnowledgeBase } from "./KnowledgeBase.ts";
5
6/**
7 * The `RetrieveAndGenerate` request. The knowledge base is referenced inside
8 * `retrieveAndGenerateConfiguration.knowledgeBaseConfiguration.knowledgeBaseId`
9 * — pass the bound {@link KnowledgeBase}'s `knowledgeBaseId` there. The
10 * binding scopes IAM to the bound knowledge base and the bound generation
11 * models.
12 */
13export interface RetrieveAndGenerateRequest
14 extends bedrock.RetrieveAndGenerateRequest {}
15
16/**
17 * Runtime binding for `bedrock-agent-runtime:RetrieveAndGenerate` — the fully
18 * managed RAG operation: retrieve relevant passages from a
19 * {@link KnowledgeBase} and generate a grounded answer with a foundation
20 * model in one call.
21 *
22 * Bind a knowledge base and one or more generation models inside a function
23 * runtime. The binding grants `bedrock:Retrieve` and
24 * `bedrock:RetrieveAndGenerate` scoped to the knowledge base, plus
25 * `bedrock:InvokeModel` scoped to the bound models (or all foundation models
26 * and cross-region inference profiles when none are named).
27 *
28 * ### Retrieving and Generating
29 * **Example:** One-Shot Grounded Answer
30 * ```typescript
31 * // init
32 * const rag = yield* Bedrock.RetrieveAndGenerate(
33 * knowledgeBase,
34 * "us.anthropic.claude-3-5-sonnet-20240620-v1:0",
35 * );
36 *
37 * // runtime
38 * const result = yield* rag({
39 * input: { text: "How do I rotate credentials?" },
40 * retrieveAndGenerateConfiguration: {
41 * type: "KNOWLEDGE_BASE",
42 * knowledgeBaseConfiguration: {
43 * knowledgeBaseId: yield* knowledgeBase.knowledgeBaseId,
44 * modelArn: "us.anthropic.claude-3-5-sonnet-20240620-v1:0",
45 * },
46 * },
47 * });
48 * const answer = result.output.text;
49 * ```
50 *
51 * @binding
52 */
53export interface RetrieveAndGenerate extends Binding.Service<
54 RetrieveAndGenerate,
55 "AWS.Bedrock.RetrieveAndGenerate",
56 <K extends KnowledgeBase>(
57 knowledgeBase: K,
58 ...models: string[]
59 ) => Effect.Effect<
60 (
61 request: RetrieveAndGenerateRequest,
62 ) => Effect.Effect<
63 bedrock.RetrieveAndGenerateResponse,
64 bedrock.RetrieveAndGenerateError
65 >
66 >
67> {}
68export const RetrieveAndGenerate = Binding.Service<RetrieveAndGenerate>(
69 "AWS.Bedrock.RetrieveAndGenerate",
70);