mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-12 07:36:42 +08:00
d0beab9638
fix AI-298 #### PR Dependency Tree * **PR #13024** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Document and code artifact generation tools now use a single prompt field for user input, enabling more flexible content creation powered by AI. * **Bug Fixes** * Improved error handling for missing prompt templates or providers during document and code artifact generation. * **Refactor** * Simplified input schemas for document and code artifact tools, consolidating multiple input fields into a single prompt. * Output schemas updated to remove metadata and other unused fields for a cleaner result. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import { Logger } from '@nestjs/common';
|
|
import { tool } from 'ai';
|
|
import { z } from 'zod';
|
|
|
|
import type { PromptService } from '../prompt';
|
|
import type { CopilotProviderFactory } from '../providers';
|
|
import { toolError } from './error';
|
|
|
|
const logger = new Logger('DocComposeTool');
|
|
|
|
export const createDocComposeTool = (
|
|
promptService: PromptService,
|
|
factory: CopilotProviderFactory
|
|
) => {
|
|
return tool({
|
|
description:
|
|
'Write a new document with markdown content. This tool creates structured markdown content for documents including titles, sections, and formatting.',
|
|
parameters: z.object({
|
|
title: z.string().describe('The title of the document'),
|
|
userPrompt: z
|
|
.string()
|
|
.describe(
|
|
'The user description of the document, will be used to generate the document'
|
|
),
|
|
}),
|
|
execute: async ({ title, userPrompt }) => {
|
|
try {
|
|
const prompt = await promptService.get('Write an article about this');
|
|
if (!prompt) {
|
|
throw new Error('Prompt not found');
|
|
}
|
|
|
|
const provider = await factory.getProviderByModel(prompt.model);
|
|
|
|
if (!provider) {
|
|
throw new Error('Provider not found');
|
|
}
|
|
|
|
const content = await provider.text(
|
|
{
|
|
modelId: prompt.model,
|
|
},
|
|
[...prompt.finish({}), { role: 'user', content: userPrompt }]
|
|
);
|
|
|
|
return {
|
|
title,
|
|
markdown: content,
|
|
wordCount: content.split(/\s+/).length,
|
|
};
|
|
} catch (err: any) {
|
|
logger.error(`Failed to write document: ${title}`, err);
|
|
return toolError('Doc Write Failed', err.message);
|
|
}
|
|
},
|
|
});
|
|
};
|