@fastpaca/cria 0.0.1 → 1.1.3
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 +118 -121
- package/dist/ai-sdk/index.d.ts +68 -0
- package/dist/ai-sdk/index.d.ts.map +1 -0
- package/dist/ai-sdk/index.js +375 -0
- package/dist/ai-sdk/index.js.map +1 -0
- package/dist/anthropic/index.d.ts +102 -0
- package/dist/anthropic/index.d.ts.map +1 -0
- package/dist/anthropic/index.js +281 -0
- package/dist/anthropic/index.js.map +1 -0
- package/dist/components/index.d.ts +147 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +181 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/summary.d.ts +90 -0
- package/dist/components/summary.d.ts.map +1 -0
- package/dist/components/summary.js +118 -0
- package/dist/components/summary.js.map +1 -0
- package/dist/components/vector-search.d.ts +70 -0
- package/dist/components/vector-search.d.ts.map +1 -0
- package/dist/components/vector-search.js +110 -0
- package/dist/components/vector-search.js.map +1 -0
- package/dist/dsl.d.ts +201 -0
- package/dist/dsl.d.ts.map +1 -0
- package/dist/dsl.js +320 -0
- package/dist/dsl.js.map +1 -0
- package/dist/index.d.ts +20 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -19
- package/dist/index.js.map +1 -1
- package/dist/instrumentation/otel.d.ts +19 -0
- package/dist/instrumentation/otel.d.ts.map +1 -0
- package/dist/instrumentation/otel.js +102 -0
- package/dist/instrumentation/otel.js.map +1 -0
- package/dist/jsx/index.d.ts +6 -0
- package/dist/jsx/index.d.ts.map +1 -0
- package/dist/jsx/index.js +7 -0
- package/dist/jsx/index.js.map +1 -0
- package/dist/jsx/jsx-dev-runtime.d.ts +2 -0
- package/dist/jsx/jsx-dev-runtime.d.ts.map +1 -0
- package/dist/jsx/jsx-dev-runtime.js +3 -0
- package/dist/jsx/jsx-dev-runtime.js.map +1 -0
- package/dist/jsx/jsx-runtime.d.ts +40 -0
- package/dist/jsx/jsx-runtime.d.ts.map +1 -0
- package/dist/{jsx-runtime.js → jsx/jsx-runtime.js} +14 -14
- package/dist/jsx/jsx-runtime.js.map +1 -0
- package/dist/memory/chroma/index.d.ts +59 -0
- package/dist/memory/chroma/index.d.ts.map +1 -0
- package/dist/memory/chroma/index.js +172 -0
- package/dist/memory/chroma/index.js.map +1 -0
- package/dist/memory/index.d.ts +4 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +2 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/key-value.d.ts +71 -0
- package/dist/memory/key-value.d.ts.map +1 -0
- package/dist/memory/key-value.js +34 -0
- package/dist/memory/key-value.js.map +1 -0
- package/dist/memory/postgres.d.ts +71 -0
- package/dist/memory/postgres.d.ts.map +1 -0
- package/dist/memory/postgres.js +124 -0
- package/dist/memory/postgres.js.map +1 -0
- package/dist/memory/qdrant/index.d.ts +64 -0
- package/dist/memory/qdrant/index.d.ts.map +1 -0
- package/dist/memory/qdrant/index.js +136 -0
- package/dist/memory/qdrant/index.js.map +1 -0
- package/dist/memory/redis.d.ts +70 -0
- package/dist/memory/redis.d.ts.map +1 -0
- package/dist/memory/redis.js +127 -0
- package/dist/memory/redis.js.map +1 -0
- package/dist/memory/vector.d.ts +53 -0
- package/dist/memory/vector.d.ts.map +1 -0
- package/dist/memory/vector.js +2 -0
- package/dist/memory/vector.js.map +1 -0
- package/dist/openai/index.d.ts +73 -0
- package/dist/openai/index.d.ts.map +1 -0
- package/dist/openai/index.js +306 -0
- package/dist/openai/index.js.map +1 -0
- package/dist/render.d.ts +44 -40
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +174 -148
- package/dist/render.js.map +1 -1
- package/dist/renderers/markdown.d.ts +3 -0
- package/dist/renderers/markdown.d.ts.map +1 -0
- package/dist/renderers/markdown.js +43 -0
- package/dist/renderers/markdown.js.map +1 -0
- package/dist/renderers/shared.d.ts +82 -0
- package/dist/renderers/shared.d.ts.map +1 -0
- package/dist/renderers/shared.js +156 -0
- package/dist/renderers/shared.js.map +1 -0
- package/dist/snapshot.d.ts +47 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +144 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/tokenizers.d.ts +14 -0
- package/dist/tokenizers.d.ts.map +1 -0
- package/dist/tokenizers.js +45 -0
- package/dist/tokenizers.js.map +1 -0
- package/dist/types.d.ts +221 -85
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +116 -2
- package/dist/types.js.map +1 -1
- package/package.json +111 -5
- package/dist/components.d.ts +0 -78
- package/dist/components.d.ts.map +0 -1
- package/dist/components.js +0 -98
- package/dist/components.js.map +0 -1
- package/dist/jsx-runtime.d.ts +0 -18
- package/dist/jsx-runtime.d.ts.map +0 -1
- package/dist/jsx-runtime.js.map +0 -1
- package/dist/render.test.d.ts +0 -2
- package/dist/render.test.d.ts.map +0 -1
- package/dist/render.test.js +0 -49
- package/dist/render.test.js.map +0 -1
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type OpenAI from "openai";
|
|
2
|
+
import type { ChatCompletionMessageParam } from "openai/resources/chat/completions";
|
|
3
|
+
import type { ResponseInputItem } from "openai/resources/responses/responses";
|
|
4
|
+
import type { CompletionRequest, CompletionResult, ModelProvider, PromptChildren, PromptElement, PromptRenderer, Tokenizer } from "../types";
|
|
5
|
+
/**
|
|
6
|
+
* Renderer that outputs ChatCompletionMessageParam[] for the OpenAI Chat Completions API.
|
|
7
|
+
* Pass this to render() to get messages compatible with client.chat.completions.create().
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { render } from "@fastpaca/cria";
|
|
12
|
+
* import { chatCompletions } from "@fastpaca/cria/openai";
|
|
13
|
+
*
|
|
14
|
+
* const messages = await render(prompt, { tokenizer, budget, renderer: chatCompletions });
|
|
15
|
+
* const response = await openai.chat.completions.create({ model: "gpt-4", messages });
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare const chatCompletions: PromptRenderer<ChatCompletionMessageParam[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Renderer that outputs ResponseInputItem[] for the OpenAI Responses API.
|
|
21
|
+
* Use this with reasoning models that support native reasoning.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* import { render } from "@fastpaca/cria";
|
|
26
|
+
* import { responses } from "@fastpaca/cria/openai";
|
|
27
|
+
*
|
|
28
|
+
* const input = await render(prompt, { tokenizer, budget, renderer: responses });
|
|
29
|
+
* const response = await openai.responses.create({ model: "o3", input });
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare const responses: PromptRenderer<ResponseInputItem[]>;
|
|
33
|
+
interface OpenAIProviderProps {
|
|
34
|
+
/** OpenAI client instance */
|
|
35
|
+
client: OpenAI;
|
|
36
|
+
/** Model to use (e.g. "gpt-4o", "gpt-4o-mini") */
|
|
37
|
+
model: string;
|
|
38
|
+
/** Optional tokenizer to use for budgeting; defaults to a tiktoken-based tokenizer */
|
|
39
|
+
tokenizer?: Tokenizer;
|
|
40
|
+
/** Child components that will have access to this provider */
|
|
41
|
+
children?: PromptChildren;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* ModelProvider implementation that wraps an OpenAI client.
|
|
45
|
+
* Use this with the DSL's `.provider()` method.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* import OpenAI from "openai";
|
|
50
|
+
* import { cria } from "@fastpaca/cria";
|
|
51
|
+
* import { Provider } from "@fastpaca/cria/openai";
|
|
52
|
+
*
|
|
53
|
+
* const client = new OpenAI();
|
|
54
|
+
* const provider = new Provider(client, "gpt-4o");
|
|
55
|
+
*
|
|
56
|
+
* const prompt = cria
|
|
57
|
+
* .prompt()
|
|
58
|
+
* .provider(provider, (p) =>
|
|
59
|
+
* p.summary(content, { id: "summary", store })
|
|
60
|
+
* )
|
|
61
|
+
* .build();
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare class Provider implements ModelProvider {
|
|
65
|
+
readonly name = "openai";
|
|
66
|
+
private readonly client;
|
|
67
|
+
private readonly model;
|
|
68
|
+
constructor(client: OpenAI, model: string);
|
|
69
|
+
completion(request: CompletionRequest): Promise<CompletionResult>;
|
|
70
|
+
}
|
|
71
|
+
export declare function OpenAIProvider({ client, model, tokenizer, children, }: OpenAIProviderProps): PromptElement;
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/openai/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAEV,0BAA0B,EAK3B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sCAAsC,CAAC;AAY9C,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,EACd,SAAS,EACV,MAAM,UAAU,CAAC;AAElB;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,0BAA0B,EAAE,CAKxE,CAAC;AAiHF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,SAAS,EAAE,cAAc,CAAC,iBAAiB,EAAE,CAKzD,CAAC;AA4IF,UAAU,mBAAmB;IAC3B,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AA8BD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,QAAS,YAAW,aAAa;IAC5C,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAKnC,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAmBxE;AAED,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,KAAK,EACL,SAAS,EACT,QAAa,GACd,EAAE,mBAAmB,GAAG,aAAa,CA8BrC"}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import { markdownRenderer } from "../renderers/markdown";
|
|
2
|
+
import { coalesceTextParts, collectMessageNodes, collectSemanticParts, partsToText, safeStringify, } from "../renderers/shared";
|
|
3
|
+
import { tiktokenTokenizer } from "../tokenizers";
|
|
4
|
+
/**
|
|
5
|
+
* Renderer that outputs ChatCompletionMessageParam[] for the OpenAI Chat Completions API.
|
|
6
|
+
* Pass this to render() to get messages compatible with client.chat.completions.create().
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { render } from "@fastpaca/cria";
|
|
11
|
+
* import { chatCompletions } from "@fastpaca/cria/openai";
|
|
12
|
+
*
|
|
13
|
+
* const messages = await render(prompt, { tokenizer, budget, renderer: chatCompletions });
|
|
14
|
+
* const response = await openai.chat.completions.create({ model: "gpt-4", messages });
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export const chatCompletions = {
|
|
18
|
+
name: "openai-chat-completions",
|
|
19
|
+
tokenString: markdownRenderer.tokenString,
|
|
20
|
+
render: (element) => renderToChatCompletions(element),
|
|
21
|
+
empty: () => [],
|
|
22
|
+
};
|
|
23
|
+
function renderToChatCompletions(root) {
|
|
24
|
+
const messageNodes = collectMessageNodes(root);
|
|
25
|
+
const result = [];
|
|
26
|
+
for (const messageNode of messageNodes) {
|
|
27
|
+
result.push(...messageNodeToParams(messageNode));
|
|
28
|
+
}
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
function messageNodeToParams(messageNode) {
|
|
32
|
+
const parts = coalesceTextParts(collectSemanticParts(messageNode.children));
|
|
33
|
+
if (messageNode.role === "system") {
|
|
34
|
+
return [toSystemMessage(parts)];
|
|
35
|
+
}
|
|
36
|
+
if (messageNode.role === "user") {
|
|
37
|
+
return [toUserMessage(parts)];
|
|
38
|
+
}
|
|
39
|
+
// Assistant message: may contain tool calls, and tool results become separate messages
|
|
40
|
+
// Preserve original part ordering - only separate out tool results
|
|
41
|
+
const assistantParts = parts.filter((p) => p.type !== "tool-result");
|
|
42
|
+
const toolResultParts = parts.filter((p) => p.type === "tool-result");
|
|
43
|
+
const result = [];
|
|
44
|
+
if (assistantParts.length > 0 || toolResultParts.length === 0) {
|
|
45
|
+
result.push(toAssistantMessage(assistantParts));
|
|
46
|
+
}
|
|
47
|
+
for (const toolResult of toolResultParts) {
|
|
48
|
+
result.push(toToolMessage(toolResult));
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
function toSystemMessage(parts) {
|
|
53
|
+
return {
|
|
54
|
+
role: "system",
|
|
55
|
+
content: partsToText(parts, { wrapReasoning: true }),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function toUserMessage(parts) {
|
|
59
|
+
return {
|
|
60
|
+
role: "user",
|
|
61
|
+
content: partsToText(parts, { wrapReasoning: true }),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function toAssistantMessage(parts) {
|
|
65
|
+
const textContent = partsToText(parts, { wrapReasoning: true });
|
|
66
|
+
const toolCalls = parts
|
|
67
|
+
.filter((part) => part.type === "tool-call")
|
|
68
|
+
.map((part) => ({
|
|
69
|
+
id: part.toolCallId,
|
|
70
|
+
type: "function",
|
|
71
|
+
function: {
|
|
72
|
+
name: part.toolName,
|
|
73
|
+
arguments: safeStringify(part.input),
|
|
74
|
+
},
|
|
75
|
+
}));
|
|
76
|
+
const result = {
|
|
77
|
+
role: "assistant",
|
|
78
|
+
};
|
|
79
|
+
if (textContent.length > 0) {
|
|
80
|
+
result.content = textContent;
|
|
81
|
+
}
|
|
82
|
+
if (toolCalls.length > 0) {
|
|
83
|
+
result.tool_calls = toolCalls;
|
|
84
|
+
}
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
function toToolMessage(part) {
|
|
88
|
+
return {
|
|
89
|
+
role: "tool",
|
|
90
|
+
tool_call_id: part.toolCallId,
|
|
91
|
+
content: safeStringify(part.output),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// ============================================================================
|
|
95
|
+
// Responses API Renderer (for reasoning models)
|
|
96
|
+
// ============================================================================
|
|
97
|
+
/**
|
|
98
|
+
* Renderer that outputs ResponseInputItem[] for the OpenAI Responses API.
|
|
99
|
+
* Use this with reasoning models that support native reasoning.
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```ts
|
|
103
|
+
* import { render } from "@fastpaca/cria";
|
|
104
|
+
* import { responses } from "@fastpaca/cria/openai";
|
|
105
|
+
*
|
|
106
|
+
* const input = await render(prompt, { tokenizer, budget, renderer: responses });
|
|
107
|
+
* const response = await openai.responses.create({ model: "o3", input });
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export const responses = {
|
|
111
|
+
name: "openai-responses",
|
|
112
|
+
tokenString: markdownRenderer.tokenString,
|
|
113
|
+
render: (element) => renderToResponses(element),
|
|
114
|
+
empty: () => [],
|
|
115
|
+
};
|
|
116
|
+
function renderToResponses(root) {
|
|
117
|
+
const result = [];
|
|
118
|
+
collectResponseItems(root, result);
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Convert a message element's parts into ResponseInputItems.
|
|
123
|
+
* Handles text, reasoning, tool calls, and tool results.
|
|
124
|
+
*/
|
|
125
|
+
function collectMessageResponseItems(element, acc) {
|
|
126
|
+
const parts = coalesceTextParts(collectSemanticParts(element.children));
|
|
127
|
+
const role = mapRoleForResponses(element.role);
|
|
128
|
+
let textBuffer = "";
|
|
129
|
+
let reasoningIndex = 0;
|
|
130
|
+
const flushTextBuffer = () => {
|
|
131
|
+
if (textBuffer.length > 0) {
|
|
132
|
+
acc.push({ role, content: textBuffer });
|
|
133
|
+
textBuffer = "";
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
for (const part of parts) {
|
|
137
|
+
switch (part.type) {
|
|
138
|
+
case "text":
|
|
139
|
+
textBuffer += part.text;
|
|
140
|
+
break;
|
|
141
|
+
case "reasoning": {
|
|
142
|
+
flushTextBuffer();
|
|
143
|
+
acc.push({
|
|
144
|
+
id: element.id
|
|
145
|
+
? `${element.id}-reasoning-${reasoningIndex}`
|
|
146
|
+
: `reasoning_${reasoningIndex}`,
|
|
147
|
+
type: "reasoning",
|
|
148
|
+
summary: [{ type: "summary_text", text: part.text }],
|
|
149
|
+
});
|
|
150
|
+
reasoningIndex += 1;
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
case "tool-call":
|
|
154
|
+
flushTextBuffer();
|
|
155
|
+
acc.push({
|
|
156
|
+
type: "function_call",
|
|
157
|
+
call_id: part.toolCallId,
|
|
158
|
+
name: part.toolName,
|
|
159
|
+
arguments: safeStringify(part.input),
|
|
160
|
+
});
|
|
161
|
+
break;
|
|
162
|
+
case "tool-result":
|
|
163
|
+
flushTextBuffer();
|
|
164
|
+
acc.push({
|
|
165
|
+
type: "function_call_output",
|
|
166
|
+
call_id: part.toolCallId,
|
|
167
|
+
output: safeStringify(part.output),
|
|
168
|
+
});
|
|
169
|
+
break;
|
|
170
|
+
default:
|
|
171
|
+
// Exhaustive check - all SemanticPart types handled above
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
flushTextBuffer();
|
|
176
|
+
}
|
|
177
|
+
function collectResponseItems(element, acc) {
|
|
178
|
+
switch (element.kind) {
|
|
179
|
+
case "message": {
|
|
180
|
+
collectMessageResponseItems(element, acc);
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
case "reasoning": {
|
|
184
|
+
// Native reasoning support in Responses API
|
|
185
|
+
if (element.text.length > 0) {
|
|
186
|
+
const reasoningItem = {
|
|
187
|
+
id: element.id ?? `rs_${Date.now()}`,
|
|
188
|
+
type: "reasoning",
|
|
189
|
+
summary: [{ type: "summary_text", text: element.text }],
|
|
190
|
+
};
|
|
191
|
+
acc.push(reasoningItem);
|
|
192
|
+
}
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
case "tool-call": {
|
|
196
|
+
const toolCall = {
|
|
197
|
+
type: "function_call",
|
|
198
|
+
call_id: element.toolCallId,
|
|
199
|
+
name: element.toolName,
|
|
200
|
+
arguments: safeStringify(element.input),
|
|
201
|
+
};
|
|
202
|
+
acc.push(toolCall);
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
case "tool-result": {
|
|
206
|
+
const toolResult = {
|
|
207
|
+
type: "function_call_output",
|
|
208
|
+
call_id: element.toolCallId,
|
|
209
|
+
output: safeStringify(element.output),
|
|
210
|
+
};
|
|
211
|
+
acc.push(toolResult);
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
default: {
|
|
215
|
+
// Recurse into children for regions without semantic kind
|
|
216
|
+
for (const child of element.children) {
|
|
217
|
+
if (typeof child !== "string") {
|
|
218
|
+
collectResponseItems(child, acc);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
const RESPONSE_ROLE_MAP = {
|
|
225
|
+
system: "system",
|
|
226
|
+
developer: "developer",
|
|
227
|
+
user: "user",
|
|
228
|
+
};
|
|
229
|
+
function mapRoleForResponses(role) {
|
|
230
|
+
return RESPONSE_ROLE_MAP[role] ?? "assistant";
|
|
231
|
+
}
|
|
232
|
+
const VALID_OPENAI_ROLES = new Set(["user", "assistant", "system"]);
|
|
233
|
+
/**
|
|
234
|
+
* ModelProvider implementation that wraps an OpenAI client.
|
|
235
|
+
* Use this with the DSL's `.provider()` method.
|
|
236
|
+
*
|
|
237
|
+
* @example
|
|
238
|
+
* ```typescript
|
|
239
|
+
* import OpenAI from "openai";
|
|
240
|
+
* import { cria } from "@fastpaca/cria";
|
|
241
|
+
* import { Provider } from "@fastpaca/cria/openai";
|
|
242
|
+
*
|
|
243
|
+
* const client = new OpenAI();
|
|
244
|
+
* const provider = new Provider(client, "gpt-4o");
|
|
245
|
+
*
|
|
246
|
+
* const prompt = cria
|
|
247
|
+
* .prompt()
|
|
248
|
+
* .provider(provider, (p) =>
|
|
249
|
+
* p.summary(content, { id: "summary", store })
|
|
250
|
+
* )
|
|
251
|
+
* .build();
|
|
252
|
+
* ```
|
|
253
|
+
*/
|
|
254
|
+
export class Provider {
|
|
255
|
+
name = "openai";
|
|
256
|
+
client;
|
|
257
|
+
model;
|
|
258
|
+
constructor(client, model) {
|
|
259
|
+
this.client = client;
|
|
260
|
+
this.model = model;
|
|
261
|
+
}
|
|
262
|
+
async completion(request) {
|
|
263
|
+
const messages = request.system
|
|
264
|
+
? [{ role: "system", content: request.system }]
|
|
265
|
+
: [];
|
|
266
|
+
for (const msg of request.messages) {
|
|
267
|
+
if (VALID_OPENAI_ROLES.has(msg.role)) {
|
|
268
|
+
messages.push({ role: msg.role, content: msg.content });
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
const response = await this.client.chat.completions.create({
|
|
272
|
+
model: this.model,
|
|
273
|
+
messages,
|
|
274
|
+
});
|
|
275
|
+
const text = response.choices[0]?.message?.content ?? "";
|
|
276
|
+
return { text };
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
export function OpenAIProvider({ client, model, tokenizer, children = [], }) {
|
|
280
|
+
const provider = {
|
|
281
|
+
name: "openai",
|
|
282
|
+
tokenizer: tokenizer ?? tiktokenTokenizer(model),
|
|
283
|
+
async completion(request) {
|
|
284
|
+
const messages = request.system
|
|
285
|
+
? [{ role: "system", content: request.system }]
|
|
286
|
+
: [];
|
|
287
|
+
for (const msg of request.messages) {
|
|
288
|
+
if (VALID_OPENAI_ROLES.has(msg.role)) {
|
|
289
|
+
messages.push({ role: msg.role, content: msg.content });
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
const response = await client.chat.completions.create({
|
|
293
|
+
model,
|
|
294
|
+
messages,
|
|
295
|
+
});
|
|
296
|
+
const text = response.choices[0]?.message?.content ?? "";
|
|
297
|
+
return { text };
|
|
298
|
+
},
|
|
299
|
+
};
|
|
300
|
+
return {
|
|
301
|
+
priority: 0,
|
|
302
|
+
children,
|
|
303
|
+
context: { provider },
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/openai/index.ts"],"names":[],"mappings":"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"}
|
package/dist/render.d.ts
CHANGED
|
@@ -1,44 +1,48 @@
|
|
|
1
|
-
import { type PromptElement, type Tokenizer } from "./types";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { FitError, type MaybePromise, type PromptElement, type PromptRenderer, type Tokenizer } from "./types";
|
|
2
|
+
export interface RenderOptions {
|
|
3
|
+
tokenizer?: Tokenizer;
|
|
4
|
+
/** Token budget. Omit for unlimited. */
|
|
5
|
+
budget?: number;
|
|
6
|
+
renderer?: PromptRenderer<unknown>;
|
|
7
|
+
hooks?: RenderHooks;
|
|
8
|
+
}
|
|
9
|
+
export interface FitStartEvent {
|
|
10
|
+
element: PromptElement;
|
|
7
11
|
budget: number;
|
|
12
|
+
totalTokens: number;
|
|
13
|
+
}
|
|
14
|
+
export interface FitIterationEvent {
|
|
15
|
+
iteration: number;
|
|
16
|
+
priority: number;
|
|
17
|
+
totalTokens: number;
|
|
18
|
+
}
|
|
19
|
+
export interface StrategyAppliedEvent {
|
|
20
|
+
target: PromptElement;
|
|
21
|
+
result: PromptElement | null;
|
|
22
|
+
priority: number;
|
|
23
|
+
iteration: number;
|
|
24
|
+
}
|
|
25
|
+
export interface FitCompleteEvent {
|
|
26
|
+
result: PromptElement | null;
|
|
27
|
+
iterations: number;
|
|
28
|
+
totalTokens: number;
|
|
29
|
+
}
|
|
30
|
+
export interface FitErrorEvent {
|
|
31
|
+
error: FitError;
|
|
32
|
+
iteration: number;
|
|
33
|
+
priority: number;
|
|
34
|
+
totalTokens: number;
|
|
35
|
+
}
|
|
36
|
+
export interface RenderHooks {
|
|
37
|
+
onFitStart?: (event: FitStartEvent) => MaybePromise<void>;
|
|
38
|
+
onFitIteration?: (event: FitIterationEvent) => MaybePromise<void>;
|
|
39
|
+
onStrategyApplied?: (event: StrategyAppliedEvent) => MaybePromise<void>;
|
|
40
|
+
onFitComplete?: (event: FitCompleteEvent) => MaybePromise<void>;
|
|
41
|
+
onFitError?: (event: FitErrorEvent) => MaybePromise<void>;
|
|
8
42
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* that fits within the specified token budget.
|
|
14
|
-
*
|
|
15
|
-
* **Pipeline:**
|
|
16
|
-
* 1. `flatten`: Walks the tree, collects text into ordered PromptFragment[]
|
|
17
|
-
* 2. `fitToBudget`: Applies strategies starting from lowest priority until under budget
|
|
18
|
-
* 3. `join`: Concatenates fragment content into final string
|
|
19
|
-
*
|
|
20
|
-
* @param element - The root PromptElement (from JSX)
|
|
21
|
-
* @param options - Tokenizer and budget configuration
|
|
22
|
-
* @returns The fitted prompt string
|
|
23
|
-
* @throws {FitError} When the prompt cannot fit within budget
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```tsx
|
|
27
|
-
* import { render, Region, Omit } from "@fastpaca/cria";
|
|
28
|
-
*
|
|
29
|
-
* const prompt = (
|
|
30
|
-
* <Region priority={0}>
|
|
31
|
-
* System prompt
|
|
32
|
-
* <Omit priority={2}>Optional context</Omit>
|
|
33
|
-
* </Region>
|
|
34
|
-
* );
|
|
35
|
-
*
|
|
36
|
-
* const result = render(prompt, {
|
|
37
|
-
* tokenizer: (text) => Math.ceil(text.length / 4),
|
|
38
|
-
* budget: 1000,
|
|
39
|
-
* });
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
|
-
export declare function render(element: PromptElement, { tokenizer, budget }: RenderOptions): string;
|
|
43
|
+
type RenderOutput<TOptions extends RenderOptions> = TOptions extends {
|
|
44
|
+
renderer: PromptRenderer<infer TOutput>;
|
|
45
|
+
} ? TOutput : string;
|
|
46
|
+
export declare function render<TOptions extends RenderOptions>(element: MaybePromise<PromptElement>, { tokenizer, budget, renderer, hooks }: TOptions): Promise<RenderOutput<TOptions>>;
|
|
43
47
|
export {};
|
|
44
48
|
//# sourceMappingURL=render.d.ts.map
|
package/dist/render.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,EAEnB,KAAK,SAAS,EACf,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1D,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAClE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IACxE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAChE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED,KAAK,YAAY,CAAC,QAAQ,SAAS,aAAa,IAAI,QAAQ,SAAS;IACnE,QAAQ,EAAE,cAAc,CAAC,MAAM,OAAO,CAAC,CAAC;CACzC,GACG,OAAO,GACP,MAAM,CAAC;AAEX,wBAAsB,MAAM,CAAC,QAAQ,SAAS,aAAa,EACzD,OAAO,EAAE,YAAY,CAAC,aAAa,CAAC,EACpC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,QAAQ,GAC/C,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CA4CjC"}
|