AI SDK v5 migration (#14549)

Co-authored-by: Félix Malfait <felix@twenty.com>
This commit is contained in:
Abdul Rahman
2025-09-23 01:43:43 +05:30
committed by GitHub
parent e8121919bd
commit 216d72b5d7
75 changed files with 1347 additions and 841 deletions
@@ -2,13 +2,14 @@ import { Injectable, Logger } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import {
type CoreMessage,
type CoreUserMessage,
type FilePart,
type ImagePart,
LanguageModelUsage,
type ModelMessage,
streamText,
ToolSet,
type UserContent,
UserModelMessage,
} from 'ai';
import { AppPath } from 'twenty-shared/types';
import { getAppPath } from 'twenty-shared/utils';
@@ -40,11 +41,7 @@ import { AgentException, AgentExceptionCode } from './agent.exception';
export interface AgentExecutionResult {
result: object;
usage: {
promptTokens: number;
completionTokens: number;
totalTokens: number;
};
usage: LanguageModelUsage;
}
@Injectable()
@@ -68,14 +65,12 @@ export class AgentExecutionService {
async prepareAIRequestConfig({
messages,
prompt,
system,
agent,
}: {
system: string;
agent: AgentEntity | null;
prompt?: string;
messages?: CoreMessage[];
messages: ModelMessage[];
}) {
try {
if (agent) {
@@ -111,8 +106,7 @@ export class AgentExecutionService {
system,
tools,
model: registeredModel.model,
...(messages && { messages }),
...(prompt && { prompt }),
messages,
maxSteps: AGENT_CONFIG.MAX_STEPS,
...(registeredModel.doesSupportThinking && {
providerOptions: {
@@ -149,7 +143,7 @@ export class AgentExecutionService {
private async buildUserMessage(
userMessage: string,
fileIds: string[],
): Promise<CoreUserMessage> {
): Promise<UserModelMessage> {
const content: Exclude<UserContent, string> = [
{
type: 'text',
@@ -248,22 +242,22 @@ export class AgentExecutionService {
return {
type: 'image',
image: fileBuffer,
mimeType: file.type,
mediaType: file.type,
};
}
return {
type: 'file',
data: fileBuffer,
mimeType: file.type,
mediaType: file.type,
};
}
private mapMessagesToCoreMessages(
messages: AgentChatMessageEntity[],
): CoreMessage[] {
): ModelMessage[] {
return messages
.map(({ role, rawContent }): CoreMessage => {
.map(({ role, rawContent }): ModelMessage => {
if (role === AgentChatMessageRole.USER) {
return {
role: 'user',
@@ -300,7 +294,8 @@ export class AgentExecutionService {
where: { id: agentId },
});
const llmMessages: CoreMessage[] = this.mapMessagesToCoreMessages(messages);
const llmMessages: ModelMessage[] =
this.mapMessagesToCoreMessages(messages);
let contextString = '';