From d9563d21665cdafa04fc841dc2233914283ebe1b Mon Sep 17 00:00:00 2001 From: AIFlow_ML Date: Tue, 28 Jan 2025 16:13:26 +0700 Subject: [PATCH] fixed all the typing errors. most of the actions had also a bad structur or missing code from the action.ts --- packages/plugin-openai/src/actions/action.ts | 25 ++++++++++++++++--- .../src/actions/analyzeSentimentAction.ts | 7 +++--- .../src/actions/editTextAction.ts | 18 ++++++++----- .../src/actions/generateEmbeddingAction.ts | 19 +++++++------- .../src/actions/generateTextAction.ts | 15 +++++------ .../src/actions/moderateContentAction.ts | 17 ++++++++----- .../src/actions/transcribeAudioAction.ts | 22 +++++++++++----- packages/plugin-openai/src/types.ts | 14 +++++++++-- 8 files changed, 95 insertions(+), 42 deletions(-) diff --git a/packages/plugin-openai/src/actions/action.ts b/packages/plugin-openai/src/actions/action.ts index 4ef92477d31..39a00f5c188 100644 --- a/packages/plugin-openai/src/actions/action.ts +++ b/packages/plugin-openai/src/actions/action.ts @@ -39,9 +39,27 @@ export function validateApiKey(): string { * @returns The response data. * @throws Will throw an error for request failures or rate limits. */ + +export interface OpenAIRequestData { + model: string; + prompt: string; + max_tokens: number; + temperature: number; + [key: string]: unknown; +} + +export interface OpenAIEditRequestData { + model: string; + input: string; + instruction: string; + max_tokens: number; + temperature: number; + [key: string]: unknown; +} + export async function callOpenAiApi( url: string, - data: any, + data: OpenAIRequestData | OpenAIEditRequestData, apiKey: string, ): Promise { try { @@ -55,7 +73,7 @@ export async function callOpenAiApi( const response = await axios.post(url, data, config); return response.data; } catch (error) { - console.error("Error communicating with OpenAI API:", error.message); + console.error("Error communicating with OpenAI API:", error instanceof Error ? error.message : String(error)); if (axios.isAxiosError(error)) { if (error.response?.status === 429) { throw new Error("Rate limit exceeded. Please try again later."); @@ -73,12 +91,13 @@ export async function callOpenAiApi( * @param temperature - The sampling temperature. * @returns The request payload for OpenAI completions. */ + export function buildRequestData( prompt: string, model: string = DEFAULT_MODEL, maxTokens: number = DEFAULT_MAX_TOKENS, temperature: number = DEFAULT_TEMPERATURE, -): Record { +): OpenAIRequestData { return { model, prompt, diff --git a/packages/plugin-openai/src/actions/analyzeSentimentAction.ts b/packages/plugin-openai/src/actions/analyzeSentimentAction.ts index cb922da5100..08aa1f94048 100644 --- a/packages/plugin-openai/src/actions/analyzeSentimentAction.ts +++ b/packages/plugin-openai/src/actions/analyzeSentimentAction.ts @@ -9,21 +9,22 @@ import { export const analyzeSentimentAction: Action = { name: "analyzeSentiment", description: "Analyze sentiment using OpenAI", - async handler(runtime, message, state) { + similes: [], // Added missing required property + async handler(_runtime, message, _state) { const prompt = `Analyze the sentiment of the following text: "${message.content.text?.trim() || ""}"`; validatePrompt(prompt); const apiKey = validateApiKey(); const requestData = buildRequestData(prompt); - const response = await callOpenAiApi( + const response = await callOpenAiApi<{ choices: Array<{ text: string }> }>( "https://api.openai.com/v1/completions", requestData, apiKey, ); return response.choices[0].text.trim(); }, - validate: async (runtime, message) => { + validate: async (runtime, _message) => { return !!runtime.getSetting("OPENAI_API_KEY"); }, examples: [], diff --git a/packages/plugin-openai/src/actions/editTextAction.ts b/packages/plugin-openai/src/actions/editTextAction.ts index 5976e55e041..b74edb3005a 100644 --- a/packages/plugin-openai/src/actions/editTextAction.ts +++ b/packages/plugin-openai/src/actions/editTextAction.ts @@ -3,15 +3,19 @@ import { validatePrompt, validateApiKey, callOpenAiApi, - buildRequestData, } from "./action"; +interface EditResponse { + choices: Array<{ text: string }>; +} + export const editTextAction: Action = { name: "editText", description: "Edit text using OpenAI", - async handler(runtime, message, state) { - const input = message.content.input?.trim() || ""; - const instruction = message.content.instruction?.trim() || ""; + similes: [], + async handler(_runtime, message, _state) { + const input = (message.content.input as string)?.trim() || ""; + const instruction = (message.content.instruction as string)?.trim() || ""; validatePrompt(input); validatePrompt(instruction); @@ -20,16 +24,18 @@ export const editTextAction: Action = { model: "text-davinci-edit-001", input, instruction, + max_tokens: 1000, + temperature: 0.7, }; - const response = await callOpenAiApi( + const response = await callOpenAiApi( "https://api.openai.com/v1/edits", requestData, apiKey, ); return response.choices[0].text.trim(); }, - validate: async (runtime, message) => { + validate: async (runtime, _message) => { return !!runtime.getSetting("OPENAI_API_KEY"); }, examples: [], diff --git a/packages/plugin-openai/src/actions/generateEmbeddingAction.ts b/packages/plugin-openai/src/actions/generateEmbeddingAction.ts index 7990106c510..2ade5f3c471 100644 --- a/packages/plugin-openai/src/actions/generateEmbeddingAction.ts +++ b/packages/plugin-openai/src/actions/generateEmbeddingAction.ts @@ -9,24 +9,25 @@ import { export const generateEmbeddingAction: Action = { name: "generateEmbedding", description: "Generate embeddings using OpenAI", - async handler(runtime, message, state) { - const input = message.content.text?.trim() || ""; + similes: [], + async handler(_runtime, message, _state) { + const input = (message.content.text as string)?.trim() || ""; validatePrompt(input); const apiKey = validateApiKey(); - const requestData = { - model: "text-embedding-ada-002", - input, - }; + const requestData = buildRequestData( + "text-embedding-ada-002", + input + ); const response = await callOpenAiApi( "https://api.openai.com/v1/embeddings", requestData, apiKey, - ); - return response.data.map((item) => item.embedding); + ) as { data: Array<{ embedding: number[] }> }; + return response.data.map((item: { embedding: number[] }) => item.embedding); }, - validate: async (runtime, message) => { + validate: async (runtime, _message) => { return !!runtime.getSetting("OPENAI_API_KEY"); }, examples: [], diff --git a/packages/plugin-openai/src/actions/generateTextAction.ts b/packages/plugin-openai/src/actions/generateTextAction.ts index 31e50eb9b1d..3b4e35cba63 100644 --- a/packages/plugin-openai/src/actions/generateTextAction.ts +++ b/packages/plugin-openai/src/actions/generateTextAction.ts @@ -9,26 +9,27 @@ import { export const generateTextAction: Action = { name: "generateText", description: "Generate text using OpenAI", - async handler(runtime, message, state) { - const prompt = message.content.text?.trim() || ""; + similes: [], + async handler(_runtime, message, _state) { + const prompt = (message.content.text as string)?.trim() || ""; validatePrompt(prompt); const apiKey = validateApiKey(); const requestData = buildRequestData( + String(message.content.model), prompt, - message.content.model, - message.content.maxTokens, - message.content.temperature, + typeof message.content.maxTokens === 'number' ? message.content.maxTokens : undefined, + typeof message.content.temperature === 'number' ? message.content.temperature : undefined, ); const response = await callOpenAiApi( "https://api.openai.com/v1/completions", requestData, apiKey, - ); + ) as { choices: Array<{ text: string }> }; return { text: response.choices[0].text.trim() }; }, - validate: async (runtime, message) => { + validate: async (runtime, _message) => { return !!runtime.getSetting("OPENAI_API_KEY"); }, examples: [], diff --git a/packages/plugin-openai/src/actions/moderateContentAction.ts b/packages/plugin-openai/src/actions/moderateContentAction.ts index 07d3aacd8cf..c2085ee4e07 100644 --- a/packages/plugin-openai/src/actions/moderateContentAction.ts +++ b/packages/plugin-openai/src/actions/moderateContentAction.ts @@ -1,25 +1,30 @@ import type { Action } from "@elizaos/core"; -import { validatePrompt, validateApiKey, callOpenAiApi } from "./action"; +import { validatePrompt, validateApiKey, callOpenAiApi, buildRequestData } from "./action"; export const moderateContentAction: Action = { name: "moderateContent", description: "Moderate content using OpenAI", - async handler(runtime, message, state) { - const input = message.content.text?.trim() || ""; + similes: [], + async handler(_runtime, message, _state) { + const input = (message.content.text as string)?.trim() || ""; validatePrompt(input); const apiKey = validateApiKey(); - const requestData = { input }; + const requestData = buildRequestData( + "text-moderation-latest", + input + ); const response = await callOpenAiApi( "https://api.openai.com/v1/moderations", requestData, apiKey, - ); + ) as { results: Array<{ flagged: boolean; categories: Record; category_scores: Record }> }; return response.results; }, - validate: async (runtime, message) => { + validate: async (runtime, _message) => { return !!runtime.getSetting("OPENAI_API_KEY"); }, examples: [], }; + \ No newline at end of file diff --git a/packages/plugin-openai/src/actions/transcribeAudioAction.ts b/packages/plugin-openai/src/actions/transcribeAudioAction.ts index 101f44438d0..a2eeb499ec6 100644 --- a/packages/plugin-openai/src/actions/transcribeAudioAction.ts +++ b/packages/plugin-openai/src/actions/transcribeAudioAction.ts @@ -1,10 +1,16 @@ import type { Action } from "@elizaos/core"; -import { validateApiKey, callOpenAiApi } from "./action"; +import { + validateApiKey, + callOpenAiApi, + buildRequestData, + type OpenAIRequestData +} from "./action"; export const transcribeAudioAction: Action = { name: "transcribeAudio", description: "Transcribe audio using OpenAI Whisper", - async handler(runtime, message, state) { + similes: [], + async handler(_runtime, message, _state) { const file = message.content.file; if (!file) { throw new Error("No audio file provided"); @@ -12,17 +18,21 @@ export const transcribeAudioAction: Action = { const apiKey = validateApiKey(); const formData = new FormData(); - formData.append("file", file); + formData.append("file", file as Blob); formData.append("model", "whisper-1"); + interface TranscriptionResponse { + text: string; + } + const response = await callOpenAiApi( "https://api.openai.com/v1/audio/transcriptions", - formData, + formData as unknown as OpenAIRequestData, apiKey, - ); + ) as TranscriptionResponse; return response.text; }, - validate: async (runtime, message) => { + validate: async (runtime, _message) => { return !!runtime.getSetting("OPENAI_API_KEY"); }, examples: [], diff --git a/packages/plugin-openai/src/types.ts b/packages/plugin-openai/src/types.ts index c09381d164e..cfa07191eba 100644 --- a/packages/plugin-openai/src/types.ts +++ b/packages/plugin-openai/src/types.ts @@ -14,7 +14,12 @@ export interface OpenAITextResponse { choices: Array<{ text: string; index: number; - logprobs: null | any; + logprobs: null | { + tokens: string[]; + token_logprobs: number[]; + top_logprobs: Record[]; + text_offset: number[]; + }; finish_reason: string; }>; usage: { @@ -59,7 +64,12 @@ export interface OpenAISentimentAnalysisResponse { choices: Array<{ text: string; index: number; - logprobs: null | any; + logprobs: null | { + tokens: string[]; + token_logprobs: number[]; + top_logprobs: Record[]; + text_offset: number[]; + }; finish_reason: string; }>; }