@tanstack/ai-lovable 0.1.0 → 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.
@@ -9,10 +9,9 @@ import { LovableHdVideoSize, LovableVideoDuration, LovableVideoProviderOptions,
9
9
  export declare const LOVABLE_CHAT_MODELS: readonly ["google/gemini-3.7-flash", "google/gemini-3.6-flash", "google/gemini-3.5-flash", "google/gemini-3.1-pro-preview", "google/gemini-3.1-flash-lite", "google/gemini-3-flash-preview", "google/gemini-2.5-pro", "google/gemini-2.5-flash", "google/gemini-2.5-flash-lite", "openai/gpt-5.6-sol", "openai/gpt-5.6-terra", "openai/gpt-5.6-luna", "openai/gpt-5.5-pro", "openai/gpt-5.5", "openai/gpt-5.4-pro", "openai/gpt-5.4", "openai/gpt-5.4-mini", "openai/gpt-5.4-nano", "openai/gpt-5.2", "openai/gpt-5", "openai/gpt-5-mini", "openai/gpt-5-nano"];
10
10
  export type LovableChatModel = (typeof LOVABLE_CHAT_MODELS)[number];
11
11
  /**
12
- * A curated chat model id, or any other id the gateway accepts.
13
- * Uncurated ids fall back to text-only input and the generic provider options.
12
+ * A curated chat model id from `LOVABLE_CHAT_MODELS`.
14
13
  */
15
- export type LovableModelId = LovableChatModel | (string & {});
14
+ export type LovableModelId = LovableChatModel;
16
15
  export type LovableChatModelProviderOptionsByName = {
17
16
  [K in LovableChatModel]: LovableTextProviderOptions;
18
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"model-meta.js","names":[],"sources":["../../src/model-meta.ts"],"sourcesContent":["import type { LovableEmbeddingProviderOptions } from './embedding/embedding-provider-options'\nimport type {\n LovableImageProviderOptions,\n LovableImageSize,\n} from './image/image-provider-options'\nimport type { LovableTextProviderOptions } from './text/text-provider-options'\nimport type {\n LovableHdVideoSize,\n LovableVideoDuration,\n LovableVideoProviderOptions,\n LovableVideoSize,\n} from './video/video-provider-options'\n\n/**\n * Chat models listed on https://docs.lovable.dev/features/ai.\n * Ids use the `google/` and `openai/` form that the gateway accepts.\n */\nexport const LOVABLE_CHAT_MODELS = [\n 'google/gemini-3.7-flash',\n 'google/gemini-3.6-flash',\n 'google/gemini-3.5-flash',\n 'google/gemini-3.1-pro-preview',\n 'google/gemini-3.1-flash-lite',\n 'google/gemini-3-flash-preview',\n 'google/gemini-2.5-pro',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-flash-lite',\n 'openai/gpt-5.6-sol',\n 'openai/gpt-5.6-terra',\n 'openai/gpt-5.6-luna',\n 'openai/gpt-5.5-pro',\n 'openai/gpt-5.5',\n 'openai/gpt-5.4-pro',\n 'openai/gpt-5.4',\n 'openai/gpt-5.4-mini',\n 'openai/gpt-5.4-nano',\n 'openai/gpt-5.2',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n] as const\n\nexport type LovableChatModel = (typeof LOVABLE_CHAT_MODELS)[number]\n\n/**\n * A curated chat model id, or any other id the gateway accepts.\n * Uncurated ids fall back to text-only input and the generic provider options.\n */\nexport type LovableModelId = LovableChatModel | (string & {})\n\nexport type LovableChatModelProviderOptionsByName = {\n [K in LovableChatModel]: LovableTextProviderOptions\n}\n\nexport type LovableModelInputModalitiesByName = {\n [K in LovableChatModel]: readonly ['text', 'image']\n}\n\nexport type LovableChatModelToolCapabilitiesByName = {\n [K in LovableChatModel]: readonly []\n}\n\nexport type ResolveProviderOptions<TModel extends string> =\n TModel extends keyof LovableChatModelProviderOptionsByName\n ? LovableChatModelProviderOptionsByName[TModel]\n : LovableTextProviderOptions\n\nexport type ResolveInputModalities<TModel extends string> =\n TModel extends keyof LovableModelInputModalitiesByName\n ? LovableModelInputModalitiesByName[TModel]\n : readonly ['text']\n\nexport const LOVABLE_IMAGE_MODELS = [\n 'openai/gpt-image-2',\n 'openai/gpt-image-1-mini',\n 'google/gemini-3.1-flash-image',\n 'google/gemini-3.1-flash-lite-image',\n 'google/gemini-3-pro-image',\n 'google/gemini-2.5-flash-image',\n] as const\n\nexport type LovableImageModel = (typeof LOVABLE_IMAGE_MODELS)[number]\n\nexport type LovableImageModelProviderOptionsByName = {\n [K in LovableImageModel]: LovableImageProviderOptions\n}\n\nexport type LovableImageModelSizeByName = {\n [K in LovableImageModel]: LovableImageSize\n}\n\nexport type LovableImageModelInputModalitiesByName = {\n [K in LovableImageModel]: readonly ['image']\n}\n\n/**\n * @experimental Video generation is an experimental feature and may change.\n */\nexport const LOVABLE_VIDEO_MODELS = [\n 'google/veo-3.1-lite',\n 'google/veo-3.1-fast',\n 'google/veo-3.1',\n] as const\n\n/**\n * @experimental Video generation is an experimental feature and may change.\n */\nexport type LovableVideoModel = (typeof LOVABLE_VIDEO_MODELS)[number]\n\nexport type LovableVideoModelProviderOptionsByName = {\n [K in LovableVideoModel]: LovableVideoProviderOptions\n}\n\nexport type LovableVideoModelSizeByName = {\n 'google/veo-3.1-lite': LovableHdVideoSize\n 'google/veo-3.1-fast': LovableVideoSize\n 'google/veo-3.1': LovableVideoSize\n}\n\nexport type LovableVideoModelDurationByName = {\n [K in LovableVideoModel]: LovableVideoDuration\n}\n\nexport type LovableVideoModelInputModalitiesByName = {\n [K in LovableVideoModel]: readonly ['image']\n}\n\nexport const LOVABLE_EMBEDDING_MODELS = [\n 'google/gemini-embedding-2',\n 'google/gemini-embedding-001',\n 'openai/text-embedding-3-small',\n 'openai/text-embedding-3-large',\n] as const\n\nexport type LovableEmbeddingModel = (typeof LOVABLE_EMBEDDING_MODELS)[number]\n\nexport type LovableEmbeddingModelProviderOptionsByName = {\n [K in LovableEmbeddingModel]: LovableEmbeddingProviderOptions\n}\n\nexport type LovableEmbeddingModelInputModalitiesByName = {\n [K in LovableEmbeddingModel]: readonly ['text']\n}\n\nexport const LOVABLE_TTS_MODELS = [\n 'openai/gpt-4o-mini-tts',\n 'google/gemini-2.5-flash-tts',\n 'google/gemini-2.5-pro-tts',\n 'google/gemini-2.5-flash-lite-preview-tts',\n 'google/gemini-3.1-flash-tts-preview',\n] as const\n\nexport type LovableTTSModel = (typeof LOVABLE_TTS_MODELS)[number]\n\nexport const LOVABLE_TRANSCRIPTION_MODELS = [\n 'openai/gpt-4o-mini-transcribe',\n 'openai/gpt-4o-transcribe',\n] as const\n\nexport type LovableTranscriptionModel =\n (typeof LOVABLE_TRANSCRIPTION_MODELS)[number]\n"],"mappings":";;;;;AAiBA,IAAa,sBAAsB;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAgCA,IAAa,uBAAuB;CAClC;CACA;CACA;CACA;CACA;CACA;AACF;;;;AAmBA,IAAa,uBAAuB;CAClC;CACA;CACA;AACF;AAyBA,IAAa,2BAA2B;CACtC;CACA;CACA;CACA;AACF;AAYA,IAAa,qBAAqB;CAChC;CACA;CACA;CACA;CACA;AACF;AAIA,IAAa,+BAA+B,CAC1C,iCACA,0BACF"}
1
+ {"version":3,"file":"model-meta.js","names":[],"sources":["../../src/model-meta.ts"],"sourcesContent":["import type { LovableEmbeddingProviderOptions } from './embedding/embedding-provider-options'\nimport type {\n LovableImageProviderOptions,\n LovableImageSize,\n} from './image/image-provider-options'\nimport type { LovableTextProviderOptions } from './text/text-provider-options'\nimport type {\n LovableHdVideoSize,\n LovableVideoDuration,\n LovableVideoProviderOptions,\n LovableVideoSize,\n} from './video/video-provider-options'\n\n/**\n * Chat models listed on https://docs.lovable.dev/features/ai.\n * Ids use the `google/` and `openai/` form that the gateway accepts.\n */\nexport const LOVABLE_CHAT_MODELS = [\n 'google/gemini-3.7-flash',\n 'google/gemini-3.6-flash',\n 'google/gemini-3.5-flash',\n 'google/gemini-3.1-pro-preview',\n 'google/gemini-3.1-flash-lite',\n 'google/gemini-3-flash-preview',\n 'google/gemini-2.5-pro',\n 'google/gemini-2.5-flash',\n 'google/gemini-2.5-flash-lite',\n 'openai/gpt-5.6-sol',\n 'openai/gpt-5.6-terra',\n 'openai/gpt-5.6-luna',\n 'openai/gpt-5.5-pro',\n 'openai/gpt-5.5',\n 'openai/gpt-5.4-pro',\n 'openai/gpt-5.4',\n 'openai/gpt-5.4-mini',\n 'openai/gpt-5.4-nano',\n 'openai/gpt-5.2',\n 'openai/gpt-5',\n 'openai/gpt-5-mini',\n 'openai/gpt-5-nano',\n] as const\n\nexport type LovableChatModel = (typeof LOVABLE_CHAT_MODELS)[number]\n\n/**\n * A curated chat model id from `LOVABLE_CHAT_MODELS`.\n */\nexport type LovableModelId = LovableChatModel\n\nexport type LovableChatModelProviderOptionsByName = {\n [K in LovableChatModel]: LovableTextProviderOptions\n}\n\nexport type LovableModelInputModalitiesByName = {\n [K in LovableChatModel]: readonly ['text', 'image']\n}\n\nexport type LovableChatModelToolCapabilitiesByName = {\n [K in LovableChatModel]: readonly []\n}\n\nexport type ResolveProviderOptions<TModel extends string> =\n TModel extends keyof LovableChatModelProviderOptionsByName\n ? LovableChatModelProviderOptionsByName[TModel]\n : LovableTextProviderOptions\n\nexport type ResolveInputModalities<TModel extends string> =\n TModel extends keyof LovableModelInputModalitiesByName\n ? LovableModelInputModalitiesByName[TModel]\n : readonly ['text']\n\nexport const LOVABLE_IMAGE_MODELS = [\n 'openai/gpt-image-2',\n 'openai/gpt-image-1-mini',\n 'google/gemini-3.1-flash-image',\n 'google/gemini-3.1-flash-lite-image',\n 'google/gemini-3-pro-image',\n 'google/gemini-2.5-flash-image',\n] as const\n\nexport type LovableImageModel = (typeof LOVABLE_IMAGE_MODELS)[number]\n\nexport type LovableImageModelProviderOptionsByName = {\n [K in LovableImageModel]: LovableImageProviderOptions\n}\n\nexport type LovableImageModelSizeByName = {\n [K in LovableImageModel]: LovableImageSize\n}\n\nexport type LovableImageModelInputModalitiesByName = {\n [K in LovableImageModel]: readonly ['image']\n}\n\n/**\n * @experimental Video generation is an experimental feature and may change.\n */\nexport const LOVABLE_VIDEO_MODELS = [\n 'google/veo-3.1-lite',\n 'google/veo-3.1-fast',\n 'google/veo-3.1',\n] as const\n\n/**\n * @experimental Video generation is an experimental feature and may change.\n */\nexport type LovableVideoModel = (typeof LOVABLE_VIDEO_MODELS)[number]\n\nexport type LovableVideoModelProviderOptionsByName = {\n [K in LovableVideoModel]: LovableVideoProviderOptions\n}\n\nexport type LovableVideoModelSizeByName = {\n 'google/veo-3.1-lite': LovableHdVideoSize\n 'google/veo-3.1-fast': LovableVideoSize\n 'google/veo-3.1': LovableVideoSize\n}\n\nexport type LovableVideoModelDurationByName = {\n [K in LovableVideoModel]: LovableVideoDuration\n}\n\nexport type LovableVideoModelInputModalitiesByName = {\n [K in LovableVideoModel]: readonly ['image']\n}\n\nexport const LOVABLE_EMBEDDING_MODELS = [\n 'google/gemini-embedding-2',\n 'google/gemini-embedding-001',\n 'openai/text-embedding-3-small',\n 'openai/text-embedding-3-large',\n] as const\n\nexport type LovableEmbeddingModel = (typeof LOVABLE_EMBEDDING_MODELS)[number]\n\nexport type LovableEmbeddingModelProviderOptionsByName = {\n [K in LovableEmbeddingModel]: LovableEmbeddingProviderOptions\n}\n\nexport type LovableEmbeddingModelInputModalitiesByName = {\n [K in LovableEmbeddingModel]: readonly ['text']\n}\n\nexport const LOVABLE_TTS_MODELS = [\n 'openai/gpt-4o-mini-tts',\n 'google/gemini-2.5-flash-tts',\n 'google/gemini-2.5-pro-tts',\n 'google/gemini-2.5-flash-lite-preview-tts',\n 'google/gemini-3.1-flash-tts-preview',\n] as const\n\nexport type LovableTTSModel = (typeof LOVABLE_TTS_MODELS)[number]\n\nexport const LOVABLE_TRANSCRIPTION_MODELS = [\n 'openai/gpt-4o-mini-transcribe',\n 'openai/gpt-4o-transcribe',\n] as const\n\nexport type LovableTranscriptionModel =\n (typeof LOVABLE_TRANSCRIPTION_MODELS)[number]\n"],"mappings":";;;;;AAiBA,IAAa,sBAAsB;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AA+BA,IAAa,uBAAuB;CAClC;CACA;CACA;CACA;CACA;CACA;AACF;;;;AAmBA,IAAa,uBAAuB;CAClC;CACA;CACA;AACF;AAyBA,IAAa,2BAA2B;CACtC;CACA;CACA;CACA;AACF;AAYA,IAAa,qBAAqB;CAChC;CACA;CACA;CACA;CACA;AACF;AAIA,IAAa,+BAA+B,CAC1C,iCACA,0BACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/ai-lovable",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Lovable AI Gateway adapter for TanStack AI chat, embeddings, image, video, speech, and transcription.",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -63,8 +63,8 @@
63
63
  },
64
64
  "dependencies": {
65
65
  "openai": "^6.41.0",
66
- "@tanstack/ai-utils": "^0.4.0",
67
- "@tanstack/openai-base": "^0.10.5"
66
+ "@tanstack/openai-base": "^0.10.5",
67
+ "@tanstack/ai-utils": "^0.4.0"
68
68
  },
69
69
  "scripts": {
70
70
  "build": "vite build",
package/src/model-meta.ts CHANGED
@@ -43,10 +43,9 @@ export const LOVABLE_CHAT_MODELS = [
43
43
  export type LovableChatModel = (typeof LOVABLE_CHAT_MODELS)[number]
44
44
 
45
45
  /**
46
- * A curated chat model id, or any other id the gateway accepts.
47
- * Uncurated ids fall back to text-only input and the generic provider options.
46
+ * A curated chat model id from `LOVABLE_CHAT_MODELS`.
48
47
  */
49
- export type LovableModelId = LovableChatModel | (string & {})
48
+ export type LovableModelId = LovableChatModel
50
49
 
51
50
  export type LovableChatModelProviderOptionsByName = {
52
51
  [K in LovableChatModel]: LovableTextProviderOptions