kopia lustrzana https://github.com/transitive-bullshit/chatgpt-api
feat: add genkit
rodzic
1d953a0ed2
commit
e6263fbeac
|
@ -0,0 +1,37 @@
|
|||
#!/usr/bin/env node
|
||||
import 'dotenv/config'
|
||||
|
||||
import { generate } from '@genkit-ai/ai'
|
||||
import { configureGenkit } from '@genkit-ai/core'
|
||||
import { gpt4o, openAI } from 'genkitx-openai'
|
||||
|
||||
import { WeatherClient } from '../../src/index.js'
|
||||
import { tools } from '../../src/sdks/genkit.js'
|
||||
|
||||
async function main() {
|
||||
const weather = new WeatherClient()
|
||||
|
||||
configureGenkit({
|
||||
plugins: [openAI()]
|
||||
})
|
||||
|
||||
const result = await generate({
|
||||
model: gpt4o,
|
||||
tools: tools(weather),
|
||||
history: [
|
||||
{
|
||||
role: 'system',
|
||||
content: [
|
||||
{
|
||||
text: 'You are a weather assistant. Be as concise as possible.'
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
prompt: [{ text: 'What is the weather in San Francisco?' }]
|
||||
})
|
||||
|
||||
console.log(result)
|
||||
}
|
||||
|
||||
await main()
|
|
@ -24,10 +24,13 @@
|
|||
"test:typecheck": "tsc --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"ai": "^3.1.22",
|
||||
"@ai-sdk/openai": "^0.0.18",
|
||||
"@dexaai/dexter": "^2.0.3",
|
||||
"@genkit-ai/ai": "^0.5.2",
|
||||
"@genkit-ai/core": "^0.5.2",
|
||||
"ai": "^3.1.22",
|
||||
"dotenv": "^16.4.5",
|
||||
"genkitx-openai": "^0.9.0",
|
||||
"zod": "^3.23.3"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,11 @@
|
|||
"types": "./dist/sdks/dexter.d.ts",
|
||||
"import": "./dist/sdks/dexter.js",
|
||||
"default": "./dist/sdks/dexter.js"
|
||||
},
|
||||
"./genkit": {
|
||||
"types": "./dist/sdks/genkit.d.ts",
|
||||
"import": "./dist/sdks/genkit.js",
|
||||
"default": "./dist/sdks/genkit.js"
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
|
@ -68,6 +73,7 @@
|
|||
"devDependencies": {
|
||||
"@dexaai/dexter": "^2.0.3",
|
||||
"@fisch0920/eslint-config": "^1.3.1",
|
||||
"@genkit-ai/ai": "^0.5.2",
|
||||
"@total-typescript/ts-reset": "^0.5.1",
|
||||
"@types/node": "^20.12.7",
|
||||
"ai": "^3.1.22",
|
||||
|
|
1211
pnpm-lock.yaml
1211
pnpm-lock.yaml
Plik diff jest za duży
Load Diff
|
@ -44,6 +44,12 @@
|
|||
- move out to a separate project
|
||||
- agentic
|
||||
- walter
|
||||
- sdks
|
||||
- ai sdk
|
||||
- dexter
|
||||
- genkit
|
||||
- langchain
|
||||
- instructor-js
|
||||
- services
|
||||
- wolfram alpha
|
||||
- midjourney
|
||||
|
|
|
@ -10,7 +10,7 @@ import { assert } from './utils.js'
|
|||
|
||||
export interface Invocable {
|
||||
name: string
|
||||
description?: string
|
||||
description: string
|
||||
inputSchema: z.AnyZodObject
|
||||
methodName: string
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ export function aiFunction<
|
|||
inputSchema
|
||||
}: {
|
||||
name?: string
|
||||
description?: string
|
||||
description: string
|
||||
inputSchema: InputSchema
|
||||
}) {
|
||||
return (
|
||||
|
|
|
@ -3,6 +3,10 @@ import { tool } from 'ai'
|
|||
import type { AIFunctionSet } from '../ai-function-set.js'
|
||||
import { AIToolsProvider } from '../fns.js'
|
||||
|
||||
/**
|
||||
* Converts a set of Agentic stdlib AI functions to an object compatible with
|
||||
* the Vercel AI SDK's `tools` parameter.
|
||||
*/
|
||||
export function tools(tools: AIToolsProvider | AIFunctionSet) {
|
||||
const fns = tools instanceof AIToolsProvider ? tools.functions : tools
|
||||
|
||||
|
|
|
@ -3,6 +3,10 @@ import { createAIFunction } from '@dexaai/dexter'
|
|||
import type { AIFunctionSet } from '../ai-function-set.js'
|
||||
import { AIToolsProvider } from '../fns.js'
|
||||
|
||||
/**
|
||||
* Converts a set of Agentic stdlib AI functions to an array of Dexter-
|
||||
* compatible AI functions.
|
||||
*/
|
||||
export function functions(input: AIToolsProvider | AIFunctionSet) {
|
||||
const fns = input instanceof AIToolsProvider ? input.functions : input
|
||||
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
import { defineTool } from '@genkit-ai/ai'
|
||||
import { z } from 'zod'
|
||||
|
||||
import type { AIFunctionSet } from '../ai-function-set.js'
|
||||
import { AIToolsProvider } from '../fns.js'
|
||||
|
||||
/**
|
||||
* Converts a set of Agentic stdlib AI functions to an array of Genkit-
|
||||
* compatible tools.
|
||||
*/
|
||||
export function tools(input: AIToolsProvider | AIFunctionSet) {
|
||||
const fns = input instanceof AIToolsProvider ? input.functions : input
|
||||
|
||||
return fns.map((fn) =>
|
||||
defineTool(
|
||||
{
|
||||
name: fn.spec.name,
|
||||
description: fn.spec.description,
|
||||
inputSchema: fn.inputSchema,
|
||||
outputSchema: z.any()
|
||||
},
|
||||
fn.impl
|
||||
)
|
||||
)
|
||||
}
|
|
@ -7,8 +7,5 @@ test('WeatherClient.functions', () => {
|
|||
apiKey: 'sk-test'
|
||||
})
|
||||
|
||||
const fns = [...weather.functions]
|
||||
console.log(fns)
|
||||
|
||||
expect(weather.functions.get('getCurrentWeather')).toBeTruthy()
|
||||
expect(weather.functions.get('get_current_weather')).toBeTruthy()
|
||||
})
|
||||
|
|
|
@ -13,7 +13,7 @@ export type RelaxedJsonifiable = Jsonifiable | Record<string, Jsonifiable>
|
|||
|
||||
export interface AIFunctionSpec {
|
||||
name: string
|
||||
description?: string
|
||||
description: string
|
||||
parameters: Record<string, unknown>
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,12 @@ import { defineConfig } from 'tsup'
|
|||
|
||||
export default defineConfig([
|
||||
{
|
||||
entry: ['src/index.ts', 'src/sdks/ai-sdk.ts', 'src/sdks/dexter.ts'],
|
||||
entry: [
|
||||
'src/index.ts',
|
||||
'src/sdks/ai-sdk.ts',
|
||||
'src/sdks/dexter.ts',
|
||||
'src/sdks/genkit.ts'
|
||||
],
|
||||
outDir: 'dist',
|
||||
target: 'node18',
|
||||
platform: 'node',
|
||||
|
|
Ładowanie…
Reference in New Issue