vue-ai-hooks 0.2.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAe3C,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,mCAAmC;IACnC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CACrB;AAiBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,YAAY,CAyK/D"}
@@ -0,0 +1,39 @@
1
+ import type { ChatProvider } from './types';
2
+ /** Configuration shared by OpenAI-family providers. */
3
+ export interface OpenAiLikeConfig {
4
+ apiKey: string;
5
+ baseURL: string;
6
+ /**
7
+ * Additional headers to send on every request. Use for org-id, project-id,
8
+ * or self-hosted gateways that require custom auth.
9
+ */
10
+ headers?: Record<string, string>;
11
+ /** Default model when a request omits one. */
12
+ defaultModel?: string;
13
+ /** Path for chat completions endpoint, defaults to '/chat/completions'. */
14
+ chatPath?: string;
15
+ /** Path for completions endpoint, defaults to '/completions'. */
16
+ completionPath?: string;
17
+ /** Path for embeddings endpoint, defaults to '/embeddings'. */
18
+ embeddingPath?: string;
19
+ /**
20
+ * Optional fetcher override. Useful for testing or environments without
21
+ * a global `fetch` (e.g. older Node, polyfills).
22
+ */
23
+ fetch?: typeof fetch;
24
+ }
25
+ /**
26
+ * Build an OpenAI-compatible provider. Works with OpenAI, Azure OpenAI
27
+ * (with the right baseURL), DeepSeek, Moonshot, Zhipu, Ollama (with
28
+ * the OpenAI shim), vLLM, and any other service that follows the
29
+ * OpenAI REST conventions.
30
+ */
31
+ export declare function openaiCompatible(config: OpenAiLikeConfig): ChatProvider;
32
+ /**
33
+ * Convenience factory for the canonical OpenAI endpoint. Equivalent to
34
+ * `openaiCompatible({ apiKey, baseURL: 'https://api.openai.com/v1', ... })`.
35
+ */
36
+ export declare function openai(config: Omit<OpenAiLikeConfig, 'baseURL'> & {
37
+ baseURL?: string;
38
+ }): ChatProvider;
39
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAY3C,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,YAAY,CA2LvE;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,gBAMtF"}
@@ -0,0 +1,20 @@
1
+ import type { ChatChunk, ChatRequest, CompletionRequest, EmbeddingRequest, EmbeddingResult } from '../types';
2
+ /**
3
+ * A Provider translates framework-agnostic request types into the
4
+ * specific wire format of an upstream LLM service, and translates
5
+ * the wire format back into framework-agnostic chunks.
6
+ *
7
+ * This is the only seam that knows about a vendor's quirks, so adding
8
+ * a new provider is a single file.
9
+ */
10
+ export interface ChatProvider {
11
+ /** Provider identifier, e.g. 'openai'. */
12
+ readonly id: string;
13
+ /** Send a chat completion request. If `stream` is true, the returned async iterable yields deltas. */
14
+ chat(request: ChatRequest): Promise<AsyncIterable<ChatChunk>>;
15
+ /** Send a single-shot completion request. */
16
+ completion(request: CompletionRequest): Promise<AsyncIterable<string>>;
17
+ /** Compute embeddings for the given input. */
18
+ embedding(request: EmbeddingRequest): Promise<EmbeddingResult>;
19
+ }
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EAChB,MAAM,UAAU,CAAA;AAEjB;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB,sGAAsG;IACtG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;IAE7D,6CAA6C;IAC7C,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IAEtE,8CAA8C;IAC9C,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CAC/D"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Public types for vue-ai-hooks.
3
+ *
4
+ * Designed to be provider-agnostic. Provider-specific types live in
5
+ * `src/providers/*` and are mapped to these by the provider adapters.
6
+ */
7
+ /** Role of a message participant. */
8
+ export type MessageRole = 'system' | 'user' | 'assistant' | 'tool';
9
+ /** A text part of a multimodal message. */
10
+ export interface TextPart {
11
+ type: 'text';
12
+ text: string;
13
+ }
14
+ /** An image part of a multimodal message. `url` may be an https URL or a data: URL. */
15
+ export interface ImageUrlPart {
16
+ type: 'image_url';
17
+ image_url: {
18
+ url: string;
19
+ detail?: 'low' | 'high' | 'auto';
20
+ };
21
+ }
22
+ /** One piece of a multimodal message. */
23
+ export type ContentPart = TextPart | ImageUrlPart;
24
+ /** Content can be plain text (the common case) or a list of content parts. */
25
+ export type MessageContent = string | ContentPart[];
26
+ /** A function/tool the model may call. OpenAI-compatible schema. */
27
+ export interface Tool {
28
+ type: 'function';
29
+ function: {
30
+ name: string;
31
+ description?: string;
32
+ parameters: Record<string, unknown>;
33
+ };
34
+ }
35
+ /** A tool call emitted by the model. */
36
+ export interface ToolCall {
37
+ id: string;
38
+ type: 'function';
39
+ function: {
40
+ name: string;
41
+ arguments: string;
42
+ };
43
+ }
44
+ /** A single chat message. */
45
+ export interface Message {
46
+ id: string;
47
+ role: MessageRole;
48
+ content: MessageContent;
49
+ name?: string;
50
+ toolCallId?: string;
51
+ toolCalls?: ToolCall[];
52
+ createdAt?: Date;
53
+ /** Provider-specific metadata. Useful for OpenAI's `logprobs` etc. */
54
+ metadata?: Record<string, unknown>;
55
+ }
56
+ /** Request payload for a chat completion. */
57
+ export interface ChatRequest {
58
+ messages: Message[];
59
+ model?: string;
60
+ temperature?: number;
61
+ maxTokens?: number;
62
+ topP?: number;
63
+ frequencyPenalty?: number;
64
+ presencePenalty?: number;
65
+ stop?: string | string[];
66
+ tools?: Tool[];
67
+ toolChoice?: 'auto' | 'none' | 'required' | {
68
+ type: 'function';
69
+ function: {
70
+ name: string;
71
+ };
72
+ };
73
+ user?: string;
74
+ stream?: boolean;
75
+ signal?: AbortSignal;
76
+ headers?: Record<string, string>;
77
+ }
78
+ /** A single delta in a streaming chat response. */
79
+ export interface ChatChunk {
80
+ /** Text delta for the assistant message. */
81
+ content?: string;
82
+ /** Tool call deltas. */
83
+ toolCalls?: Array<{
84
+ index: number;
85
+ id?: string;
86
+ type?: 'function';
87
+ function?: {
88
+ name?: string;
89
+ arguments?: string;
90
+ };
91
+ }>;
92
+ /** Why the model stopped, if this is the final chunk. */
93
+ finishReason?: 'stop' | 'length' | 'tool_calls' | 'content_filter' | null;
94
+ /** Token usage, typically only present on the final chunk. */
95
+ usage?: {
96
+ promptTokens: number;
97
+ completionTokens: number;
98
+ totalTokens: number;
99
+ };
100
+ }
101
+ /** Request payload for a single-shot completion. */
102
+ export interface CompletionRequest {
103
+ prompt: string;
104
+ model?: string;
105
+ temperature?: number;
106
+ maxTokens?: number;
107
+ topP?: number;
108
+ frequencyPenalty?: number;
109
+ presencePenalty?: number;
110
+ stop?: string | string[];
111
+ stream?: boolean;
112
+ signal?: AbortSignal;
113
+ headers?: Record<string, string>;
114
+ }
115
+ /** Request payload for embedding. */
116
+ export interface EmbeddingRequest {
117
+ input: string | string[];
118
+ model?: string;
119
+ user?: string;
120
+ signal?: AbortSignal;
121
+ headers?: Record<string, string>;
122
+ }
123
+ export interface EmbeddingResult {
124
+ embeddings: number[][];
125
+ model: string;
126
+ usage: {
127
+ promptTokens: number;
128
+ totalTokens: number;
129
+ };
130
+ }
131
+ /** Common error thrown by composables. */
132
+ export declare class AiHooksError extends Error {
133
+ readonly cause?: unknown;
134
+ readonly status?: number;
135
+ constructor(message: string, options?: {
136
+ cause?: unknown;
137
+ status?: number;
138
+ });
139
+ }
140
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Wraps the global fetch (or a user-supplied one) with timeout, AbortSignal,
3
+ * and consistent error shaping. Providers should call this instead of using
4
+ * fetch directly so behavior is uniform.
5
+ */
6
+ export declare function requestJson(url: string, init?: RequestInit & {
7
+ timeoutMs?: number;
8
+ fetcher?: typeof fetch;
9
+ }): Promise<Response>;
10
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,WAAW,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GACtE,OAAO,CAAC,QAAQ,CAAC,CA4CnB"}
@@ -0,0 +1,2 @@
1
+ export declare function createId(prefix?: string): string;
2
+ //# sourceMappingURL=id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAMA,wBAAgB,QAAQ,CAAC,MAAM,SAAQ,GAAG,MAAM,CAG/C"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Server-Sent Events (SSE) parser.
3
+ *
4
+ * Yields the parsed JSON payload of each `data: ...` line. Stops on
5
+ * the canonical `[DONE]` sentinel. Skips malformed lines silently
6
+ * (we surface errors through the chunk type, not exceptions).
7
+ */
8
+ export declare function parseSSE(response: Response, signal?: AbortSignal): AsyncGenerator<Record<string, unknown>>;
9
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/utils/stream.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAuB,QAAQ,CAC7B,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA0CzC"}
package/package.json ADDED
@@ -0,0 +1,88 @@
1
+ {
2
+ "name": "vue-ai-hooks",
3
+ "version": "0.2.0",
4
+ "description": "Vue 3 Composable library for building AI-powered applications. useChat, useCompletion, useEmbedding — multi-provider, streaming-first, fully typed.",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.mjs",
8
+ "types": "./dist/index.d.ts",
9
+ "sideEffects": false,
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.mjs",
14
+ "require": "./dist/index.cjs"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md",
20
+ "README.zh-CN.md",
21
+ "LICENSE"
22
+ ],
23
+ "scripts": {
24
+ "dev": "vite",
25
+ "example:chat": "vite --config examples/chat/vite.config.ts",
26
+ "example:completion": "vite --config examples/completion/vite.config.ts",
27
+ "example:embedding": "vite --config examples/embedding/vite.config.ts",
28
+ "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
29
+ "build": "pnpm clean && vue-tsc -p tsconfig.build.json && vite build",
30
+ "typecheck:all": "vue-tsc -p tsconfig.json --noEmit",
31
+ "test": "vitest run",
32
+ "test:watch": "vitest",
33
+ "typecheck": "vue-tsc -p tsconfig.build.json",
34
+ "lint": "eslint . --ext .ts,.vue",
35
+ "format": "prettier --write \"src/**/*.{ts,vue}\" \"tests/**/*.ts\"",
36
+ "prepublishOnly": "pnpm build",
37
+ "docs:dev": "vitepress dev docs",
38
+ "docs:build": "vitepress build docs",
39
+ "docs:preview": "vitepress preview docs"
40
+ },
41
+ "keywords": [
42
+ "vue",
43
+ "vue3",
44
+ "composables",
45
+ "ai",
46
+ "llm",
47
+ "openai",
48
+ "chatgpt",
49
+ "claude",
50
+ "hooks",
51
+ "streaming",
52
+ "gpt",
53
+ "embedding"
54
+ ],
55
+ "license": "MIT",
56
+ "author": "hexinmiao96",
57
+ "repository": {
58
+ "type": "git",
59
+ "url": "git+https://github.com/hexinmiao96/vue-ai-hooks.git"
60
+ },
61
+ "bugs": {
62
+ "url": "https://github.com/hexinmiao96/vue-ai-hooks/issues"
63
+ },
64
+ "homepage": "https://github.com/hexinmiao96/vue-ai-hooks#readme",
65
+ "peerDependencies": {
66
+ "vue": "^3.4.0"
67
+ },
68
+ "devDependencies": {
69
+ "@types/node": "^20.11.0",
70
+ "@typescript-eslint/parser": "^8.60.1",
71
+ "@vitejs/plugin-vue": "^5.0.0",
72
+ "@vue/test-utils": "^2.4.4",
73
+ "@vue/tsconfig": "^0.5.1",
74
+ "eslint": "^8.57.0",
75
+ "eslint-plugin-vue": "^9.22.0",
76
+ "happy-dom": "^14.0.0",
77
+ "prettier": "^3.2.5",
78
+ "typescript": "^5.4.0",
79
+ "vite": "^5.1.0",
80
+ "vitepress": "^1.0.0",
81
+ "vitest": "^1.4.0",
82
+ "vue": "^3.4.0",
83
+ "vue-tsc": "^2.0.0"
84
+ },
85
+ "engines": {
86
+ "node": ">=18.0.0"
87
+ }
88
+ }