@geenius/ai 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.
- package/.changeset/config.json +11 -0
- package/.env.example +2 -0
- package/.github/CODEOWNERS +1 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +16 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +11 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +10 -0
- package/.github/dependabot.yml +11 -0
- package/.github/workflows/ci.yml +23 -0
- package/.github/workflows/release.yml +29 -0
- package/.node-version +1 -0
- package/.nvmrc +1 -0
- package/.prettierrc +7 -0
- package/.project/ACCOUNT.yaml +4 -0
- package/.project/IDEAS.yaml +7 -0
- package/.project/PROJECT.yaml +11 -0
- package/.project/ROADMAP.yaml +15 -0
- package/CHANGELOG.md +15 -0
- package/CODE_OF_CONDUCT.md +26 -0
- package/CONTRIBUTING.md +61 -0
- package/LICENSE +21 -0
- package/README.md +1 -0
- package/SECURITY.md +18 -0
- package/SUPPORT.md +14 -0
- package/package.json +75 -0
- package/packages/convex/package.json +42 -0
- package/packages/convex/src/index.ts +8 -0
- package/packages/convex/src/mutations/messages.ts +29 -0
- package/packages/convex/src/queries/messages.ts +24 -0
- package/packages/convex/src/schema.ts +20 -0
- package/packages/convex/tsconfig.json +11 -0
- package/packages/convex/tsup.config.ts +17 -0
- package/packages/react/README.md +1 -0
- package/packages/react/package.json +60 -0
- package/packages/react/src/components/AILogTable.tsx +90 -0
- package/packages/react/src/components/ChatWindow.tsx +118 -0
- package/packages/react/src/components/GenerationCard.tsx +73 -0
- package/packages/react/src/components/ImageGenerator.tsx +103 -0
- package/packages/react/src/components/ModelSelector.tsx +44 -0
- package/packages/react/src/components/ModelTestRunner.tsx +148 -0
- package/packages/react/src/components/VoiceSelector.tsx +51 -0
- package/packages/react/src/components/index.ts +9 -0
- package/packages/react/src/hooks/index.ts +12 -0
- package/packages/react/src/hooks/useAI.ts +158 -0
- package/packages/react/src/hooks/useAILogs.ts +40 -0
- package/packages/react/src/hooks/useAIModels.ts +53 -0
- package/packages/react/src/hooks/useChat.ts +141 -0
- package/packages/react/src/hooks/useContentManager.ts +108 -0
- package/packages/react/src/hooks/useImageGeneration.ts +82 -0
- package/packages/react/src/hooks/useMemory.ts +161 -0
- package/packages/react/src/hooks/useModelTest.ts +126 -0
- package/packages/react/src/hooks/useRealtimeAudio.ts +203 -0
- package/packages/react/src/hooks/useSkills.ts +114 -0
- package/packages/react/src/hooks/useTextToSpeech.ts +99 -0
- package/packages/react/src/hooks/useTranscription.ts +119 -0
- package/packages/react/src/hooks/useVideoGeneration.ts +79 -0
- package/packages/react/src/index.ts +42 -0
- package/packages/react/src/pages/AILogsPage.tsx +98 -0
- package/packages/react/src/pages/ChatPage.tsx +42 -0
- package/packages/react/src/pages/ModelTestPage.tsx +33 -0
- package/packages/react/src/pages/index.ts +5 -0
- package/packages/react/tsconfig.json +26 -0
- package/packages/react/tsup.config.ts +22 -0
- package/packages/react-css/README.md +1 -0
- package/packages/react-css/package.json +45 -0
- package/packages/react-css/src/ai.css +857 -0
- package/packages/react-css/src/components/AILogTable.tsx +90 -0
- package/packages/react-css/src/components/ChatWindow.tsx +118 -0
- package/packages/react-css/src/components/GenerationCard.tsx +73 -0
- package/packages/react-css/src/components/ImageGenerator.tsx +103 -0
- package/packages/react-css/src/components/ModelSelector.tsx +44 -0
- package/packages/react-css/src/components/ModelTestRunner.tsx +148 -0
- package/packages/react-css/src/components/VoiceSelector.tsx +51 -0
- package/packages/react-css/src/components/index.ts +9 -0
- package/packages/react-css/src/hooks/index.ts +12 -0
- package/packages/react-css/src/hooks/useAI.ts +153 -0
- package/packages/react-css/src/hooks/useAILogs.ts +40 -0
- package/packages/react-css/src/hooks/useAIModels.ts +51 -0
- package/packages/react-css/src/hooks/useChat.ts +145 -0
- package/packages/react-css/src/hooks/useContentManager.ts +108 -0
- package/packages/react-css/src/hooks/useImageGeneration.ts +82 -0
- package/packages/react-css/src/hooks/useMemory.ts +161 -0
- package/packages/react-css/src/hooks/useModelTest.ts +122 -0
- package/packages/react-css/src/hooks/useRealtimeAudio.ts +203 -0
- package/packages/react-css/src/hooks/useSkills.ts +114 -0
- package/packages/react-css/src/hooks/useTextToSpeech.ts +99 -0
- package/packages/react-css/src/hooks/useTranscription.ts +119 -0
- package/packages/react-css/src/hooks/useVideoGeneration.ts +79 -0
- package/packages/react-css/src/index.ts +35 -0
- package/packages/react-css/src/pages/AILogsPage.tsx +98 -0
- package/packages/react-css/src/pages/ChatPage.tsx +42 -0
- package/packages/react-css/src/pages/ModelTestPage.tsx +33 -0
- package/packages/react-css/src/pages/index.ts +5 -0
- package/packages/react-css/src/styles.css +127 -0
- package/packages/react-css/tsconfig.json +26 -0
- package/packages/react-css/tsup.config.ts +2 -0
- package/packages/shared/README.md +1 -0
- package/packages/shared/package.json +71 -0
- package/packages/shared/src/__tests__/ai.test.ts +67 -0
- package/packages/shared/src/ai-client.ts +243 -0
- package/packages/shared/src/config.ts +235 -0
- package/packages/shared/src/content.ts +249 -0
- package/packages/shared/src/convex/helpers.ts +163 -0
- package/packages/shared/src/convex/index.ts +16 -0
- package/packages/shared/src/convex/schemas.ts +146 -0
- package/packages/shared/src/convex/validators.ts +136 -0
- package/packages/shared/src/index.ts +107 -0
- package/packages/shared/src/memory.ts +197 -0
- package/packages/shared/src/providers/base.ts +103 -0
- package/packages/shared/src/providers/elevenlabs.ts +155 -0
- package/packages/shared/src/providers/index.ts +28 -0
- package/packages/shared/src/providers/openai-compatible.ts +286 -0
- package/packages/shared/src/providers/registry.ts +113 -0
- package/packages/shared/src/providers/replicate-fal.ts +230 -0
- package/packages/shared/src/skills.ts +273 -0
- package/packages/shared/src/types.ts +501 -0
- package/packages/shared/tsconfig.json +25 -0
- package/packages/shared/tsup.config.ts +22 -0
- package/packages/shared/vitest.config.ts +4 -0
- package/packages/solidjs/README.md +1 -0
- package/packages/solidjs/package.json +59 -0
- package/packages/solidjs/src/components/ChatWindow.tsx +78 -0
- package/packages/solidjs/src/components/GenerationCard.tsx +62 -0
- package/packages/solidjs/src/components/ModelTestRunner.tsx +119 -0
- package/packages/solidjs/src/components/index.ts +5 -0
- package/packages/solidjs/src/index.ts +32 -0
- package/packages/solidjs/src/pages/ChatPage.tsx +22 -0
- package/packages/solidjs/src/pages/ModelTestPage.tsx +22 -0
- package/packages/solidjs/src/pages/index.ts +4 -0
- package/packages/solidjs/src/primitives/createAI.ts +79 -0
- package/packages/solidjs/src/primitives/createChat.ts +100 -0
- package/packages/solidjs/src/primitives/createContentManager.ts +61 -0
- package/packages/solidjs/src/primitives/createImageGeneration.ts +46 -0
- package/packages/solidjs/src/primitives/createMemory.ts +127 -0
- package/packages/solidjs/src/primitives/createModelTest.ts +89 -0
- package/packages/solidjs/src/primitives/createSkills.ts +83 -0
- package/packages/solidjs/src/primitives/createTextToSpeech.ts +56 -0
- package/packages/solidjs/src/primitives/createVideoGeneration.ts +46 -0
- package/packages/solidjs/src/primitives/index.ts +8 -0
- package/packages/solidjs/tsconfig.json +27 -0
- package/packages/solidjs/tsup.config.ts +21 -0
- package/packages/solidjs-css/README.md +1 -0
- package/packages/solidjs-css/package.json +44 -0
- package/packages/solidjs-css/src/ai.css +857 -0
- package/packages/solidjs-css/src/components/ChatWindow.tsx +78 -0
- package/packages/solidjs-css/src/components/GenerationCard.tsx +62 -0
- package/packages/solidjs-css/src/components/ModelTestRunner.tsx +119 -0
- package/packages/solidjs-css/src/components/index.ts +5 -0
- package/packages/solidjs-css/src/index.ts +26 -0
- package/packages/solidjs-css/src/pages/ChatPage.tsx +22 -0
- package/packages/solidjs-css/src/pages/ModelTestPage.tsx +22 -0
- package/packages/solidjs-css/src/pages/index.ts +4 -0
- package/packages/solidjs-css/src/primitives/createAI.ts +79 -0
- package/packages/solidjs-css/src/primitives/createChat.ts +100 -0
- package/packages/solidjs-css/src/primitives/createContentManager.ts +61 -0
- package/packages/solidjs-css/src/primitives/createImageGeneration.ts +46 -0
- package/packages/solidjs-css/src/primitives/createMemory.ts +127 -0
- package/packages/solidjs-css/src/primitives/createModelTest.ts +89 -0
- package/packages/solidjs-css/src/primitives/createSkills.ts +83 -0
- package/packages/solidjs-css/src/primitives/createTextToSpeech.ts +56 -0
- package/packages/solidjs-css/src/primitives/createVideoGeneration.ts +46 -0
- package/packages/solidjs-css/src/primitives/index.ts +1 -0
- package/packages/solidjs-css/src/styles.css +127 -0
- package/packages/solidjs-css/tsconfig.json +27 -0
- package/packages/solidjs-css/tsup.config.ts +2 -0
- package/pnpm-workspace.yaml +2 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// @geenius-ai/solidjs — src/primitives/createMemory.ts
|
|
2
|
+
|
|
3
|
+
import { createSignal } from 'solid-js'
|
|
4
|
+
import type {
|
|
5
|
+
MemoryEntry,
|
|
6
|
+
MemoryQuery,
|
|
7
|
+
MemoryNamespace,
|
|
8
|
+
MemoryImportance,
|
|
9
|
+
MemoryType,
|
|
10
|
+
} from '@geenius-ai/shared'
|
|
11
|
+
|
|
12
|
+
export interface CreateMemoryOptions {
|
|
13
|
+
storeFn: (entry: Omit<MemoryEntry, 'id' | 'accessCount' | 'lastAccessedAt' | 'createdAt' | 'updatedAt'>) => Promise<MemoryEntry>
|
|
14
|
+
searchFn: (query: MemoryQuery) => Promise<MemoryEntry[]>
|
|
15
|
+
deleteFn: (id: string) => Promise<void>
|
|
16
|
+
clearFn: (namespace: MemoryNamespace, scopeId: string) => Promise<void>
|
|
17
|
+
defaultNamespace?: MemoryNamespace
|
|
18
|
+
defaultScopeId?: string
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function createMemory(options: CreateMemoryOptions) {
|
|
22
|
+
const {
|
|
23
|
+
storeFn, searchFn, deleteFn, clearFn,
|
|
24
|
+
defaultNamespace = 'user',
|
|
25
|
+
defaultScopeId = '',
|
|
26
|
+
} = options
|
|
27
|
+
|
|
28
|
+
const [memories, setMemories] = createSignal<MemoryEntry[]>([])
|
|
29
|
+
const [isLoading, setIsLoading] = createSignal(false)
|
|
30
|
+
const [error, setError] = createSignal<Error | null>(null)
|
|
31
|
+
|
|
32
|
+
const store = async (
|
|
33
|
+
key: string,
|
|
34
|
+
value: string,
|
|
35
|
+
opts?: {
|
|
36
|
+
namespace?: MemoryNamespace
|
|
37
|
+
type?: MemoryType
|
|
38
|
+
importance?: MemoryImportance
|
|
39
|
+
metadata?: Record<string, unknown>
|
|
40
|
+
scopeId?: string
|
|
41
|
+
},
|
|
42
|
+
) => {
|
|
43
|
+
setIsLoading(true)
|
|
44
|
+
setError(null)
|
|
45
|
+
try {
|
|
46
|
+
const entry = await storeFn({
|
|
47
|
+
namespace: opts?.namespace ?? defaultNamespace,
|
|
48
|
+
type: opts?.type ?? 'fact',
|
|
49
|
+
importance: opts?.importance ?? 'medium',
|
|
50
|
+
key,
|
|
51
|
+
value,
|
|
52
|
+
metadata: opts?.metadata,
|
|
53
|
+
scopeId: opts?.scopeId ?? defaultScopeId,
|
|
54
|
+
})
|
|
55
|
+
setMemories(prev => [...prev, entry])
|
|
56
|
+
return entry
|
|
57
|
+
} catch (err) {
|
|
58
|
+
const e = err instanceof Error ? err : new Error(String(err))
|
|
59
|
+
setError(e)
|
|
60
|
+
throw e
|
|
61
|
+
} finally {
|
|
62
|
+
setIsLoading(false)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const recall = async (key: string, namespace?: MemoryNamespace) => {
|
|
67
|
+
setIsLoading(true)
|
|
68
|
+
setError(null)
|
|
69
|
+
try {
|
|
70
|
+
const results = await searchFn({
|
|
71
|
+
namespace: namespace ?? defaultNamespace,
|
|
72
|
+
key,
|
|
73
|
+
scopeId: defaultScopeId,
|
|
74
|
+
limit: 1,
|
|
75
|
+
})
|
|
76
|
+
return results.length > 0 ? results[0] : null
|
|
77
|
+
} catch (err) {
|
|
78
|
+
const e = err instanceof Error ? err : new Error(String(err))
|
|
79
|
+
setError(e)
|
|
80
|
+
throw e
|
|
81
|
+
} finally {
|
|
82
|
+
setIsLoading(false)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const search = async (query: MemoryQuery) => {
|
|
87
|
+
setIsLoading(true)
|
|
88
|
+
setError(null)
|
|
89
|
+
try {
|
|
90
|
+
const results = await searchFn({ scopeId: defaultScopeId, ...query })
|
|
91
|
+
setMemories(results)
|
|
92
|
+
return results
|
|
93
|
+
} catch (err) {
|
|
94
|
+
const e = err instanceof Error ? err : new Error(String(err))
|
|
95
|
+
setError(e)
|
|
96
|
+
throw e
|
|
97
|
+
} finally {
|
|
98
|
+
setIsLoading(false)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const remove = async (id: string) => {
|
|
103
|
+
setError(null)
|
|
104
|
+
try {
|
|
105
|
+
await deleteFn(id)
|
|
106
|
+
setMemories(prev => prev.filter(m => m.id !== id))
|
|
107
|
+
} catch (err) {
|
|
108
|
+
const e = err instanceof Error ? err : new Error(String(err))
|
|
109
|
+
setError(e)
|
|
110
|
+
throw e
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const clear = async (namespace?: MemoryNamespace) => {
|
|
115
|
+
setError(null)
|
|
116
|
+
try {
|
|
117
|
+
await clearFn(namespace ?? defaultNamespace, defaultScopeId)
|
|
118
|
+
setMemories([])
|
|
119
|
+
} catch (err) {
|
|
120
|
+
const e = err instanceof Error ? err : new Error(String(err))
|
|
121
|
+
setError(e)
|
|
122
|
+
throw e
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return { store, recall, search, remove, clear, memories, isLoading, error }
|
|
127
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// @geenius-ai/solidjs — src/primitives/createModelTest.ts
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Model test primitive — run tests on individual or batch models.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { createSignal } from 'solid-js'
|
|
8
|
+
import type { AIGenerationType } from '@geenius-ai/shared'
|
|
9
|
+
|
|
10
|
+
export interface ModelTestResult {
|
|
11
|
+
model: string
|
|
12
|
+
type: AIGenerationType
|
|
13
|
+
result: string
|
|
14
|
+
durationMs: number
|
|
15
|
+
timestamp: number
|
|
16
|
+
error?: string
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface CreateModelTestOptions {
|
|
20
|
+
callGenerateText?: (args: any) => Promise<string>
|
|
21
|
+
callGenerateImage?: (args: any) => Promise<string>
|
|
22
|
+
callGenerateAudio?: (args: any) => Promise<string>
|
|
23
|
+
callGenerateVideo?: (args: any) => Promise<string>
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface CreateModelTestReturn {
|
|
27
|
+
runTest: (model: string, prompt: string, type?: AIGenerationType) => Promise<ModelTestResult>
|
|
28
|
+
runBatchTest: (models: string[], prompt: string) => Promise<ModelTestResult[]>
|
|
29
|
+
results: () => ModelTestResult[]
|
|
30
|
+
isRunning: () => boolean
|
|
31
|
+
clearResults: () => void
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function createModelTest(options: CreateModelTestOptions = {}): CreateModelTestReturn {
|
|
35
|
+
const [results, setResults] = createSignal<ModelTestResult[]>([])
|
|
36
|
+
const [isRunning, setIsRunning] = createSignal(false)
|
|
37
|
+
|
|
38
|
+
async function runTest(model: string, prompt: string, type: AIGenerationType = 'text'): Promise<ModelTestResult> {
|
|
39
|
+
setIsRunning(true)
|
|
40
|
+
const start = Date.now()
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
let result = ''
|
|
44
|
+
switch (type) {
|
|
45
|
+
case 'text':
|
|
46
|
+
if (!options.callGenerateText) throw new Error('callGenerateText not provided')
|
|
47
|
+
result = await options.callGenerateText({ model, messages: [{ role: 'user', content: prompt }], caller: 'model-test' })
|
|
48
|
+
break
|
|
49
|
+
case 'image':
|
|
50
|
+
if (!options.callGenerateImage) throw new Error('callGenerateImage not provided')
|
|
51
|
+
result = await options.callGenerateImage({ prompt, model })
|
|
52
|
+
break
|
|
53
|
+
case 'audio':
|
|
54
|
+
if (!options.callGenerateAudio) throw new Error('callGenerateAudio not provided')
|
|
55
|
+
result = await options.callGenerateAudio({ prompt })
|
|
56
|
+
break
|
|
57
|
+
case 'video':
|
|
58
|
+
if (!options.callGenerateVideo) throw new Error('callGenerateVideo not provided')
|
|
59
|
+
result = await options.callGenerateVideo({ prompt })
|
|
60
|
+
break
|
|
61
|
+
default:
|
|
62
|
+
throw new Error(`Unsupported test type: ${type}`)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const testResult: ModelTestResult = { model, type, result, durationMs: Date.now() - start, timestamp: Date.now() }
|
|
66
|
+
setResults(prev => [...prev, testResult])
|
|
67
|
+
return testResult
|
|
68
|
+
} catch (err) {
|
|
69
|
+
const testResult: ModelTestResult = { model, type, result: '', durationMs: Date.now() - start, timestamp: Date.now(), error: err instanceof Error ? err.message : 'Test failed' }
|
|
70
|
+
setResults(prev => [...prev, testResult])
|
|
71
|
+
return testResult
|
|
72
|
+
} finally {
|
|
73
|
+
setIsRunning(false)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async function runBatchTest(models: string[], prompt: string): Promise<ModelTestResult[]> {
|
|
78
|
+
setIsRunning(true)
|
|
79
|
+
const batch: ModelTestResult[] = []
|
|
80
|
+
for (const model of models) {
|
|
81
|
+
const r = await runTest(model, prompt)
|
|
82
|
+
batch.push(r)
|
|
83
|
+
}
|
|
84
|
+
setIsRunning(false)
|
|
85
|
+
return batch
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return { runTest, runBatchTest, results, isRunning, clearResults: () => setResults([]) }
|
|
89
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// @geenius-ai/solidjs — src/primitives/createSkills.ts
|
|
2
|
+
|
|
3
|
+
import { createSignal, createMemo } from 'solid-js'
|
|
4
|
+
import type {
|
|
5
|
+
SkillDefinition,
|
|
6
|
+
SkillContext,
|
|
7
|
+
SkillResult,
|
|
8
|
+
SkillCategory,
|
|
9
|
+
} from '@geenius-ai/shared'
|
|
10
|
+
import { BUILT_IN_SKILLS } from '@geenius-ai/shared'
|
|
11
|
+
|
|
12
|
+
export interface CreateSkillsOptions {
|
|
13
|
+
executeFn: (context: SkillContext) => Promise<SkillResult>
|
|
14
|
+
customSkills?: SkillDefinition[]
|
|
15
|
+
defaultModel?: string
|
|
16
|
+
userId?: string
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function createSkills(options: CreateSkillsOptions) {
|
|
20
|
+
const { executeFn, customSkills = [], defaultModel, userId } = options
|
|
21
|
+
const [result, setResult] = createSignal<SkillResult | null>(null)
|
|
22
|
+
const [isExecuting, setIsExecuting] = createSignal(false)
|
|
23
|
+
const [error, setError] = createSignal<Error | null>(null)
|
|
24
|
+
|
|
25
|
+
const allSkills = createMemo(() => {
|
|
26
|
+
const map = new Map<string, SkillDefinition>()
|
|
27
|
+
for (const skill of Object.values(BUILT_IN_SKILLS)) map.set(skill.id, skill)
|
|
28
|
+
for (const skill of customSkills) map.set(skill.id, skill)
|
|
29
|
+
return Array.from(map.values())
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
const byCategory = (category: SkillCategory) =>
|
|
33
|
+
allSkills().filter(s => s.category === category)
|
|
34
|
+
|
|
35
|
+
const search = (query: string) => {
|
|
36
|
+
const q = query.toLowerCase()
|
|
37
|
+
return allSkills().filter(s =>
|
|
38
|
+
s.name.toLowerCase().includes(q) ||
|
|
39
|
+
s.description.toLowerCase().includes(q) ||
|
|
40
|
+
s.tags?.some(t => t.toLowerCase().includes(q))
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const getSkill = (id: string) => allSkills().find(s => s.id === id)
|
|
45
|
+
|
|
46
|
+
const execute = async (
|
|
47
|
+
skillId: string,
|
|
48
|
+
params: Record<string, unknown>,
|
|
49
|
+
context?: Record<string, unknown>,
|
|
50
|
+
) => {
|
|
51
|
+
setIsExecuting(true)
|
|
52
|
+
setError(null)
|
|
53
|
+
try {
|
|
54
|
+
const res = await executeFn({
|
|
55
|
+
skillId,
|
|
56
|
+
params,
|
|
57
|
+
userId,
|
|
58
|
+
context,
|
|
59
|
+
model: defaultModel,
|
|
60
|
+
})
|
|
61
|
+
setResult(res)
|
|
62
|
+
return res
|
|
63
|
+
} catch (err) {
|
|
64
|
+
const e = err instanceof Error ? err : new Error(String(err))
|
|
65
|
+
setError(e)
|
|
66
|
+
throw e
|
|
67
|
+
} finally {
|
|
68
|
+
setIsExecuting(false)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
skills: allSkills,
|
|
74
|
+
byCategory,
|
|
75
|
+
search,
|
|
76
|
+
getSkill,
|
|
77
|
+
execute,
|
|
78
|
+
result,
|
|
79
|
+
isExecuting,
|
|
80
|
+
error,
|
|
81
|
+
reset: () => { setResult(null); setError(null) },
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// @geenius-ai/solidjs — src/primitives/createTextToSpeech.ts
|
|
2
|
+
|
|
3
|
+
import { createSignal } from 'solid-js'
|
|
4
|
+
|
|
5
|
+
export interface CreateTextToSpeechOptions {
|
|
6
|
+
callGenerateAudio: (args: any) => Promise<string>
|
|
7
|
+
defaultVoice?: string
|
|
8
|
+
defaultModel?: string
|
|
9
|
+
autoPlay?: boolean
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function createTextToSpeech(options: CreateTextToSpeechOptions) {
|
|
13
|
+
const [isGenerating, setIsGenerating] = createSignal(false)
|
|
14
|
+
const [isSpeaking, setIsSpeaking] = createSignal(false)
|
|
15
|
+
const [error, setError] = createSignal<string | null>(null)
|
|
16
|
+
const [audioUrl, setAudioUrl] = createSignal<string | null>(null)
|
|
17
|
+
let currentAudio: HTMLAudioElement | null = null
|
|
18
|
+
|
|
19
|
+
async function speak(text: string, opts?: { voice?: string; model?: string; speed?: number }) {
|
|
20
|
+
setIsGenerating(true)
|
|
21
|
+
setError(null)
|
|
22
|
+
try {
|
|
23
|
+
const base64 = await options.callGenerateAudio({
|
|
24
|
+
prompt: text,
|
|
25
|
+
voice: opts?.voice ?? options.defaultVoice ?? 'alloy',
|
|
26
|
+
model: opts?.model ?? options.defaultModel,
|
|
27
|
+
speed: opts?.speed,
|
|
28
|
+
})
|
|
29
|
+
const url = base64.startsWith('http') ? base64 : `data:audio/mp3;base64,${base64}`
|
|
30
|
+
setAudioUrl(url)
|
|
31
|
+
|
|
32
|
+
if (options.autoPlay !== false) {
|
|
33
|
+
stop()
|
|
34
|
+
const audio = new Audio(url)
|
|
35
|
+
currentAudio = audio
|
|
36
|
+
setIsSpeaking(true)
|
|
37
|
+
audio.onended = () => setIsSpeaking(false)
|
|
38
|
+
await audio.play()
|
|
39
|
+
}
|
|
40
|
+
return url
|
|
41
|
+
} catch (err) {
|
|
42
|
+
setError(err instanceof Error ? err.message : 'TTS failed')
|
|
43
|
+
throw err
|
|
44
|
+
} finally {
|
|
45
|
+
setIsGenerating(false)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function stop() {
|
|
50
|
+
currentAudio?.pause()
|
|
51
|
+
currentAudio = null
|
|
52
|
+
setIsSpeaking(false)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return { speak, stop, isGenerating, isSpeaking, error, audioUrl, clearError: () => setError(null) }
|
|
56
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// @geenius-ai/solidjs — src/primitives/createVideoGeneration.ts
|
|
2
|
+
|
|
3
|
+
import { createSignal } from 'solid-js'
|
|
4
|
+
|
|
5
|
+
export interface GeneratedVideo {
|
|
6
|
+
url: string
|
|
7
|
+
prompt: string
|
|
8
|
+
model: string
|
|
9
|
+
timestamp: number
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface CreateVideoGenerationOptions {
|
|
13
|
+
callGenerateVideo: (args: any) => Promise<string>
|
|
14
|
+
defaultModel?: string
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function createVideoGeneration(options: CreateVideoGenerationOptions) {
|
|
18
|
+
const [videos, setVideos] = createSignal<GeneratedVideo[]>([])
|
|
19
|
+
const [isGenerating, setIsGenerating] = createSignal(false)
|
|
20
|
+
const [error, setError] = createSignal<string | null>(null)
|
|
21
|
+
|
|
22
|
+
async function generate(prompt: string, opts?: {
|
|
23
|
+
model?: string; duration?: number; aspectRatio?: '16:9' | '9:16' | '1:1'
|
|
24
|
+
startImage?: string; endImage?: string
|
|
25
|
+
}) {
|
|
26
|
+
setIsGenerating(true)
|
|
27
|
+
setError(null)
|
|
28
|
+
try {
|
|
29
|
+
const model = opts?.model ?? options.defaultModel ?? 'minimax/video-01'
|
|
30
|
+
const result = await options.callGenerateVideo({ prompt, model, ...opts })
|
|
31
|
+
setVideos(prev => [{ url: result, prompt, model, timestamp: Date.now() }, ...prev])
|
|
32
|
+
return result
|
|
33
|
+
} catch (err) {
|
|
34
|
+
setError(err instanceof Error ? err.message : 'Video generation failed')
|
|
35
|
+
throw err
|
|
36
|
+
} finally {
|
|
37
|
+
setIsGenerating(false)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
generate, videos, isGenerating, error,
|
|
43
|
+
clearVideos: () => setVideos([]),
|
|
44
|
+
clearError: () => setError(null),
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// @geenius-ai/solidjs — src/primitives/index.ts
|
|
2
|
+
|
|
3
|
+
export { createAI, type CreateAIOptions, type CreateAIReturn } from './createAI'
|
|
4
|
+
export { createChat, type CreateChatOptions, type CreateChatReturn } from './createChat'
|
|
5
|
+
export { createModelTest, type CreateModelTestOptions, type CreateModelTestReturn, type ModelTestResult } from './createModelTest'
|
|
6
|
+
export { createImageGeneration, type CreateImageGenerationOptions, type GeneratedImage } from './createImageGeneration'
|
|
7
|
+
export { createTextToSpeech, type CreateTextToSpeechOptions } from './createTextToSpeech'
|
|
8
|
+
export { createVideoGeneration, type CreateVideoGenerationOptions, type GeneratedVideo } from './createVideoGeneration'
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "bundler",
|
|
6
|
+
"declaration": true,
|
|
7
|
+
"declarationMap": true,
|
|
8
|
+
"sourceMap": true,
|
|
9
|
+
"outDir": "./dist",
|
|
10
|
+
"rootDir": "./src",
|
|
11
|
+
"strict": true,
|
|
12
|
+
"esModuleInterop": true,
|
|
13
|
+
"skipLibCheck": true,
|
|
14
|
+
"forceConsistentCasingInFileNames": true,
|
|
15
|
+
"resolveJsonModule": true,
|
|
16
|
+
"isolatedModules": true,
|
|
17
|
+
"jsx": "preserve",
|
|
18
|
+
"jsxImportSource": "solid-js"
|
|
19
|
+
},
|
|
20
|
+
"include": [
|
|
21
|
+
"src"
|
|
22
|
+
],
|
|
23
|
+
"exclude": [
|
|
24
|
+
"node_modules",
|
|
25
|
+
"dist"
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineConfig } from 'tsup'
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
entry: {
|
|
5
|
+
index: 'src/index.ts',
|
|
6
|
+
'primitives/index': 'src/primitives/index.ts',
|
|
7
|
+
'components/index': 'src/components/index.ts',
|
|
8
|
+
'pages/index': 'src/pages/index.ts',
|
|
9
|
+
},
|
|
10
|
+
format: ['esm'],
|
|
11
|
+
dts: true,
|
|
12
|
+
clean: true,
|
|
13
|
+
sourcemap: true,
|
|
14
|
+
jsx: 'preserve',
|
|
15
|
+
external: [
|
|
16
|
+
'solid-js',
|
|
17
|
+
'convex',
|
|
18
|
+
'convex/react',
|
|
19
|
+
'@geenius-ai/shared',
|
|
20
|
+
],
|
|
21
|
+
})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# ✦ @geenius-ai/solidjs-css\n\n> Geenius AI — SolidJS primitives and components (vanilla CSS variant)\n\n---\n\n## Overview\nBuilt with Steve Jobs-level minimalism and Jony Ive-level craftsmanship, this package is designed to deliver unparalleled developer experience (DX) and rock-solid performance.\n\n## Installation\n\n```bash\npnpm add @geenius-ai/solidjs-css\n```\n\n## Usage\n\n```typescript\nimport { init } from '@geenius-ai/solidjs-css';\n\n// Initialize the module with absolute precision\ninit({\n mode: 'premium',\n});\n```\n\n## Architecture\n- **Zero-config**: It just works.\n- **Strictly Typed**: Fully written in TypeScript for flawless IntelliSense.\n- **Framework Agnostic**: seamlessly integrates into the Geenius ecosystem.\n\n---\n\n*Designed by Antigravity HQ*\n
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@geenius-ai/solidjs-css",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Geenius AI — SolidJS primitives and components (vanilla CSS variant)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.mjs",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.js",
|
|
13
|
+
"types": "./dist/index.d.ts"
|
|
14
|
+
},
|
|
15
|
+
"./styles.css": "./dist/styles.css"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsup",
|
|
19
|
+
"lint": "tsc --noEmit",
|
|
20
|
+
"clean": "rm -rf dist"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist"
|
|
24
|
+
],
|
|
25
|
+
"publishConfig": {
|
|
26
|
+
"access": "public"
|
|
27
|
+
},
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"solid-js": ">=1.6.0"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@geenius-ai/shared": "workspace:*"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"solid-js": "^1.9.5",
|
|
36
|
+
"tsup": "^8.5.1",
|
|
37
|
+
"typescript": "~6.0.2"
|
|
38
|
+
},
|
|
39
|
+
"author": "Antigravity HQ",
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=20.0.0"
|
|
43
|
+
}
|
|
44
|
+
}
|