tinyai 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 (66) hide show
  1. package/README.md +302 -0
  2. package/dist/core/client.d.ts +48 -0
  3. package/dist/core/client.d.ts.map +1 -0
  4. package/dist/core/client.js +53 -0
  5. package/dist/core/client.js.map +1 -0
  6. package/dist/core/schema.d.ts +26 -0
  7. package/dist/core/schema.d.ts.map +1 -0
  8. package/dist/core/schema.js +112 -0
  9. package/dist/core/schema.js.map +1 -0
  10. package/dist/core/streaming.d.ts +15 -0
  11. package/dist/core/streaming.d.ts.map +1 -0
  12. package/dist/core/streaming.js +33 -0
  13. package/dist/core/streaming.js.map +1 -0
  14. package/dist/index.d.ts +81 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +60 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/primitives/ask.d.ts +23 -0
  19. package/dist/primitives/ask.d.ts.map +1 -0
  20. package/dist/primitives/ask.js +36 -0
  21. package/dist/primitives/ask.js.map +1 -0
  22. package/dist/primitives/classify.d.ts +18 -0
  23. package/dist/primitives/classify.d.ts.map +1 -0
  24. package/dist/primitives/classify.js +44 -0
  25. package/dist/primitives/classify.js.map +1 -0
  26. package/dist/primitives/embed.d.ts +22 -0
  27. package/dist/primitives/embed.d.ts.map +1 -0
  28. package/dist/primitives/embed.js +37 -0
  29. package/dist/primitives/embed.js.map +1 -0
  30. package/dist/primitives/extract.d.ts +25 -0
  31. package/dist/primitives/extract.d.ts.map +1 -0
  32. package/dist/primitives/extract.js +47 -0
  33. package/dist/primitives/extract.js.map +1 -0
  34. package/dist/primitives/generate.d.ts +26 -0
  35. package/dist/primitives/generate.d.ts.map +1 -0
  36. package/dist/primitives/generate.js +40 -0
  37. package/dist/primitives/generate.js.map +1 -0
  38. package/dist/primitives/summarize.d.ts +30 -0
  39. package/dist/primitives/summarize.d.ts.map +1 -0
  40. package/dist/primitives/summarize.js +43 -0
  41. package/dist/primitives/summarize.js.map +1 -0
  42. package/dist/primitives/translate.d.ts +22 -0
  43. package/dist/primitives/translate.d.ts.map +1 -0
  44. package/dist/primitives/translate.js +36 -0
  45. package/dist/primitives/translate.js.map +1 -0
  46. package/dist/providers/groq.d.ts +18 -0
  47. package/dist/providers/groq.d.ts.map +1 -0
  48. package/dist/providers/groq.js +113 -0
  49. package/dist/providers/groq.js.map +1 -0
  50. package/dist/providers/ollama.d.ts +24 -0
  51. package/dist/providers/ollama.d.ts.map +1 -0
  52. package/dist/providers/ollama.js +123 -0
  53. package/dist/providers/ollama.js.map +1 -0
  54. package/dist/providers/openai.d.ts +12 -0
  55. package/dist/providers/openai.d.ts.map +1 -0
  56. package/dist/providers/openai.js +127 -0
  57. package/dist/providers/openai.js.map +1 -0
  58. package/dist/utils/prompts.d.ts +29 -0
  59. package/dist/utils/prompts.d.ts.map +1 -0
  60. package/dist/utils/prompts.js +29 -0
  61. package/dist/utils/prompts.js.map +1 -0
  62. package/dist/utils/retry.d.ts +10 -0
  63. package/dist/utils/retry.d.ts.map +1 -0
  64. package/dist/utils/retry.js +44 -0
  65. package/dist/utils/retry.js.map +1 -0
  66. package/package.json +74 -0
@@ -0,0 +1,81 @@
1
+ /**
2
+ * TinyAI - The 5KB AI SDK
3
+ * AI utilities that fit in a tweet. Zero dependencies. Just works.
4
+ */
5
+ import { type TinyAIConfig, type TinyAIClient } from './core/client.js';
6
+ import type { SchemaObject, InferSchema } from './core/schema.js';
7
+ export type { TinyAIConfig, TinyAIClient } from './core/client.js';
8
+ export type { SchemaObject, InferSchema } from './core/schema.js';
9
+ export type { SummarizeOptions } from './primitives/summarize.js';
10
+ export type { ClassifyOptions } from './primitives/classify.js';
11
+ export type { ExtractOptions } from './primitives/extract.js';
12
+ export type { TranslateOptions } from './primitives/translate.js';
13
+ export type { AskOptions } from './primitives/ask.js';
14
+ export type { EmbedOptions } from './primitives/embed.js';
15
+ export type { GenerateOptions } from './primitives/generate.js';
16
+ export { summarize, summarizeStream } from './primitives/summarize.js';
17
+ export { classify } from './primitives/classify.js';
18
+ export { extract } from './primitives/extract.js';
19
+ export { translate, translateStream } from './primitives/translate.js';
20
+ export { ask, askStream } from './primitives/ask.js';
21
+ export { embed, cosineSimilarity } from './primitives/embed.js';
22
+ export { generate, generateStream } from './primitives/generate.js';
23
+ export { createClient } from './core/client.js';
24
+ export { toReadableStream, collectStream } from './core/streaming.js';
25
+ /**
26
+ * TinyAI instance with all methods bound
27
+ */
28
+ export interface TinyAI {
29
+ /** Summarize text */
30
+ summarize(text: string, options?: {
31
+ maxLength?: number;
32
+ }): Promise<string>;
33
+ /** Classify text into categories */
34
+ classify<T extends readonly string[]>(text: string, categories: T): Promise<T[number]>;
35
+ /** Extract structured data with type inference */
36
+ extract<T extends SchemaObject>(text: string, schema: T): Promise<InferSchema<T>>;
37
+ /** Translate text to another language */
38
+ translate(text: string, targetLanguage: string): Promise<string>;
39
+ /** Ask a question */
40
+ ask(question: string, options?: {
41
+ context?: string;
42
+ }): Promise<string>;
43
+ /** Generate embeddings */
44
+ embed(text: string): Promise<number[]>;
45
+ /** Low-level text generation */
46
+ generate(prompt: string, options?: {
47
+ system?: string;
48
+ }): Promise<string>;
49
+ /** Streaming versions */
50
+ stream: {
51
+ summarize(text: string, options?: {
52
+ maxLength?: number;
53
+ }): AsyncGenerator<string>;
54
+ translate(text: string, targetLanguage: string): AsyncGenerator<string>;
55
+ ask(question: string, options?: {
56
+ context?: string;
57
+ }): AsyncGenerator<string>;
58
+ generate(prompt: string, options?: {
59
+ system?: string;
60
+ }): AsyncGenerator<string>;
61
+ };
62
+ /** The underlying client */
63
+ client: TinyAIClient;
64
+ }
65
+ /**
66
+ * Creates a TinyAI instance with a fluent API
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * import { tinyai } from 'tinyai';
71
+ *
72
+ * const ai = tinyai({ provider: 'openai', apiKey: '...' });
73
+ *
74
+ * const summary = await ai.summarize(longText);
75
+ * const sentiment = await ai.classify(review, ['positive', 'negative']);
76
+ * const data = await ai.extract(email, { name: 'string', amount: 'number' });
77
+ * ```
78
+ */
79
+ export declare function tinyai(config?: TinyAIConfig): TinyAI;
80
+ export default tinyai;
81
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACnE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,qBAAqB;IACrB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3E,oCAAoC;IACpC,QAAQ,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,EAClC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,CAAC,GACZ,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtB,kDAAkD;IAClD,OAAO,CAAC,CAAC,SAAS,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAElF,yCAAyC;IACzC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjE,qBAAqB;IACrB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvE,0BAA0B;IAC1B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvC,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzE,yBAAyB;IACzB,MAAM,EAAE;QACN,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAClF,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACxE,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;KACjF,CAAC;IAEF,4BAA4B;IAC5B,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,MAAM,GAAE,YAAiB,GAAG,MAAM,CAsBxD;AAGD,eAAe,MAAM,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,60 @@
1
+ /**
2
+ * TinyAI - The 5KB AI SDK
3
+ * AI utilities that fit in a tweet. Zero dependencies. Just works.
4
+ */
5
+ import { createClient, setDefaultClient, } from './core/client.js';
6
+ import { summarize, summarizeStream } from './primitives/summarize.js';
7
+ import { classify } from './primitives/classify.js';
8
+ import { extract } from './primitives/extract.js';
9
+ import { translate, translateStream } from './primitives/translate.js';
10
+ import { ask, askStream } from './primitives/ask.js';
11
+ import { embed } from './primitives/embed.js';
12
+ import { generate, generateStream } from './primitives/generate.js';
13
+ // Re-export standalone functions
14
+ export { summarize, summarizeStream } from './primitives/summarize.js';
15
+ export { classify } from './primitives/classify.js';
16
+ export { extract } from './primitives/extract.js';
17
+ export { translate, translateStream } from './primitives/translate.js';
18
+ export { ask, askStream } from './primitives/ask.js';
19
+ export { embed, cosineSimilarity } from './primitives/embed.js';
20
+ export { generate, generateStream } from './primitives/generate.js';
21
+ export { createClient } from './core/client.js';
22
+ export { toReadableStream, collectStream } from './core/streaming.js';
23
+ /**
24
+ * Creates a TinyAI instance with a fluent API
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * import { tinyai } from 'tinyai';
29
+ *
30
+ * const ai = tinyai({ provider: 'openai', apiKey: '...' });
31
+ *
32
+ * const summary = await ai.summarize(longText);
33
+ * const sentiment = await ai.classify(review, ['positive', 'negative']);
34
+ * const data = await ai.extract(email, { name: 'string', amount: 'number' });
35
+ * ```
36
+ */
37
+ export function tinyai(config = {}) {
38
+ const client = createClient(config);
39
+ // Set as default so standalone functions work
40
+ setDefaultClient(client);
41
+ return {
42
+ summarize: (text, options) => summarize(text, { ...options, client }),
43
+ classify: (text, categories) => classify(text, categories, { client }),
44
+ extract: (text, schema) => extract(text, schema, { client }),
45
+ translate: (text, lang) => translate(text, lang, { client }),
46
+ ask: (question, options) => ask(question, { ...options, client }),
47
+ embed: (text) => embed(text, { client }),
48
+ generate: (prompt, options) => generate(prompt, { ...options, client }),
49
+ stream: {
50
+ summarize: (text, options) => summarizeStream(text, { ...options, client }),
51
+ translate: (text, lang) => translateStream(text, lang, { client }),
52
+ ask: (question, options) => askStream(question, { ...options, client }),
53
+ generate: (prompt, options) => generateStream(prompt, { ...options, client }),
54
+ },
55
+ client,
56
+ };
57
+ }
58
+ // Default export
59
+ export default tinyai;
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * ask() - Simple Q&A
3
+ */
4
+ import type { TinyAIClient } from '../core/client.js';
5
+ export interface AskOptions {
6
+ context?: string;
7
+ client?: TinyAIClient;
8
+ }
9
+ /**
10
+ * Asks a question and gets an answer
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * const answer = await ask("What's the capital of France?");
15
+ * const specific = await ask("What's the price?", { context: invoiceText });
16
+ * ```
17
+ */
18
+ export declare function ask(question: string, options?: AskOptions): Promise<string>;
19
+ /**
20
+ * Asks a question with streaming response
21
+ */
22
+ export declare function askStream(question: string, options?: AskOptions): AsyncGenerator<string, void, unknown>;
23
+ //# sourceMappingURL=ask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../src/primitives/ask.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKtD,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,GAAG,CACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED;;GAEG;AACH,wBAAuB,SAAS,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,UAAe,GACvB,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAQvC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * ask() - Simple Q&A
3
+ */
4
+ import { getDefaultClient } from '../core/client.js';
5
+ import { PROMPTS } from '../utils/prompts.js';
6
+ import { withRetry } from '../utils/retry.js';
7
+ /**
8
+ * Asks a question and gets an answer
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const answer = await ask("What's the capital of France?");
13
+ * const specific = await ask("What's the price?", { context: invoiceText });
14
+ * ```
15
+ */
16
+ export async function ask(question, options = {}) {
17
+ const client = options.client ?? getDefaultClient();
18
+ const prompt = PROMPTS.ask(question, options.context);
19
+ const response = await withRetry(() => client.provider.chat([
20
+ { role: 'system', content: prompt.system },
21
+ { role: 'user', content: prompt.user },
22
+ ]));
23
+ return response.content.trim();
24
+ }
25
+ /**
26
+ * Asks a question with streaming response
27
+ */
28
+ export async function* askStream(question, options = {}) {
29
+ const client = options.client ?? getDefaultClient();
30
+ const prompt = PROMPTS.ask(question, options.context);
31
+ yield* client.provider.chatStream([
32
+ { role: 'system', content: prompt.system },
33
+ { role: 'user', content: prompt.user },
34
+ ]);
35
+ }
36
+ //# sourceMappingURL=ask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/primitives/ask.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAO9C;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,QAAgB,EAChB,UAAsB,EAAE;IAExB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CACpC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;KACvC,CAAC,CACH,CAAC;IAEF,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,SAAS,CAC9B,QAAgB,EAChB,UAAsB,EAAE;IAExB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtD,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;KACvC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * classify() - Classify text into categories
3
+ */
4
+ import type { TinyAIClient } from '../core/client.js';
5
+ export interface ClassifyOptions {
6
+ client?: TinyAIClient;
7
+ }
8
+ /**
9
+ * Classifies text into one of the provided categories
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const sentiment = await classify(review, ['positive', 'negative', 'neutral']);
14
+ * const category = await classify(email, ['urgent', 'normal', 'spam']);
15
+ * ```
16
+ */
17
+ export declare function classify<T extends readonly string[]>(text: string, categories: T, options?: ClassifyOptions): Promise<T[number]>;
18
+ //# sourceMappingURL=classify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/primitives/classify.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKtD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,EACxD,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,CAAC,EACb,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAsCpB"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * classify() - Classify text into categories
3
+ */
4
+ import { getDefaultClient } from '../core/client.js';
5
+ import { PROMPTS } from '../utils/prompts.js';
6
+ import { withRetry } from '../utils/retry.js';
7
+ /**
8
+ * Classifies text into one of the provided categories
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const sentiment = await classify(review, ['positive', 'negative', 'neutral']);
13
+ * const category = await classify(email, ['urgent', 'normal', 'spam']);
14
+ * ```
15
+ */
16
+ export async function classify(text, categories, options = {}) {
17
+ if (categories.length < 2) {
18
+ throw new Error('At least 2 categories required');
19
+ }
20
+ const client = options.client ?? getDefaultClient();
21
+ const prompt = PROMPTS.classify(text, categories);
22
+ const response = await withRetry(() => client.provider.chat([
23
+ { role: 'system', content: prompt.system },
24
+ { role: 'user', content: prompt.user },
25
+ ]));
26
+ const result = response.content.trim().toLowerCase();
27
+ // Find the best matching category
28
+ const normalizedCategories = categories.map((c) => c.toLowerCase());
29
+ const exactMatch = normalizedCategories.find((c) => c === result || result.includes(c));
30
+ if (exactMatch) {
31
+ const index = normalizedCategories.indexOf(exactMatch);
32
+ return categories[index];
33
+ }
34
+ // If no exact match, return the first category mentioned
35
+ for (const category of categories) {
36
+ if (result.includes(category.toLowerCase())) {
37
+ return category;
38
+ }
39
+ }
40
+ // Fallback: return first category (shouldn't happen with good prompts)
41
+ console.warn(`TinyAI: Unexpected classify response "${result}", using first category`);
42
+ return categories[0];
43
+ }
44
+ //# sourceMappingURL=classify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/primitives/classify.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAM9C;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,UAAa,EACb,UAA2B,EAAE;IAE7B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CACpC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;KACvC,CAAC,CACH,CAAC;IAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErD,kCAAkC;IAClC,MAAM,oBAAoB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC1C,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACvD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,yDAAyD;IACzD,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC5C,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,OAAO,CAAC,IAAI,CAAC,yCAAyC,MAAM,yBAAyB,CAAC,CAAC;IACvF,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * embed() - Generate text embeddings
3
+ */
4
+ import type { TinyAIClient } from '../core/client.js';
5
+ export interface EmbedOptions {
6
+ client?: TinyAIClient;
7
+ }
8
+ /**
9
+ * Generates an embedding vector for text
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const embedding = await embed("Hello, world!");
14
+ * // embedding is number[] with 1536 dimensions (OpenAI)
15
+ * ```
16
+ */
17
+ export declare function embed(text: string, options?: EmbedOptions): Promise<number[]>;
18
+ /**
19
+ * Computes cosine similarity between two embeddings
20
+ */
21
+ export declare function cosineSimilarity(a: number[], b: number[]): number;
22
+ //# sourceMappingURL=embed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/primitives/embed.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,KAAK,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,MAAM,EAAE,CAAC,CAMnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAgBjE"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * embed() - Generate text embeddings
3
+ */
4
+ import { getDefaultClient } from '../core/client.js';
5
+ import { withRetry } from '../utils/retry.js';
6
+ /**
7
+ * Generates an embedding vector for text
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const embedding = await embed("Hello, world!");
12
+ * // embedding is number[] with 1536 dimensions (OpenAI)
13
+ * ```
14
+ */
15
+ export async function embed(text, options = {}) {
16
+ const client = options.client ?? getDefaultClient();
17
+ const response = await withRetry(() => client.provider.embed(text));
18
+ return response.embedding;
19
+ }
20
+ /**
21
+ * Computes cosine similarity between two embeddings
22
+ */
23
+ export function cosineSimilarity(a, b) {
24
+ if (a.length !== b.length) {
25
+ throw new Error('Embeddings must have same length');
26
+ }
27
+ let dotProduct = 0;
28
+ let normA = 0;
29
+ let normB = 0;
30
+ for (let i = 0; i < a.length; i++) {
31
+ dotProduct += a[i] * b[i];
32
+ normA += a[i] * a[i];
33
+ normB += b[i] * b[i];
34
+ }
35
+ return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
36
+ }
37
+ //# sourceMappingURL=embed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/primitives/embed.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAM9C;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,IAAY,EACZ,UAAwB,EAAE;IAE1B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;IAEpD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpE,OAAO,QAAQ,CAAC,SAAS,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAW,EAAE,CAAW;IACvD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * extract() - Extract structured data from text
3
+ * The crown jewel of TinyAI - Zod-like type inference without dependencies
4
+ */
5
+ import type { TinyAIClient } from '../core/client.js';
6
+ import { type SchemaObject, type InferSchema } from '../core/schema.js';
7
+ export interface ExtractOptions {
8
+ client?: TinyAIClient;
9
+ }
10
+ /**
11
+ * Extracts structured data from text with full type inference
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * const invoice = await extract(pdfText, {
16
+ * vendor: 'string',
17
+ * total: 'number',
18
+ * items: [{ name: 'string', price: 'number' }],
19
+ * date: 'date',
20
+ * });
21
+ * // invoice has type: { vendor: string, total: number, items: {...}[], date: Date }
22
+ * ```
23
+ */
24
+ export declare function extract<T extends SchemaObject>(text: string, schema: T, options?: ExtractOptions): Promise<InferSchema<T>>;
25
+ //# sourceMappingURL=extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/primitives/extract.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,WAAW,EAGjB,MAAM,mBAAmB,CAAC;AAI3B,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,OAAO,CAAC,CAAC,SAAS,YAAY,EAClD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CA2BzB"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * extract() - Extract structured data from text
3
+ * The crown jewel of TinyAI - Zod-like type inference without dependencies
4
+ */
5
+ import { getDefaultClient } from '../core/client.js';
6
+ import { schemaToJsonSchema, parseResponse, } from '../core/schema.js';
7
+ import { PROMPTS } from '../utils/prompts.js';
8
+ import { withRetry } from '../utils/retry.js';
9
+ /**
10
+ * Extracts structured data from text with full type inference
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * const invoice = await extract(pdfText, {
15
+ * vendor: 'string',
16
+ * total: 'number',
17
+ * items: [{ name: 'string', price: 'number' }],
18
+ * date: 'date',
19
+ * });
20
+ * // invoice has type: { vendor: string, total: number, items: {...}[], date: Date }
21
+ * ```
22
+ */
23
+ export async function extract(text, schema, options = {}) {
24
+ const client = options.client ?? getDefaultClient();
25
+ const jsonSchema = schemaToJsonSchema(schema);
26
+ const prompt = PROMPTS.extract(text, jsonSchema);
27
+ const response = await withRetry(() => client.provider.chat([
28
+ { role: 'system', content: prompt.system },
29
+ { role: 'user', content: prompt.user },
30
+ ]));
31
+ // Parse JSON response
32
+ let data;
33
+ try {
34
+ // Handle potential markdown code blocks
35
+ let jsonStr = response.content.trim();
36
+ if (jsonStr.startsWith('```')) {
37
+ jsonStr = jsonStr.replace(/^```(?:json)?\n?/, '').replace(/\n?```$/, '');
38
+ }
39
+ data = JSON.parse(jsonStr);
40
+ }
41
+ catch {
42
+ throw new Error(`Failed to parse AI response as JSON: ${response.content}`);
43
+ }
44
+ // Convert types (especially dates)
45
+ return parseResponse(data, schema);
46
+ }
47
+ //# sourceMappingURL=extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/primitives/extract.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAGL,kBAAkB,EAClB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAM9C;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,IAAY,EACZ,MAAS,EACT,UAA0B,EAAE;IAE5B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;IACpD,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CACpC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;KACvC,CAAC,CACH,CAAC;IAEF,sBAAsB;IACtB,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,wCAAwC;QACxC,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,mCAAmC;IACnC,OAAO,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * generate() - Low-level text generation
3
+ */
4
+ import type { TinyAIClient } from '../core/client.js';
5
+ export interface GenerateOptions {
6
+ system?: string;
7
+ client?: TinyAIClient;
8
+ }
9
+ /**
10
+ * Generates text from a prompt
11
+ * Lower-level than other primitives, for custom use cases
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * const poem = await generate("Write a haiku about coding");
16
+ * const story = await generate("Once upon a time...", {
17
+ * system: "You are a creative storyteller"
18
+ * });
19
+ * ```
20
+ */
21
+ export declare function generate(prompt: string, options?: GenerateOptions): Promise<string>;
22
+ /**
23
+ * Generates text with streaming
24
+ */
25
+ export declare function generateStream(prompt: string, options?: GenerateOptions): AsyncGenerator<string, void, unknown>;
26
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/primitives/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAInE,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED;;GAEG;AACH,wBAAuB,cAAc,CACnC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAoB,GAC5B,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAUvC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * generate() - Low-level text generation
3
+ */
4
+ import { getDefaultClient } from '../core/client.js';
5
+ import { withRetry } from '../utils/retry.js';
6
+ /**
7
+ * Generates text from a prompt
8
+ * Lower-level than other primitives, for custom use cases
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const poem = await generate("Write a haiku about coding");
13
+ * const story = await generate("Once upon a time...", {
14
+ * system: "You are a creative storyteller"
15
+ * });
16
+ * ```
17
+ */
18
+ export async function generate(prompt, options = {}) {
19
+ const client = options.client ?? getDefaultClient();
20
+ const messages = [];
21
+ if (options.system) {
22
+ messages.push({ role: 'system', content: options.system });
23
+ }
24
+ messages.push({ role: 'user', content: prompt });
25
+ const response = await withRetry(() => client.provider.chat(messages));
26
+ return response.content;
27
+ }
28
+ /**
29
+ * Generates text with streaming
30
+ */
31
+ export async function* generateStream(prompt, options = {}) {
32
+ const client = options.client ?? getDefaultClient();
33
+ const messages = [];
34
+ if (options.system) {
35
+ messages.push({ role: 'system', content: options.system });
36
+ }
37
+ messages.push({ role: 'user', content: prompt });
38
+ yield* client.provider.chatStream(messages);
39
+ }
40
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/primitives/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAO9C;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAc,EACd,UAA2B,EAAE;IAE7B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;IAEpD,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvE,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,cAAc,CACnC,MAAc,EACd,UAA2B,EAAE;IAE7B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;IAEpD,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAEjD,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * summarize() - Summarize text
3
+ */
4
+ import type { TinyAIClient } from '../core/client.js';
5
+ export interface SummarizeOptions {
6
+ maxLength?: number;
7
+ client?: TinyAIClient;
8
+ }
9
+ /**
10
+ * Summarizes text using AI
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * const summary = await summarize(longArticle);
15
+ * const brief = await summarize(document, { maxLength: 50 });
16
+ * ```
17
+ */
18
+ export declare function summarize(text: string, options?: SummarizeOptions): Promise<string>;
19
+ /**
20
+ * Summarizes text with streaming
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * for await (const chunk of summarizeStream(text)) {
25
+ * process.stdout.write(chunk);
26
+ * }
27
+ * ```
28
+ */
29
+ export declare function summarizeStream(text: string, options?: SummarizeOptions): AsyncGenerator<string, void, unknown>;
30
+ //# sourceMappingURL=summarize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../src/primitives/summarize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKtD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED;;;;;;;;;GASG;AACH,wBAAuB,eAAe,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,gBAAqB,GAC7B,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAQvC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * summarize() - Summarize text
3
+ */
4
+ import { getDefaultClient } from '../core/client.js';
5
+ import { PROMPTS } from '../utils/prompts.js';
6
+ import { withRetry } from '../utils/retry.js';
7
+ /**
8
+ * Summarizes text using AI
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const summary = await summarize(longArticle);
13
+ * const brief = await summarize(document, { maxLength: 50 });
14
+ * ```
15
+ */
16
+ export async function summarize(text, options = {}) {
17
+ const client = options.client ?? getDefaultClient();
18
+ const prompt = PROMPTS.summarize(text, options);
19
+ const response = await withRetry(() => client.provider.chat([
20
+ { role: 'system', content: prompt.system },
21
+ { role: 'user', content: prompt.user },
22
+ ]));
23
+ return response.content.trim();
24
+ }
25
+ /**
26
+ * Summarizes text with streaming
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * for await (const chunk of summarizeStream(text)) {
31
+ * process.stdout.write(chunk);
32
+ * }
33
+ * ```
34
+ */
35
+ export async function* summarizeStream(text, options = {}) {
36
+ const client = options.client ?? getDefaultClient();
37
+ const prompt = PROMPTS.summarize(text, options);
38
+ yield* client.provider.chatStream([
39
+ { role: 'system', content: prompt.system },
40
+ { role: 'user', content: prompt.user },
41
+ ]);
42
+ }
43
+ //# sourceMappingURL=summarize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../src/primitives/summarize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAO9C;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAY,EACZ,UAA4B,EAAE;IAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CACpC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;KACvC,CAAC,CACH,CAAC;IAEF,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,eAAe,CACpC,IAAY,EACZ,UAA4B,EAAE;IAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEhD,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;KACvC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * translate() - Translate text to another language
3
+ */
4
+ import type { TinyAIClient } from '../core/client.js';
5
+ export interface TranslateOptions {
6
+ client?: TinyAIClient;
7
+ }
8
+ /**
9
+ * Translates text to the specified language
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const spanish = await translate('Hello, world!', 'spanish');
14
+ * const french = await translate(text, 'french');
15
+ * ```
16
+ */
17
+ export declare function translate(text: string, targetLanguage: string, options?: TranslateOptions): Promise<string>;
18
+ /**
19
+ * Translates text with streaming
20
+ */
21
+ export declare function translateStream(text: string, targetLanguage: string, options?: TranslateOptions): AsyncGenerator<string, void, unknown>;
22
+ //# sourceMappingURL=translate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translate.d.ts","sourceRoot":"","sources":["../../src/primitives/translate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKtD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED;;GAEG;AACH,wBAAuB,eAAe,CACpC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,gBAAqB,GAC7B,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAQvC"}