feat: new package generate-object
This commit is contained in:
14 files changed
+188
-46
No files matched your search
@@ -29,6 +29,6 @@
|
||||
"test:watch": "vitest"
|
||||
},
|
||||
"dependencies": {
|
||||
"@xsai/shared": "workspace:^"
|
||||
"@xsai/shared": "workspace:"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"name": "@xsai/generate-object",
|
||||
"version": "0.0.10",
|
||||
"type": "module",
|
||||
"author": "藍+85CD",
|
||||
"license": "MIT",
|
||||
"homepage": "https://github.com/moeru-ai/xsai",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/moeru-ai/xsai.git",
|
||||
"directory": "packages/generate-object"
|
||||
},
|
||||
"bugs": "https://github.com/moeru-ai/xsai/issues",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/index.d.ts",
|
||||
"default": "./dist/index.js"
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
"dist"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "pkgroll",
|
||||
"build:watch": "pkgroll --watch",
|
||||
"test": "vitest run",
|
||||
"test:watch": "vitest"
|
||||
},
|
||||
"dependencies": {
|
||||
"@typeschema/main": "catalog:",
|
||||
"@xsai/generate-text": "workspace:",
|
||||
"@xsai/shared": "workspace:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@gcornut/valibot-json-schema": "catalog:",
|
||||
"valibot": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
export { generateObject, generateObject as default, type GenerateObjectOptions, type GenerateObjectResult } from './utils/generate-object'
|
||||
@@ -0,0 +1,43 @@
|
||||
import { type Infer, type Schema, toJSONSchema } from '@typeschema/main'
|
||||
import { generateText, type GenerateTextOptions, type GenerateTextResult } from '@xsai/generate-text'
|
||||
import { clean } from '@xsai/shared'
|
||||
|
||||
export interface GenerateObjectOptions<T extends Schema> extends GenerateTextOptions {
|
||||
schema: T
|
||||
schemaDescription?: string
|
||||
schemaName?: string
|
||||
}
|
||||
|
||||
export interface GenerateObjectResult<T extends Schema> extends Omit<GenerateTextResult, 'text'> {
|
||||
object: Infer<T>
|
||||
}
|
||||
|
||||
/**
|
||||
* @experimental
|
||||
* WIP, test failed
|
||||
*/
|
||||
export const generateObject = async <T extends Schema>(options: GenerateObjectOptions<T>): Promise<GenerateObjectResult<T>> =>
|
||||
await generateText(clean({
|
||||
...options,
|
||||
responseFormat: {
|
||||
jsonSchema: {
|
||||
description: options.schemaDescription,
|
||||
name: options.schemaName ?? 'json_schema',
|
||||
schema: await toJSONSchema(options.schema)
|
||||
.then(json => clean({
|
||||
...json,
|
||||
$schema: undefined,
|
||||
})),
|
||||
strict: true,
|
||||
},
|
||||
type: 'json_schema',
|
||||
},
|
||||
schema: undefined,
|
||||
schemaDescription: undefined,
|
||||
schemaName: undefined,
|
||||
}))
|
||||
.then(({ finishReason, text, usage }) => ({
|
||||
finishReason,
|
||||
object: JSON.parse(text),
|
||||
usage,
|
||||
}))
|
||||
@@ -0,0 +1,28 @@
|
||||
import { object as schemaObject, string } from 'valibot'
|
||||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import { generateObject } from '../src'
|
||||
|
||||
describe('@xsai/generate-object', () => {
|
||||
it('basic', async () => {
|
||||
const { object } = await generateObject({
|
||||
messages: [
|
||||
{
|
||||
content: 'You are a helpful assistant.',
|
||||
role: 'system',
|
||||
},
|
||||
{
|
||||
content: 'This is a test, so please answer \'YES\' and nothing else.',
|
||||
role: 'user',
|
||||
},
|
||||
],
|
||||
model: 'llama3.2',
|
||||
schema: schemaObject({
|
||||
anwser: string(),
|
||||
}),
|
||||
})
|
||||
|
||||
console.log('object:', object)
|
||||
expect(object.anwser).toStrictEqual('YES')
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"extends": "@importantimport/tsconfig/app.json",
|
||||
"include": ["src"]
|
||||
}
|
||||
@@ -29,6 +29,6 @@
|
||||
"test:watch": "vitest"
|
||||
},
|
||||
"dependencies": {
|
||||
"@xsai/shared": "workspace:^"
|
||||
"@xsai/shared": "workspace:"
|
||||
}
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
export const clean = (record: Record<string, undefined | unknown>) => Object.fromEntries(Object.entries(record).filter(([, v]) => !!v))
|
||||
export const clean = <T extends Record<string, undefined | unknown> = Record<string, undefined | unknown>>(record: T) => Object.fromEntries(Object.entries(record).filter(([, v]) => !!v)) as Record<keyof T, Exclude<T[keyof T], unknown>>
|
||||
@@ -29,7 +29,7 @@
|
||||
"test:watch": "vitest"
|
||||
},
|
||||
"dependencies": {
|
||||
"@xsai/generate-text": "workspace:^",
|
||||
"@xsai/shared": "workspace:^"
|
||||
"@xsai/generate-text": "workspace:",
|
||||
"@xsai/shared": "workspace:"
|
||||
}
|
||||
}
|
||||
@@ -32,16 +32,16 @@
|
||||
"test:watch": "vitest"
|
||||
},
|
||||
"dependencies": {
|
||||
"@typeschema/main": "^0.14.1",
|
||||
"@xsai/shared": "workspace:^"
|
||||
"@typeschema/main": "catalog:",
|
||||
"@xsai/shared": "workspace:"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@gcornut/valibot-json-schema": "^0.42.0",
|
||||
"@xsai/generate-text": "workspace:^",
|
||||
"valibot": "1.0.0-beta.8"
|
||||
"@gcornut/valibot-json-schema": "catalog:",
|
||||
"@xsai/generate-text": "workspace:",
|
||||
"valibot": "catalog:"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@xsai/generate-text": "workspace:^"
|
||||
"@xsai/generate-text": "workspace:"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@xsai/generate-text": {
|
||||
|
||||
@@ -27,9 +27,9 @@
|
||||
"build:watch": "pkgroll --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@xsai/embed": "workspace:^",
|
||||
"@xsai/generate-text": "workspace:^",
|
||||
"@xsai/stream-text": "workspace:^",
|
||||
"@xsai/tool": "workspace:^"
|
||||
"@xsai/embed": "workspace:",
|
||||
"@xsai/generate-text": "workspace:",
|
||||
"@xsai/stream-text": "workspace:",
|
||||
"@xsai/tool": "workspace:"
|
||||
}
|
||||
}
|
||||
Generated
+50
-31
@@ -4,6 +4,18 @@ settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
catalogs:
|
||||
default:
|
||||
'@gcornut/valibot-json-schema':
|
||||
specifier: ^0.42.0
|
||||
version: 0.42.0
|
||||
'@typeschema/main':
|
||||
specifier: ^0.14.1
|
||||
version: 0.14.1
|
||||
valibot:
|
||||
specifier: ^0.42.1
|
||||
version: 0.42.1
|
||||
|
||||
importers:
|
||||
|
||||
.:
|
||||
@@ -45,13 +57,32 @@ importers:
|
||||
packages/embed:
|
||||
dependencies:
|
||||
'@xsai/shared':
|
||||
specifier: workspace:^
|
||||
specifier: 'workspace:'
|
||||
version: link:../shared
|
||||
|
||||
packages/generate-object:
|
||||
dependencies:
|
||||
'@typeschema/main':
|
||||
specifier: 'catalog:'
|
||||
version: 0.14.1(@types/json-schema@7.0.15)(@typeschema/valibot@0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.23.1)(typescript@5.6.3))(@types/json-schema@7.0.15)(valibot@0.42.1(typescript@5.6.3)))
|
||||
'@xsai/generate-text':
|
||||
specifier: 'workspace:'
|
||||
version: link:../generate-text
|
||||
'@xsai/shared':
|
||||
specifier: 'workspace:'
|
||||
version: link:../shared
|
||||
devDependencies:
|
||||
'@gcornut/valibot-json-schema':
|
||||
specifier: 'catalog:'
|
||||
version: 0.42.0(esbuild@0.23.1)(typescript@5.6.3)
|
||||
valibot:
|
||||
specifier: 'catalog:'
|
||||
version: 0.42.1(typescript@5.6.3)
|
||||
|
||||
packages/generate-text:
|
||||
dependencies:
|
||||
'@xsai/shared':
|
||||
specifier: workspace:^
|
||||
specifier: 'workspace:'
|
||||
version: link:../shared
|
||||
|
||||
packages/shared: {}
|
||||
@@ -59,44 +90,44 @@ importers:
|
||||
packages/stream-text:
|
||||
dependencies:
|
||||
'@xsai/generate-text':
|
||||
specifier: workspace:^
|
||||
specifier: 'workspace:'
|
||||
version: link:../generate-text
|
||||
'@xsai/shared':
|
||||
specifier: workspace:^
|
||||
specifier: 'workspace:'
|
||||
version: link:../shared
|
||||
|
||||
packages/tool:
|
||||
dependencies:
|
||||
'@typeschema/main':
|
||||
specifier: ^0.14.1
|
||||
version: 0.14.1(@types/json-schema@7.0.15)(@typeschema/valibot@0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.23.1)(typescript@5.6.3))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.8(typescript@5.6.3)))
|
||||
specifier: 'catalog:'
|
||||
version: 0.14.1(@types/json-schema@7.0.15)(@typeschema/valibot@0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.23.1)(typescript@5.6.3))(@types/json-schema@7.0.15)(valibot@0.42.1(typescript@5.6.3)))
|
||||
'@xsai/shared':
|
||||
specifier: workspace:^
|
||||
specifier: 'workspace:'
|
||||
version: link:../shared
|
||||
devDependencies:
|
||||
'@gcornut/valibot-json-schema':
|
||||
specifier: ^0.42.0
|
||||
specifier: 'catalog:'
|
||||
version: 0.42.0(esbuild@0.23.1)(typescript@5.6.3)
|
||||
'@xsai/generate-text':
|
||||
specifier: workspace:^
|
||||
specifier: 'workspace:'
|
||||
version: link:../generate-text
|
||||
valibot:
|
||||
specifier: 1.0.0-beta.8
|
||||
version: 1.0.0-beta.8(typescript@5.6.3)
|
||||
specifier: 'catalog:'
|
||||
version: 0.42.1(typescript@5.6.3)
|
||||
|
||||
packages/xsai:
|
||||
dependencies:
|
||||
'@xsai/embed':
|
||||
specifier: workspace:^
|
||||
specifier: 'workspace:'
|
||||
version: link:../embed
|
||||
'@xsai/generate-text':
|
||||
specifier: workspace:^
|
||||
specifier: 'workspace:'
|
||||
version: link:../generate-text
|
||||
'@xsai/stream-text':
|
||||
specifier: workspace:^
|
||||
specifier: 'workspace:'
|
||||
version: link:../stream-text
|
||||
'@xsai/tool':
|
||||
specifier: workspace:^
|
||||
specifier: 'workspace:'
|
||||
version: link:../tool
|
||||
|
||||
packages:
|
||||
@@ -2678,14 +2709,6 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
|
||||
valibot@1.0.0-beta.8:
|
||||
resolution: {integrity: sha512-OPAwJZtowb0j91b+bd77+ny7D1VVzsCzD7Jl9waLUlMprTsfI9Y3HHbW3hAQD7wKDKHsmGEesuiYWaYvcZL2wg==}
|
||||
peerDependencies:
|
||||
typescript: '>=5'
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
|
||||
validate-npm-package-license@3.0.4:
|
||||
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
|
||||
|
||||
@@ -3504,20 +3527,20 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@types/json-schema': 7.0.15
|
||||
|
||||
'@typeschema/main@0.14.1(@types/json-schema@7.0.15)(@typeschema/valibot@0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.23.1)(typescript@5.6.3))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.8(typescript@5.6.3)))':
|
||||
'@typeschema/main@0.14.1(@types/json-schema@7.0.15)(@typeschema/valibot@0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.23.1)(typescript@5.6.3))(@types/json-schema@7.0.15)(valibot@0.42.1(typescript@5.6.3)))':
|
||||
dependencies:
|
||||
'@typeschema/core': 0.14.0(@types/json-schema@7.0.15)
|
||||
optionalDependencies:
|
||||
'@typeschema/valibot': 0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.23.1)(typescript@5.6.3))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.8(typescript@5.6.3))
|
||||
'@typeschema/valibot': 0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.23.1)(typescript@5.6.3))(@types/json-schema@7.0.15)(valibot@0.42.1(typescript@5.6.3))
|
||||
transitivePeerDependencies:
|
||||
- '@types/json-schema'
|
||||
|
||||
'@typeschema/valibot@0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.23.1)(typescript@5.6.3))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.8(typescript@5.6.3))':
|
||||
'@typeschema/valibot@0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.23.1)(typescript@5.6.3))(@types/json-schema@7.0.15)(valibot@0.42.1(typescript@5.6.3))':
|
||||
dependencies:
|
||||
'@typeschema/core': 0.14.0(@types/json-schema@7.0.15)
|
||||
optionalDependencies:
|
||||
'@gcornut/valibot-json-schema': 0.42.0(esbuild@0.23.1)(typescript@5.6.3)
|
||||
valibot: 1.0.0-beta.8(typescript@5.6.3)
|
||||
valibot: 0.42.1(typescript@5.6.3)
|
||||
transitivePeerDependencies:
|
||||
- '@types/json-schema'
|
||||
optional: true
|
||||
@@ -5475,10 +5498,6 @@ snapshots:
|
||||
optionalDependencies:
|
||||
typescript: 5.6.3
|
||||
|
||||
valibot@1.0.0-beta.8(typescript@5.6.3):
|
||||
optionalDependencies:
|
||||
typescript: 5.6.3
|
||||
|
||||
validate-npm-package-license@3.0.4:
|
||||
dependencies:
|
||||
spdx-correct: 3.2.0
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
packages:
|
||||
- docs
|
||||
- packages/*
|
||||
|
||||
catalog:
|
||||
'@typeschema/main': ^0.14.1
|
||||
|
||||
'@gcornut/valibot-json-schema': ^0.42.0
|
||||
valibot: ^0.42.1
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"references": [
|
||||
{ "path": "./packages/embed/tsconfig.json" },
|
||||
{ "path": "./packages/generate-object/tsconfig.json" },
|
||||
{ "path": "./packages/generate-text/tsconfig.json" },
|
||||
{ "path": "./packages/shared/tsconfig.json" },
|
||||
{ "path": "./packages/stream-text/tsconfig.json" },
|
||||
|
||||
Reference in new issue
Block a user