@xom11/whiteboard 0.25.0 → 0.28.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/{ExcalidrawWithMenus-WENZRYYE.mjs → ExcalidrawWithMenus-2QPPTXJM.mjs} +3 -2
- package/dist/ExcalidrawWithMenus-2QPPTXJM.mjs.map +1 -0
- package/dist/ai.d.mts +3035 -108
- package/dist/ai.d.ts +3035 -108
- package/dist/ai.js +6780 -788
- package/dist/ai.js.map +1 -1
- package/dist/ai.mjs +5140 -577
- package/dist/ai.mjs.map +1 -1
- package/dist/catalog.json +5 -5
- package/dist/{chunk-NDEZJKNY.mjs → chunk-5JM35CXV.mjs} +4 -4
- package/dist/{chunk-NDEZJKNY.mjs.map → chunk-5JM35CXV.mjs.map} +1 -1
- package/dist/{chunk-VNCCIV6O.mjs → chunk-AJAHD35N.mjs} +779 -9
- package/dist/chunk-AJAHD35N.mjs.map +1 -0
- package/dist/{chunk-M42TGYT6.mjs → chunk-BNBOIDO5.mjs} +3 -3
- package/dist/{chunk-M42TGYT6.mjs.map → chunk-BNBOIDO5.mjs.map} +1 -1
- package/dist/{chunk-ONBCUWVI.mjs → chunk-BU5KLO3P.mjs} +3 -3
- package/dist/{chunk-ONBCUWVI.mjs.map → chunk-BU5KLO3P.mjs.map} +1 -1
- package/dist/{chunk-CJBLJUWG.mjs → chunk-CXHNVYMD.mjs} +4 -4
- package/dist/{chunk-CJBLJUWG.mjs.map → chunk-CXHNVYMD.mjs.map} +1 -1
- package/dist/chunk-H22OZYTW.mjs +265 -0
- package/dist/chunk-H22OZYTW.mjs.map +1 -0
- package/dist/chunk-J5LGTIGS.mjs +10 -0
- package/dist/chunk-J5LGTIGS.mjs.map +1 -0
- package/dist/{chunk-TB4CL25L.mjs → chunk-OQIQNKPQ.mjs} +206 -66
- package/dist/chunk-OQIQNKPQ.mjs.map +1 -0
- package/dist/{chunk-SGFJLHHG.mjs → chunk-PPKHCRRE.mjs} +3 -3
- package/dist/{chunk-SGFJLHHG.mjs.map → chunk-PPKHCRRE.mjs.map} +1 -1
- package/dist/{chunk-YSJOVBCD.mjs → chunk-QCZVFEN4.mjs} +4 -4
- package/dist/{chunk-YSJOVBCD.mjs.map → chunk-QCZVFEN4.mjs.map} +1 -1
- package/dist/{chunk-ESVPQWHX.mjs → chunk-QRUAEXLR.mjs} +5 -5
- package/dist/{chunk-ESVPQWHX.mjs.map → chunk-QRUAEXLR.mjs.map} +1 -1
- package/dist/{chunk-AYSFWUPK.mjs → chunk-SZDAS7LK.mjs} +79 -2
- package/dist/chunk-SZDAS7LK.mjs.map +1 -0
- package/dist/chunk-T3SOHYB2.mjs +851 -0
- package/dist/chunk-T3SOHYB2.mjs.map +1 -0
- package/dist/{chunk-I24QOHPU.mjs → chunk-V3YJ6JFL.mjs} +3 -3
- package/dist/{chunk-I24QOHPU.mjs.map → chunk-V3YJ6JFL.mjs.map} +1 -1
- package/dist/{chunk-REIJZDVZ.mjs → chunk-ZTQBUKLJ.mjs} +960 -196
- package/dist/chunk-ZTQBUKLJ.mjs.map +1 -0
- package/dist/geometry-2d.d.mts +1 -1
- package/dist/geometry-2d.d.ts +1 -1
- package/dist/geometry-2d.js +5521 -1384
- package/dist/geometry-2d.js.map +1 -1
- package/dist/geometry-2d.mjs +5 -4
- package/dist/geometry-3d.d.mts +1 -1
- package/dist/geometry-3d.d.ts +1 -1
- package/dist/geometry-3d.js +1351 -252
- package/dist/geometry-3d.js.map +1 -1
- package/dist/geometry-3d.mjs +4 -3
- package/dist/graph-2d.d.mts +1 -1
- package/dist/graph-2d.d.ts +1 -1
- package/dist/graph-2d.js +1517 -341
- package/dist/graph-2d.js.map +1 -1
- package/dist/graph-2d.mjs +7 -6
- package/dist/handleExtractProblem-C-U5KluK.d.mts +158 -0
- package/dist/handleExtractProblem-C-U5KluK.d.ts +158 -0
- package/dist/{host-A64ITWVX.mjs → host-2ISGVO7O.mjs} +6 -5
- package/dist/host-2ISGVO7O.mjs.map +1 -0
- package/dist/{host-L7FMFZUW.mjs → host-4P766V4J.mjs} +1363 -463
- package/dist/host-4P766V4J.mjs.map +1 -0
- package/dist/{host-QK53UYMD.mjs → host-HOSJHQ5H.mjs} +10 -9
- package/dist/host-HOSJHQ5H.mjs.map +1 -0
- package/dist/{host-QS2EOTRJ.mjs → host-ZQCDAT6O.mjs} +3 -2
- package/dist/host-ZQCDAT6O.mjs.map +1 -0
- package/dist/index.d.mts +10 -4
- package/dist/index.d.ts +10 -4
- package/dist/index.js +5746 -1603
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +26 -22
- package/dist/index.mjs.map +1 -1
- package/dist/latex.d.mts +1 -1
- package/dist/latex.d.ts +1 -1
- package/dist/latex.mjs +2 -1
- package/dist/render-ZX2O2IK7.mjs +10 -0
- package/dist/{render-3WTY7NZB.mjs.map → render-ZX2O2IK7.mjs.map} +1 -1
- package/dist/serialize-N4G6RFBB.mjs +9 -0
- package/dist/{serialize-SRJVKYUG.mjs.map → serialize-N4G6RFBB.mjs.map} +1 -1
- package/dist/{types-DWRyCa2m.d.ts → types-BHYC2Fiw.d.mts} +130 -1
- package/dist/{types-DWRyCa2m.d.mts → types-BHYC2Fiw.d.ts} +130 -1
- package/package.json +10 -1
- package/dist/ExcalidrawWithMenus-WENZRYYE.mjs.map +0 -1
- package/dist/chunk-AYSFWUPK.mjs.map +0 -1
- package/dist/chunk-REIJZDVZ.mjs.map +0 -1
- package/dist/chunk-TB4CL25L.mjs.map +0 -1
- package/dist/chunk-VNCCIV6O.mjs.map +0 -1
- package/dist/chunk-VRHWDZ66.mjs +0 -96
- package/dist/chunk-VRHWDZ66.mjs.map +0 -1
- package/dist/host-A64ITWVX.mjs.map +0 -1
- package/dist/host-L7FMFZUW.mjs.map +0 -1
- package/dist/host-QK53UYMD.mjs.map +0 -1
- package/dist/host-QS2EOTRJ.mjs.map +0 -1
- package/dist/render-3WTY7NZB.mjs +0 -9
- package/dist/serialize-SRJVKYUG.mjs +0 -8
package/dist/graph-2d.mjs
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { graph2dStamp } from './chunk-
|
|
3
|
-
import './chunk-
|
|
2
|
+
export { graph2dStamp } from './chunk-QRUAEXLR.mjs';
|
|
3
|
+
import './chunk-CXHNVYMD.mjs';
|
|
4
4
|
import './chunk-O4WIZFRQ.mjs';
|
|
5
|
-
import './chunk-
|
|
6
|
-
import './chunk-
|
|
7
|
-
import './chunk-
|
|
5
|
+
import './chunk-BNBOIDO5.mjs';
|
|
6
|
+
import './chunk-V3YJ6JFL.mjs';
|
|
7
|
+
import './chunk-SZDAS7LK.mjs';
|
|
8
8
|
import './chunk-ICR4CVOE.mjs';
|
|
9
|
-
import './chunk-
|
|
9
|
+
import './chunk-ZTQBUKLJ.mjs';
|
|
10
10
|
import './chunk-IHUFOV7L.mjs';
|
|
11
11
|
import './chunk-73Q7ADVL.mjs';
|
|
12
12
|
import './chunk-B4NJJZFR.mjs';
|
|
13
13
|
import './chunk-5UTGXHLJ.mjs';
|
|
14
|
+
import './chunk-J5LGTIGS.mjs';
|
|
14
15
|
//# sourceMappingURL=graph-2d.mjs.map
|
|
15
16
|
//# sourceMappingURL=graph-2d.mjs.map
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
interface ProviderTokenUsage {
|
|
2
|
+
inputTokens: number;
|
|
3
|
+
outputTokens: number;
|
|
4
|
+
/** Anthropic prompt caching — local provider để 0. */
|
|
5
|
+
cacheReadTokens?: number;
|
|
6
|
+
/** Anthropic prompt caching — local provider để 0. */
|
|
7
|
+
cacheCreationTokens?: number;
|
|
8
|
+
}
|
|
9
|
+
interface ProviderRequest {
|
|
10
|
+
systemPrompt: string;
|
|
11
|
+
userPrompt: string;
|
|
12
|
+
/**
|
|
13
|
+
* JSON Schema mà provider phải honor để constrain output. Anthropic → wrap
|
|
14
|
+
* thành tool input_schema. Ollama → pass thẳng vào `format` (v0.5+).
|
|
15
|
+
*/
|
|
16
|
+
schema: Record<string, unknown>;
|
|
17
|
+
/** Provider-specific model id (vd "gemma3:4b", "claude-opus-4-7"). */
|
|
18
|
+
model: string;
|
|
19
|
+
/** Token cap cho response. */
|
|
20
|
+
maxTokens: number;
|
|
21
|
+
signal?: AbortSignal;
|
|
22
|
+
/**
|
|
23
|
+
* Optional callback nhận text chunk khi provider stream incremental output.
|
|
24
|
+
* Provider không stream được (Anthropic tool_use, Claude CLI) → không gọi.
|
|
25
|
+
* Caller dùng để cập nhật UI progress (token count).
|
|
26
|
+
*/
|
|
27
|
+
onToken?: (chunk: string) => void;
|
|
28
|
+
}
|
|
29
|
+
type ProviderOutput = {
|
|
30
|
+
kind: 'json';
|
|
31
|
+
data: unknown;
|
|
32
|
+
usage?: ProviderTokenUsage;
|
|
33
|
+
} | {
|
|
34
|
+
kind: 'error';
|
|
35
|
+
message: string;
|
|
36
|
+
status?: number;
|
|
37
|
+
};
|
|
38
|
+
interface AIProvider {
|
|
39
|
+
/** Tên định danh ("anthropic", "ollama", ...). */
|
|
40
|
+
readonly name: string;
|
|
41
|
+
/** Default model id khi caller không truyền. */
|
|
42
|
+
readonly defaultModel: string;
|
|
43
|
+
call(req: ProviderRequest): Promise<ProviderOutput>;
|
|
44
|
+
/**
|
|
45
|
+
* Optional vision capability. Provider không impl → caller check undefined
|
|
46
|
+
* trước khi gọi (façade trả error code='unsupported').
|
|
47
|
+
*/
|
|
48
|
+
extractText?(req: VisionRequest): Promise<ProviderOutput>;
|
|
49
|
+
}
|
|
50
|
+
interface ImagePart {
|
|
51
|
+
/** Whitelist 3 format browser decode native được. */
|
|
52
|
+
mediaType: 'image/png' | 'image/jpeg' | 'image/webp';
|
|
53
|
+
/** Base64 không bao gồm "data:image/...;base64," prefix. */
|
|
54
|
+
base64: string;
|
|
55
|
+
}
|
|
56
|
+
interface VisionRequest {
|
|
57
|
+
systemPrompt: string;
|
|
58
|
+
userPrompt: string;
|
|
59
|
+
/** JSON Schema constraint output. */
|
|
60
|
+
schema: Record<string, unknown>;
|
|
61
|
+
/** v1 luôn length 1; array để forward-compat multi-image. */
|
|
62
|
+
images: ImagePart[];
|
|
63
|
+
/** Optional override; nếu omit, provider tự chọn vision-capable default. */
|
|
64
|
+
model?: string;
|
|
65
|
+
maxTokens: number;
|
|
66
|
+
signal?: AbortSignal;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
interface SelectProviderOptions {
|
|
70
|
+
/** Provider instance dùng trực tiếp (override mọi env). */
|
|
71
|
+
provider?: AIProvider;
|
|
72
|
+
/** Anthropic API key. Khi truyền → auto chọn AnthropicProvider. */
|
|
73
|
+
apiKey?: string;
|
|
74
|
+
/** Anthropic prompt-caching, default true (chỉ áp dụng provider Anthropic). */
|
|
75
|
+
enableCaching?: boolean;
|
|
76
|
+
/** Ollama endpoint override. */
|
|
77
|
+
ollamaBaseUrl?: string;
|
|
78
|
+
/** Ollama model override (vd "gemma3:1b"). */
|
|
79
|
+
ollamaDefaultModel?: string;
|
|
80
|
+
/** Claude CLI binary path override (default 'claude'). */
|
|
81
|
+
claudeCliBin?: string;
|
|
82
|
+
/** Claude CLI default model override. */
|
|
83
|
+
claudeCliDefaultModel?: string;
|
|
84
|
+
/** Claude CLI max budget USD per call override. */
|
|
85
|
+
claudeCliMaxBudgetUsd?: number;
|
|
86
|
+
/** Claude Agent SDK OAuth token (subscription path). Fallback env CLAUDE_CODE_OAUTH_TOKEN. */
|
|
87
|
+
claudeAgentSdkOauthToken?: string;
|
|
88
|
+
/** Claude Agent SDK default model. */
|
|
89
|
+
claudeAgentSdkDefaultModel?: string;
|
|
90
|
+
/** Test env: env vars getter (default process.env). */
|
|
91
|
+
env?: Record<string, string | undefined>;
|
|
92
|
+
}
|
|
93
|
+
declare function selectProvider(opts?: SelectProviderOptions): AIProvider;
|
|
94
|
+
|
|
95
|
+
type VisionEngine = 'tesseract' | 'llm';
|
|
96
|
+
interface ExtractProblemOptions extends SelectProviderOptions {
|
|
97
|
+
/** OCR engine. Default 'tesseract' (client-side, không cần network). */
|
|
98
|
+
engine?: VisionEngine;
|
|
99
|
+
/** Tesseract language (chỉ áp dụng khi engine='tesseract'). Default 'vie+eng'. */
|
|
100
|
+
tesseractLang?: string;
|
|
101
|
+
/** Override model OCR cho LLM path. Priority cao hơn env. */
|
|
102
|
+
visionModel?: string;
|
|
103
|
+
/** Max tokens cho LLM response. Default 1024. */
|
|
104
|
+
maxTokens?: number;
|
|
105
|
+
/** Env getter override (cho test). */
|
|
106
|
+
env?: Record<string, string | undefined>;
|
|
107
|
+
signal?: AbortSignal;
|
|
108
|
+
}
|
|
109
|
+
interface ExtractProblemSuccess {
|
|
110
|
+
ok: true;
|
|
111
|
+
text: string;
|
|
112
|
+
confidence: 'high' | 'low';
|
|
113
|
+
usage: {
|
|
114
|
+
inputTokens: number;
|
|
115
|
+
outputTokens: number;
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
interface ExtractProblemFailure {
|
|
119
|
+
ok: false;
|
|
120
|
+
reason: 'not-math' | 'unreadable' | 'empty' | 'unsupported';
|
|
121
|
+
message: string;
|
|
122
|
+
}
|
|
123
|
+
type ExtractProblemOutcome = ExtractProblemSuccess | ExtractProblemFailure;
|
|
124
|
+
/** Pick vision model theo priority: opts → env → provider.defaultModel. */
|
|
125
|
+
declare function pickVisionModel(providerDefault: string, opts: {
|
|
126
|
+
visionModel?: string;
|
|
127
|
+
}, env: Record<string, string | undefined>): string;
|
|
128
|
+
declare function extractProblemFromImage(image: ImagePart, opts?: ExtractProblemOptions): Promise<ExtractProblemOutcome>;
|
|
129
|
+
|
|
130
|
+
interface HandleExtractProblemOptions extends ExtractProblemOptions {
|
|
131
|
+
}
|
|
132
|
+
type ExtractUiResult = {
|
|
133
|
+
kind: 'success';
|
|
134
|
+
text: string;
|
|
135
|
+
usage: {
|
|
136
|
+
inputTokens: number;
|
|
137
|
+
outputTokens: number;
|
|
138
|
+
};
|
|
139
|
+
} | {
|
|
140
|
+
kind: 'low-confidence';
|
|
141
|
+
text: string;
|
|
142
|
+
warning: string;
|
|
143
|
+
usage: {
|
|
144
|
+
inputTokens: number;
|
|
145
|
+
outputTokens: number;
|
|
146
|
+
};
|
|
147
|
+
} | {
|
|
148
|
+
kind: 'refused';
|
|
149
|
+
reason: 'not-math';
|
|
150
|
+
message: string;
|
|
151
|
+
} | {
|
|
152
|
+
kind: 'error';
|
|
153
|
+
code: 'network' | 'unsupported' | 'unexpected' | 'empty';
|
|
154
|
+
message: string;
|
|
155
|
+
};
|
|
156
|
+
declare function handleExtractProblem(image: ImagePart, opts?: HandleExtractProblemOptions): Promise<ExtractUiResult>;
|
|
157
|
+
|
|
158
|
+
export { type AIProvider as A, type ExtractUiResult as E, type HandleExtractProblemOptions as H, type ImagePart as I, type ProviderRequest as P, type SelectProviderOptions as S, type VisionRequest as V, type ProviderOutput as a, type ExtractProblemFailure as b, type ExtractProblemOptions as c, type ExtractProblemOutcome as d, type ExtractProblemSuccess as e, type ProviderTokenUsage as f, extractProblemFromImage as g, handleExtractProblem as h, pickVisionModel as p, selectProvider as s };
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
interface ProviderTokenUsage {
|
|
2
|
+
inputTokens: number;
|
|
3
|
+
outputTokens: number;
|
|
4
|
+
/** Anthropic prompt caching — local provider để 0. */
|
|
5
|
+
cacheReadTokens?: number;
|
|
6
|
+
/** Anthropic prompt caching — local provider để 0. */
|
|
7
|
+
cacheCreationTokens?: number;
|
|
8
|
+
}
|
|
9
|
+
interface ProviderRequest {
|
|
10
|
+
systemPrompt: string;
|
|
11
|
+
userPrompt: string;
|
|
12
|
+
/**
|
|
13
|
+
* JSON Schema mà provider phải honor để constrain output. Anthropic → wrap
|
|
14
|
+
* thành tool input_schema. Ollama → pass thẳng vào `format` (v0.5+).
|
|
15
|
+
*/
|
|
16
|
+
schema: Record<string, unknown>;
|
|
17
|
+
/** Provider-specific model id (vd "gemma3:4b", "claude-opus-4-7"). */
|
|
18
|
+
model: string;
|
|
19
|
+
/** Token cap cho response. */
|
|
20
|
+
maxTokens: number;
|
|
21
|
+
signal?: AbortSignal;
|
|
22
|
+
/**
|
|
23
|
+
* Optional callback nhận text chunk khi provider stream incremental output.
|
|
24
|
+
* Provider không stream được (Anthropic tool_use, Claude CLI) → không gọi.
|
|
25
|
+
* Caller dùng để cập nhật UI progress (token count).
|
|
26
|
+
*/
|
|
27
|
+
onToken?: (chunk: string) => void;
|
|
28
|
+
}
|
|
29
|
+
type ProviderOutput = {
|
|
30
|
+
kind: 'json';
|
|
31
|
+
data: unknown;
|
|
32
|
+
usage?: ProviderTokenUsage;
|
|
33
|
+
} | {
|
|
34
|
+
kind: 'error';
|
|
35
|
+
message: string;
|
|
36
|
+
status?: number;
|
|
37
|
+
};
|
|
38
|
+
interface AIProvider {
|
|
39
|
+
/** Tên định danh ("anthropic", "ollama", ...). */
|
|
40
|
+
readonly name: string;
|
|
41
|
+
/** Default model id khi caller không truyền. */
|
|
42
|
+
readonly defaultModel: string;
|
|
43
|
+
call(req: ProviderRequest): Promise<ProviderOutput>;
|
|
44
|
+
/**
|
|
45
|
+
* Optional vision capability. Provider không impl → caller check undefined
|
|
46
|
+
* trước khi gọi (façade trả error code='unsupported').
|
|
47
|
+
*/
|
|
48
|
+
extractText?(req: VisionRequest): Promise<ProviderOutput>;
|
|
49
|
+
}
|
|
50
|
+
interface ImagePart {
|
|
51
|
+
/** Whitelist 3 format browser decode native được. */
|
|
52
|
+
mediaType: 'image/png' | 'image/jpeg' | 'image/webp';
|
|
53
|
+
/** Base64 không bao gồm "data:image/...;base64," prefix. */
|
|
54
|
+
base64: string;
|
|
55
|
+
}
|
|
56
|
+
interface VisionRequest {
|
|
57
|
+
systemPrompt: string;
|
|
58
|
+
userPrompt: string;
|
|
59
|
+
/** JSON Schema constraint output. */
|
|
60
|
+
schema: Record<string, unknown>;
|
|
61
|
+
/** v1 luôn length 1; array để forward-compat multi-image. */
|
|
62
|
+
images: ImagePart[];
|
|
63
|
+
/** Optional override; nếu omit, provider tự chọn vision-capable default. */
|
|
64
|
+
model?: string;
|
|
65
|
+
maxTokens: number;
|
|
66
|
+
signal?: AbortSignal;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
interface SelectProviderOptions {
|
|
70
|
+
/** Provider instance dùng trực tiếp (override mọi env). */
|
|
71
|
+
provider?: AIProvider;
|
|
72
|
+
/** Anthropic API key. Khi truyền → auto chọn AnthropicProvider. */
|
|
73
|
+
apiKey?: string;
|
|
74
|
+
/** Anthropic prompt-caching, default true (chỉ áp dụng provider Anthropic). */
|
|
75
|
+
enableCaching?: boolean;
|
|
76
|
+
/** Ollama endpoint override. */
|
|
77
|
+
ollamaBaseUrl?: string;
|
|
78
|
+
/** Ollama model override (vd "gemma3:1b"). */
|
|
79
|
+
ollamaDefaultModel?: string;
|
|
80
|
+
/** Claude CLI binary path override (default 'claude'). */
|
|
81
|
+
claudeCliBin?: string;
|
|
82
|
+
/** Claude CLI default model override. */
|
|
83
|
+
claudeCliDefaultModel?: string;
|
|
84
|
+
/** Claude CLI max budget USD per call override. */
|
|
85
|
+
claudeCliMaxBudgetUsd?: number;
|
|
86
|
+
/** Claude Agent SDK OAuth token (subscription path). Fallback env CLAUDE_CODE_OAUTH_TOKEN. */
|
|
87
|
+
claudeAgentSdkOauthToken?: string;
|
|
88
|
+
/** Claude Agent SDK default model. */
|
|
89
|
+
claudeAgentSdkDefaultModel?: string;
|
|
90
|
+
/** Test env: env vars getter (default process.env). */
|
|
91
|
+
env?: Record<string, string | undefined>;
|
|
92
|
+
}
|
|
93
|
+
declare function selectProvider(opts?: SelectProviderOptions): AIProvider;
|
|
94
|
+
|
|
95
|
+
type VisionEngine = 'tesseract' | 'llm';
|
|
96
|
+
interface ExtractProblemOptions extends SelectProviderOptions {
|
|
97
|
+
/** OCR engine. Default 'tesseract' (client-side, không cần network). */
|
|
98
|
+
engine?: VisionEngine;
|
|
99
|
+
/** Tesseract language (chỉ áp dụng khi engine='tesseract'). Default 'vie+eng'. */
|
|
100
|
+
tesseractLang?: string;
|
|
101
|
+
/** Override model OCR cho LLM path. Priority cao hơn env. */
|
|
102
|
+
visionModel?: string;
|
|
103
|
+
/** Max tokens cho LLM response. Default 1024. */
|
|
104
|
+
maxTokens?: number;
|
|
105
|
+
/** Env getter override (cho test). */
|
|
106
|
+
env?: Record<string, string | undefined>;
|
|
107
|
+
signal?: AbortSignal;
|
|
108
|
+
}
|
|
109
|
+
interface ExtractProblemSuccess {
|
|
110
|
+
ok: true;
|
|
111
|
+
text: string;
|
|
112
|
+
confidence: 'high' | 'low';
|
|
113
|
+
usage: {
|
|
114
|
+
inputTokens: number;
|
|
115
|
+
outputTokens: number;
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
interface ExtractProblemFailure {
|
|
119
|
+
ok: false;
|
|
120
|
+
reason: 'not-math' | 'unreadable' | 'empty' | 'unsupported';
|
|
121
|
+
message: string;
|
|
122
|
+
}
|
|
123
|
+
type ExtractProblemOutcome = ExtractProblemSuccess | ExtractProblemFailure;
|
|
124
|
+
/** Pick vision model theo priority: opts → env → provider.defaultModel. */
|
|
125
|
+
declare function pickVisionModel(providerDefault: string, opts: {
|
|
126
|
+
visionModel?: string;
|
|
127
|
+
}, env: Record<string, string | undefined>): string;
|
|
128
|
+
declare function extractProblemFromImage(image: ImagePart, opts?: ExtractProblemOptions): Promise<ExtractProblemOutcome>;
|
|
129
|
+
|
|
130
|
+
interface HandleExtractProblemOptions extends ExtractProblemOptions {
|
|
131
|
+
}
|
|
132
|
+
type ExtractUiResult = {
|
|
133
|
+
kind: 'success';
|
|
134
|
+
text: string;
|
|
135
|
+
usage: {
|
|
136
|
+
inputTokens: number;
|
|
137
|
+
outputTokens: number;
|
|
138
|
+
};
|
|
139
|
+
} | {
|
|
140
|
+
kind: 'low-confidence';
|
|
141
|
+
text: string;
|
|
142
|
+
warning: string;
|
|
143
|
+
usage: {
|
|
144
|
+
inputTokens: number;
|
|
145
|
+
outputTokens: number;
|
|
146
|
+
};
|
|
147
|
+
} | {
|
|
148
|
+
kind: 'refused';
|
|
149
|
+
reason: 'not-math';
|
|
150
|
+
message: string;
|
|
151
|
+
} | {
|
|
152
|
+
kind: 'error';
|
|
153
|
+
code: 'network' | 'unsupported' | 'unexpected' | 'empty';
|
|
154
|
+
message: string;
|
|
155
|
+
};
|
|
156
|
+
declare function handleExtractProblem(image: ImagePart, opts?: HandleExtractProblemOptions): Promise<ExtractUiResult>;
|
|
157
|
+
|
|
158
|
+
export { type AIProvider as A, type ExtractUiResult as E, type HandleExtractProblemOptions as H, type ImagePart as I, type ProviderRequest as P, type SelectProviderOptions as S, type VisionRequest as V, type ProviderOutput as a, type ExtractProblemFailure as b, type ExtractProblemOptions as c, type ExtractProblemOutcome as d, type ExtractProblemSuccess as e, type ProviderTokenUsage as f, extractProblemFromImage as g, handleExtractProblem as h, pickVisionModel as p, selectProvider as s };
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { VIEW3D_ATTRS, DEFAULT_VIEW3D, GROUND_PLANE_RANGE, GROUND_PLANE_ATTRS, paletteFor, JxgRenderer3D, serializeBoard3D, renderGeometry3DSvgFromState, isGeometry3DCustomData, deserializeBoard3D } from './chunk-
|
|
2
|
+
import { VIEW3D_ATTRS, DEFAULT_VIEW3D, GROUND_PLANE_RANGE, GROUND_PLANE_ATTRS, paletteFor, JxgRenderer3D, serializeBoard3D, renderGeometry3DSvgFromState, isGeometry3DCustomData, deserializeBoard3D } from './chunk-BU5KLO3P.mjs';
|
|
3
3
|
import { useChordShortcut } from './chunk-HNQLZIEP.mjs';
|
|
4
|
-
import { initJxgBoard, attachJxgWheelZoom, ToastHost, STAMP_PANEL_DESKTOP, ToastProvider, useStampStore, StampLeftPanel } from './chunk-
|
|
4
|
+
import { initJxgBoard, attachJxgWheelZoom, ToastHost, STAMP_PANEL_DESKTOP, ToastProvider, useStampStore, StampLeftPanel } from './chunk-OQIQNKPQ.mjs';
|
|
5
5
|
import './chunk-R5FL6S7L.mjs';
|
|
6
6
|
import './chunk-ICR4CVOE.mjs';
|
|
7
|
-
import { useEditorState, nextLabel, listObjects } from './chunk-
|
|
7
|
+
import { useEditorState, nextLabel, listObjects } from './chunk-ZTQBUKLJ.mjs';
|
|
8
8
|
import './chunk-IHUFOV7L.mjs';
|
|
9
9
|
import './chunk-73Q7ADVL.mjs';
|
|
10
10
|
import './chunk-B4NJJZFR.mjs';
|
|
11
11
|
import { useIsMobile } from './chunk-P2AOIF7S.mjs';
|
|
12
12
|
import { insertStampImage } from './chunk-QGNU34T7.mjs';
|
|
13
13
|
import './chunk-5UTGXHLJ.mjs';
|
|
14
|
+
import './chunk-J5LGTIGS.mjs';
|
|
14
15
|
import * as React3 from 'react';
|
|
15
16
|
import { forwardRef, useRef, useState, useCallback, useImperativeHandle } from 'react';
|
|
16
17
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
@@ -2372,5 +2373,5 @@ var Geometry3DStampHost = forwardRef(
|
|
|
2372
2373
|
);
|
|
2373
2374
|
|
|
2374
2375
|
export { Geometry3DStampHost };
|
|
2375
|
-
//# sourceMappingURL=host-
|
|
2376
|
-
//# sourceMappingURL=host-
|
|
2376
|
+
//# sourceMappingURL=host-2ISGVO7O.mjs.map
|
|
2377
|
+
//# sourceMappingURL=host-2ISGVO7O.mjs.map
|