From ca1866a8b1c7555b494e1b9b21d62d5a3672a6c1 Mon Sep 17 00:00:00 2001 From: Lars Grammel Date: Mon, 15 Jan 2024 08:15:26 +0100 Subject: [PATCH] v0.127.0 --- CHANGELOG.md | 55 +++++++++++++++++++ examples/babyagi-agent/package.json | 2 +- examples/basic/package.json | 2 +- ...-stream-structure-full-response-example.ts | 51 +++++++++++++++++ ...a-completion-generate-structure-example.ts | 1 - examples/chatbot-next-js/package.json | 2 +- examples/cloudflare-workers/package.json | 2 +- examples/image-generator-next-js/package.json | 2 +- .../middle-school-math-agent/package.json | 2 +- examples/pdf-chat-terminal/package.json | 2 +- examples/pdf-to-tweet/package.json | 2 +- .../package.json | 2 +- examples/voice-recording-next-js/package.json | 2 +- examples/wikipedia-agent/package.json | 2 +- packages/@modelfusion-pinecone/package.json | 2 +- packages/@modelfusion-sqlite-vss/package.json | 2 +- packages/@modelfusion-vercel-ai/package.json | 2 +- .../modelfusion-experimental/package.json | 2 +- packages/modelfusion/package.json | 2 +- pnpm-lock.yaml | 40 +++++++------- test-environments/commonjs/package.json | 2 +- tools/google-custom-search-tool/package.json | 2 +- tools/mathjs-tool/package.json | 2 +- tools/mediawiki-search-tool/package.json | 2 +- tools/serpapi-tool/package.json | 2 +- 25 files changed, 147 insertions(+), 42 deletions(-) create mode 100644 examples/basic/src/model-provider/ollama/ollama-chat-stream-structure-full-response-example.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 019f68e7d..ff414f13c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,60 @@ # Changelog +## v0.127.0 - 2024-01-15 + +### Changed + +- **breaking change**: `streamStructure` returns an async iterable over deep partial objects. If you need to get the fully validated final result, you can use the `fullResponse: true` option and await the `structurePromise` value. Example: + + ```ts + const { structureStream, structurePromise } = await streamStructure({ + model: ollama + .ChatTextGenerator({ + model: "openhermes2.5-mistral", + maxGenerationTokens: 1024, + temperature: 0, + }) + .asStructureGenerationModel(jsonStructurePrompt.text()), + + schema: zodSchema( + z.object({ + characters: z.array( + z.object({ + name: z.string(), + class: z + .string() + .describe("Character class, e.g. warrior, mage, or thief."), + description: z.string(), + }) + ), + }) + ), + + prompt: + "Generate 3 character descriptions for a fantasy role playing game.", + + fullResponse: true, + }); + + for await (const partialStructure of structureStream) { + console.clear(); + console.log(partialStructure); + } + + const structure = await structurePromise; + + console.clear(); + console.log("FINAL STRUCTURE"); + console.log(structure); + ``` + +- **breaking change**: Renamed `text` value in `streamText` with `fullResponse: true` to `textPromise`. + +### Fixed + +- Ollama streaming. +- Ollama structure generation and streaming. + ## v0.126.0 - 2024-01-15 ### Changed diff --git a/examples/babyagi-agent/package.json b/examples/babyagi-agent/package.json index 084d8e8a4..d31c69410 100644 --- a/examples/babyagi-agent/package.json +++ b/examples/babyagi-agent/package.json @@ -12,7 +12,7 @@ "commander": "10.0.1", "dotenv": "16.3.1", "jsdom": "^22.1.0", - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "serpapi": "^2.0.0" }, "devDependencies": { diff --git a/examples/basic/package.json b/examples/basic/package.json index f5cd0061f..0fec05f8b 100644 --- a/examples/basic/package.json +++ b/examples/basic/package.json @@ -12,7 +12,7 @@ "@pinecone-database/pinecone": "0.1.6", "dotenv": "16.3.1", "secure-json-parse": "2.7.0", - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "modelfusion-experimental": "0.5.0", "nanoid": "3.3.6", "better-sqlite3": "9.0.0", diff --git a/examples/basic/src/model-provider/ollama/ollama-chat-stream-structure-full-response-example.ts b/examples/basic/src/model-provider/ollama/ollama-chat-stream-structure-full-response-example.ts new file mode 100644 index 000000000..c2208782b --- /dev/null +++ b/examples/basic/src/model-provider/ollama/ollama-chat-stream-structure-full-response-example.ts @@ -0,0 +1,51 @@ +import { + jsonStructurePrompt, + ollama, + streamStructure, + zodSchema, +} from "modelfusion"; +import { z } from "zod"; + +async function main() { + const { structureStream, structurePromise } = await streamStructure({ + model: ollama + .ChatTextGenerator({ + model: "openhermes2.5-mistral", + maxGenerationTokens: 1024, + temperature: 0, + }) + .asStructureGenerationModel(jsonStructurePrompt.text()), + + schema: zodSchema( + z.object({ + characters: z.array( + z.object({ + name: z.string(), + class: z + .string() + .describe("Character class, e.g. warrior, mage, or thief."), + description: z.string(), + }) + ), + }) + ), + + prompt: + "Generate 3 character descriptions for a fantasy role playing game.", + + fullResponse: true, + }); + + for await (const partialStructure of structureStream) { + console.clear(); + console.log(partialStructure); + } + + const structure = await structurePromise; + + console.clear(); + console.log("FINAL STRUCTURE"); + console.log(structure); +} + +main().catch(console.error); diff --git a/examples/basic/src/model-provider/ollama/ollama-completion-generate-structure-example.ts b/examples/basic/src/model-provider/ollama/ollama-completion-generate-structure-example.ts index 0ba2f8b68..8f6d1fe46 100644 --- a/examples/basic/src/model-provider/ollama/ollama-completion-generate-structure-example.ts +++ b/examples/basic/src/model-provider/ollama/ollama-completion-generate-structure-example.ts @@ -15,7 +15,6 @@ async function main() { raw: true, // required when using custom prompt template maxGenerationTokens: 1024, temperature: 0, - format: "json", stopSequences: ["\n\n"], // prevent infinite generation }) .asStructureGenerationModel(jsonStructurePrompt.text()), diff --git a/examples/chatbot-next-js/package.json b/examples/chatbot-next-js/package.json index a11b3977a..3816ed291 100644 --- a/examples/chatbot-next-js/package.json +++ b/examples/chatbot-next-js/package.json @@ -20,7 +20,7 @@ "@emotion/styled": "11.10.8", "@mui/icons-material": "5.11.16", "@mui/material": "5.12.2", - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "modelfusion-experimental": "0.5.0", "next": "13.5.1", "react": "18.2.0", diff --git a/examples/cloudflare-workers/package.json b/examples/cloudflare-workers/package.json index 0bd619f5b..0ea277c30 100644 --- a/examples/cloudflare-workers/package.json +++ b/examples/cloudflare-workers/package.json @@ -15,6 +15,6 @@ "wrangler": "^3.22.1" }, "dependencies": { - "modelfusion": "0.126.0" + "modelfusion": "0.127.0" } } diff --git a/examples/image-generator-next-js/package.json b/examples/image-generator-next-js/package.json index 7b15b8849..b29373046 100644 --- a/examples/image-generator-next-js/package.json +++ b/examples/image-generator-next-js/package.json @@ -20,7 +20,7 @@ "dependencies": { "@emotion/react": "^11.11.0", "@emotion/styled": "^11.11.0", - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "next": "13.5.1", "react": "18.2.0", "react-dom": "18.2.0" diff --git a/examples/middle-school-math-agent/package.json b/examples/middle-school-math-agent/package.json index 5540659ce..56fff2d6a 100644 --- a/examples/middle-school-math-agent/package.json +++ b/examples/middle-school-math-agent/package.json @@ -9,7 +9,7 @@ }, "dependencies": { "@modelfusion/mathjs-tool": "0.1.1", - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "dotenv": "16.3.1", "zod": "3.22.4" }, diff --git a/examples/pdf-chat-terminal/package.json b/examples/pdf-chat-terminal/package.json index 865ed74b2..99e051623 100644 --- a/examples/pdf-chat-terminal/package.json +++ b/examples/pdf-chat-terminal/package.json @@ -9,7 +9,7 @@ }, "private": true, "dependencies": { - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "commander": "10.0.1", "dotenv": "16.3.1", "pdfjs-dist": "3.6.172" diff --git a/examples/pdf-to-tweet/package.json b/examples/pdf-to-tweet/package.json index 7fa9fb0f8..ce85a3c9e 100644 --- a/examples/pdf-to-tweet/package.json +++ b/examples/pdf-to-tweet/package.json @@ -9,7 +9,7 @@ }, "private": true, "dependencies": { - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "modelfusion-experimental": "0.5.0", "commander": "10.0.1", "dotenv": "16.3.1", diff --git a/examples/speech-streaming-vite-react-fastify/package.json b/examples/speech-streaming-vite-react-fastify/package.json index 9261284ae..84fc24b76 100644 --- a/examples/speech-streaming-vite-react-fastify/package.json +++ b/examples/speech-streaming-vite-react-fastify/package.json @@ -19,7 +19,7 @@ "clsx": "^2.0.0", "dotenv": "16.3.1", "fastify": "^4.23.2", - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "modelfusion-experimental": "0.5.0", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/examples/voice-recording-next-js/package.json b/examples/voice-recording-next-js/package.json index 6222a6893..eba9add87 100644 --- a/examples/voice-recording-next-js/package.json +++ b/examples/voice-recording-next-js/package.json @@ -18,7 +18,7 @@ "@emotion/styled": "11.10.8", "@mui/icons-material": "5.11.16", "@mui/material": "5.12.2", - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "modelfusion-experimental": "0.5.0", "formidable": "2.1.1", "next": "13.5.1", diff --git a/examples/wikipedia-agent/package.json b/examples/wikipedia-agent/package.json index 69349a456..f8b0baab2 100644 --- a/examples/wikipedia-agent/package.json +++ b/examples/wikipedia-agent/package.json @@ -14,7 +14,7 @@ "dotenv": "16.3.1", "html-to-text": "9.0.5", "jsdom": "^22.1.0", - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "modelfusion-experimental": "0.5.0", "zod": "3.22.4" }, diff --git a/packages/@modelfusion-pinecone/package.json b/packages/@modelfusion-pinecone/package.json index 0bca9054e..6887fac52 100644 --- a/packages/@modelfusion-pinecone/package.json +++ b/packages/@modelfusion-pinecone/package.json @@ -54,7 +54,7 @@ "@typescript-eslint/parser": "^6.1.0", "eslint": "^8.45.0", "eslint-config-prettier": "9.1.0", - "modelfusion": "0.126.0" + "modelfusion": "0.127.0" }, "peerDependencies": { "modelfusion": ">=0.72.0 <1.0.0-0", diff --git a/packages/@modelfusion-sqlite-vss/package.json b/packages/@modelfusion-sqlite-vss/package.json index f23c2bacf..61480574e 100644 --- a/packages/@modelfusion-sqlite-vss/package.json +++ b/packages/@modelfusion-sqlite-vss/package.json @@ -54,7 +54,7 @@ "@typescript-eslint/parser": "^6.1.0", "eslint": "^8.45.0", "eslint-config-prettier": "9.1.0", - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "sqlite-vss": "^0.1.2", "better-sqlite3": "^9.0.0" }, diff --git a/packages/@modelfusion-vercel-ai/package.json b/packages/@modelfusion-vercel-ai/package.json index c1fbf8d52..6508bb47b 100644 --- a/packages/@modelfusion-vercel-ai/package.json +++ b/packages/@modelfusion-vercel-ai/package.json @@ -56,7 +56,7 @@ "ai": ">= 2.2.27", "eslint": "^8.45.0", "eslint-config-prettier": "9.1.0", - "modelfusion": "0.126.0" + "modelfusion": "0.127.0" }, "peerDependencies": { "modelfusion": ">=0.89.0", diff --git a/packages/modelfusion-experimental/package.json b/packages/modelfusion-experimental/package.json index 4f19a231d..ee9a81851 100644 --- a/packages/modelfusion-experimental/package.json +++ b/packages/modelfusion-experimental/package.json @@ -76,6 +76,6 @@ "eslint": "^8.45.0", "eslint-config-prettier": "9.1.0", "fastify": "^4.0.0", - "modelfusion": "0.126.0" + "modelfusion": "0.127.0" } } diff --git a/packages/modelfusion/package.json b/packages/modelfusion/package.json index 15c7f5ad1..fa7f54ea8 100644 --- a/packages/modelfusion/package.json +++ b/packages/modelfusion/package.json @@ -1,7 +1,7 @@ { "name": "modelfusion", "description": "The TypeScript library for building AI applications.", - "version": "0.126.0", + "version": "0.127.0", "author": "Lars Grammel", "license": "MIT", "keywords": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 01d6d38d4..6a722c5b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -103,7 +103,7 @@ importers: specifier: ^22.1.0 version: 22.1.0 modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist serpapi: specifier: ^2.0.0 @@ -143,7 +143,7 @@ importers: specifier: 16.3.1 version: 16.3.1 modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist modelfusion-experimental: specifier: 0.5.0 @@ -186,7 +186,7 @@ importers: specifier: 5.12.2 version: 5.12.2(@emotion/react@11.10.8)(@emotion/styled@11.10.8)(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0) modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist modelfusion-experimental: specifier: 0.5.0 @@ -229,7 +229,7 @@ importers: examples/cloudflare-workers: dependencies: modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist devDependencies: '@cloudflare/workers-types': @@ -251,7 +251,7 @@ importers: specifier: ^11.11.0 version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.15)(react@18.2.0) modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist next: specifier: 13.5.1 @@ -291,7 +291,7 @@ importers: specifier: 16.3.1 version: 16.3.1 modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist zod: specifier: 3.22.4 @@ -310,7 +310,7 @@ importers: specifier: 16.3.1 version: 16.3.1 modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist pdfjs-dist: specifier: 3.6.172 @@ -329,7 +329,7 @@ importers: specifier: 16.3.1 version: 16.3.1 modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist modelfusion-experimental: specifier: 0.5.0 @@ -369,7 +369,7 @@ importers: specifier: ^4.23.2 version: 4.25.1 modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist modelfusion-experimental: specifier: 0.5.0 @@ -448,7 +448,7 @@ importers: specifier: 2.1.1 version: 2.1.1 modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist modelfusion-experimental: specifier: 0.5.0 @@ -494,7 +494,7 @@ importers: specifier: ^22.1.0 version: 22.1.0 modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist modelfusion-experimental: specifier: 0.5.0 @@ -534,7 +534,7 @@ importers: specifier: 9.1.0 version: 9.1.0(eslint@8.56.0) modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../modelfusion/dist publishDirectory: dist @@ -562,7 +562,7 @@ importers: specifier: 9.1.0 version: 9.1.0(eslint@8.56.0) modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../modelfusion/dist sqlite-vss: specifier: ^0.1.2 @@ -593,7 +593,7 @@ importers: specifier: 9.1.0 version: 9.1.0(eslint@8.56.0) modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../modelfusion/dist publishDirectory: dist @@ -678,7 +678,7 @@ importers: specifier: ^4.0.0 version: 4.25.1 modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../modelfusion/dist publishDirectory: dist @@ -688,7 +688,7 @@ importers: specifier: 16.3.1 version: 16.3.1 modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist test-environments/esm: @@ -718,7 +718,7 @@ importers: specifier: 9.1.0 version: 9.1.0(eslint@8.56.0) modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist zod: specifier: 3.22.4 @@ -747,7 +747,7 @@ importers: specifier: 9.1.0 version: 9.1.0(eslint@8.56.0) modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist zod: specifier: 3.22.4 @@ -772,7 +772,7 @@ importers: specifier: 9.1.0 version: 9.1.0(eslint@8.56.0) modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist zod: specifier: 3.22.4 @@ -801,7 +801,7 @@ importers: specifier: 9.1.0 version: 9.1.0(eslint@8.56.0) modelfusion: - specifier: 0.126.0 + specifier: 0.127.0 version: link:../../packages/modelfusion/dist zod: specifier: 3.22.4 diff --git a/test-environments/commonjs/package.json b/test-environments/commonjs/package.json index 38bb7524d..ebd7b212c 100644 --- a/test-environments/commonjs/package.json +++ b/test-environments/commonjs/package.json @@ -6,7 +6,7 @@ "start": "node src/index.js" }, "dependencies": { - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "dotenv": "16.3.1" } } diff --git a/tools/google-custom-search-tool/package.json b/tools/google-custom-search-tool/package.json index b78484ecf..e68de7de7 100644 --- a/tools/google-custom-search-tool/package.json +++ b/tools/google-custom-search-tool/package.json @@ -55,7 +55,7 @@ "@typescript-eslint/parser": "^6.1.0", "eslint": "^8.45.0", "eslint-config-prettier": "9.1.0", - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "zod": "3.22.4" }, "peerDependencies": { diff --git a/tools/mathjs-tool/package.json b/tools/mathjs-tool/package.json index 30a14acc7..4d56d20ce 100644 --- a/tools/mathjs-tool/package.json +++ b/tools/mathjs-tool/package.json @@ -58,7 +58,7 @@ "@typescript-eslint/parser": "^6.1.0", "eslint": "^8.45.0", "eslint-config-prettier": "9.1.0", - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "zod": "3.22.4" }, "peerDependencies": { diff --git a/tools/mediawiki-search-tool/package.json b/tools/mediawiki-search-tool/package.json index 74f99b804..3ac1533df 100644 --- a/tools/mediawiki-search-tool/package.json +++ b/tools/mediawiki-search-tool/package.json @@ -56,7 +56,7 @@ "@typescript-eslint/parser": "^6.1.0", "eslint": "^8.45.0", "eslint-config-prettier": "9.1.0", - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "zod": "3.22.4" }, "peerDependencies": { diff --git a/tools/serpapi-tool/package.json b/tools/serpapi-tool/package.json index 667df847e..ae01f48ce 100644 --- a/tools/serpapi-tool/package.json +++ b/tools/serpapi-tool/package.json @@ -58,7 +58,7 @@ "@typescript-eslint/parser": "^6.1.0", "eslint": "^8.45.0", "eslint-config-prettier": "9.1.0", - "modelfusion": "0.126.0", + "modelfusion": "0.127.0", "zod": "3.22.4" }, "peerDependencies": {