@drodil/backstage-plugin-qeta-backend-module-openai 3.30.0 → 3.30.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAIHandler.cjs.js","sources":["../src/OpenAIHandler.ts"],"sourcesContent":["/*\n * SPDX-FileCopyrightText: Copyright 2024 OP Financial Group (https://op.fi). All Rights Reserved.\n * SPDX-License-Identifier: LicenseRef-OpAllRightsReserved\n */\nimport { AIHandler } from '@drodil/backstage-plugin-qeta-node';\nimport {\n BackstageCredentials,\n BackstageUserPrincipal,\n LoggerService,\n} from '@backstage/backend-plugin-api';\nimport {\n AIResponse,\n Article,\n Question,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { Config } from '@backstage/config';\nimport { OpenAI } from 'openai';\n\nexport class OpenAIHandler implements AIHandler {\n private readonly model: string;\n private readonly maxTokens?: number;\n private readonly temperature?: number;\n private readonly systemPrompt?: string;\n private readonly userPromptPrefix?: string;\n private readonly userPromptSuffix?: string;\n\n constructor(\n private readonly logger: LoggerService,\n private readonly config: Config,\n ) {\n this.model =\n this.config.getOptionalString('qeta.openai.model') ?? 'gpt-3.5-turbo';\n this.maxTokens = this.config.getOptionalNumber('qeta.openai.maxTokens');\n this.temperature = this.config.getOptionalNumber('qeta.openai.temperature');\n this.systemPrompt = this.config.getOptionalString(\n 'qeta.openai.prompts.system',\n );\n this.userPromptPrefix = this.config.getOptionalString(\n 'qeta.openai.prompts.userPrefix',\n );\n this.userPromptSuffix = this.config.getOptionalString(\n 'qeta.openai.prompts.userSuffix',\n );\n }\n\n async answerExistingQuestion(\n question: Question,\n options?: {\n credentials?: BackstageCredentials<BackstageUserPrincipal>;\n },\n ): Promise<AIResponse> {\n const enabled = this.config.getOptionalBoolean(\n 'qeta.openai.answer.existingQuestions',\n );\n if (enabled === false) {\n throw new Error('OpenAI is disabled for existing questions');\n }\n\n this.logger.info(`Answering question ${question.id} using OpenAI`);\n\n const prompt = `${question.title}\\n${question.content}`;\n const completion = await this.getCompletion(\n prompt,\n options?.credentials?.principal.userEntityRef,\n );\n\n return { answer: completion };\n }\n\n async answerNewQuestion(\n title: string,\n content: string,\n options?: { credentials?: BackstageCredentials<BackstageUserPrincipal> },\n ): Promise<AIResponse> {\n const enabled = this.config.getOptionalBoolean(\n 'qeta.openai.answer.newQuestions',\n );\n if (enabled === false) {\n throw new Error('OpenAI is disabled for new questions');\n }\n\n this.logger.info(`Answering question ${title} using OpenAI`);\n\n const prompt = `${title}\\n${content}`;\n const completion = await this.getCompletion(\n prompt,\n options?.credentials?.principal.userEntityRef,\n );\n return { answer: completion };\n }\n\n async summarizeArticle(\n article: Article,\n options?: { credentials?: BackstageCredentials<BackstageUserPrincipal> },\n ): Promise<AIResponse> {\n const enabled = this.config.getOptionalBoolean(\n 'qeta.openai.answer.articleSummary',\n );\n if (enabled === false) {\n throw new Error('OpenAI is disabled for article summaries');\n }\n\n this.logger.info(`Summarizing article ${article.id} using OpenAI`);\n const prompt = `Can you summarize this article?\\nTitle: ${article.title}\\nContent: ${article.content}`;\n const completion = await this.getCompletion(\n prompt,\n options?.credentials?.principal.userEntityRef,\n );\n\n return { answer: completion };\n }\n\n async suggestTags(\n title: string,\n content: string,\n options?: { credentials?: BackstageCredentials<BackstageUserPrincipal> },\n ): Promise<{ tags: string[] }> {\n const enabled = this.config.getOptionalBoolean(\n 'qeta.openai.post.tagSuggestions',\n );\n if (enabled === false) {\n throw new Error('OpenAI is disabled for tag suggestions');\n }\n\n this.logger.info(`Suggesting tags for post \"${title}\" using OpenAI`);\n const prompt = `Based on the following post title and content, suggest relevant tags. Always place the most relevant tags first. Tags should be single words, no spaces. Return only a comma-separated list of tags, nothing else.\\nTitle: ${title}\\nContent: ${content}`;\n const completion = await this.getCompletion(\n prompt,\n options?.credentials?.principal.userEntityRef,\n );\n\n console.log('completion', completion);\n\n const tags = completion\n .split(',')\n .map(tag => tag.trim())\n .filter(tag => tag.length > 0);\n\n return { tags };\n }\n\n private async getCompletion(prompt: string, user?: string) {\n const client = this.getClient();\n\n let completion;\n try {\n const messages: Array<OpenAI.ChatCompletionMessageParam> =\n new Array<OpenAI.ChatCompletionMessageParam>();\n if (this.systemPrompt) {\n messages.push({ role: 'system', content: this.systemPrompt });\n }\n const userPrompt: OpenAI.ChatCompletionMessageParam = {\n role: 'user',\n content: `${this.userPromptPrefix ?? ''}${prompt}${\n this.userPromptSuffix ?? ''\n }`,\n };\n messages.push(userPrompt);\n\n completion = await client.chat.completions.create({\n model: this.model,\n messages: messages,\n stream: false,\n max_tokens: this.maxTokens,\n temperature: this.temperature,\n user,\n n: 1,\n });\n } catch (e) {\n // Hide the real error from users\n this.logger.error(`Error from OpenAI: ${e}`);\n throw new Error('Failed to get response from OpenAI');\n }\n\n if (\n completion.choices.length === 0 ||\n !completion.choices[0].message.content\n ) {\n throw new Error('No response from OpenAI');\n }\n return completion.choices[0].message.content;\n }\n\n private getClient() {\n const apiKey = this.config.getOptionalString('qeta.openai.apiKey');\n const organization = this.config.getOptionalString(\n 'qeta.openai.organization',\n );\n const endpoint = this.config.getOptionalString('qeta.openai.endpoint');\n const project = this.config.getOptionalString('qeta.openai.project');\n\n return new OpenAI({ baseURL: endpoint, apiKey, organization, project });\n }\n}\n"],"names":["OpenAI"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OpenAIHandler.cjs.js","sources":["../src/OpenAIHandler.ts"],"sourcesContent":["/*\n * SPDX-FileCopyrightText: Copyright 2024 OP Financial Group (https://op.fi). All Rights Reserved.\n * SPDX-License-Identifier: LicenseRef-OpAllRightsReserved\n */\nimport { AIHandler } from '@drodil/backstage-plugin-qeta-node';\nimport {\n BackstageCredentials,\n BackstageUserPrincipal,\n LoggerService,\n} from '@backstage/backend-plugin-api';\nimport {\n AIResponse,\n Article,\n Question,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { Config } from '@backstage/config';\nimport { OpenAI } from 'openai';\n\nexport class OpenAIHandler implements AIHandler {\n private readonly model: string;\n private readonly maxTokens?: number;\n private readonly temperature?: number;\n private readonly systemPrompt?: string;\n private readonly userPromptPrefix?: string;\n private readonly userPromptSuffix?: string;\n\n constructor(\n private readonly logger: LoggerService,\n private readonly config: Config,\n ) {\n this.model =\n this.config.getOptionalString('qeta.openai.model') ?? 'gpt-3.5-turbo';\n this.maxTokens = this.config.getOptionalNumber('qeta.openai.maxTokens');\n this.temperature = this.config.getOptionalNumber('qeta.openai.temperature');\n this.systemPrompt = this.config.getOptionalString(\n 'qeta.openai.prompts.system',\n );\n this.userPromptPrefix = this.config.getOptionalString(\n 'qeta.openai.prompts.userPrefix',\n );\n this.userPromptSuffix = this.config.getOptionalString(\n 'qeta.openai.prompts.userSuffix',\n );\n }\n\n async answerExistingQuestion(\n question: Question,\n options?: {\n credentials?: BackstageCredentials<BackstageUserPrincipal>;\n },\n ): Promise<AIResponse> {\n const enabled = this.config.getOptionalBoolean(\n 'qeta.openai.answer.existingQuestions',\n );\n if (enabled === false) {\n throw new Error('OpenAI is disabled for existing questions');\n }\n\n this.logger.info(`Answering question ${question.id} using OpenAI`);\n\n const prompt = `${question.title}\\n${question.content}`;\n const completion = await this.getCompletion(\n prompt,\n options?.credentials?.principal.userEntityRef,\n );\n\n return { answer: completion };\n }\n\n async answerNewQuestion(\n title: string,\n content: string,\n options?: { credentials?: BackstageCredentials<BackstageUserPrincipal> },\n ): Promise<AIResponse> {\n const enabled = this.config.getOptionalBoolean(\n 'qeta.openai.answer.newQuestions',\n );\n if (enabled === false) {\n throw new Error('OpenAI is disabled for new questions');\n }\n\n this.logger.info(`Answering question ${title} using OpenAI`);\n\n const prompt = `${title}\\n${content}`;\n const completion = await this.getCompletion(\n prompt,\n options?.credentials?.principal.userEntityRef,\n );\n return { answer: completion };\n }\n\n async summarizeArticle(\n article: Article,\n options?: { credentials?: BackstageCredentials<BackstageUserPrincipal> },\n ): Promise<AIResponse> {\n const enabled = this.config.getOptionalBoolean(\n 'qeta.openai.answer.articleSummary',\n );\n if (enabled === false) {\n throw new Error('OpenAI is disabled for article summaries');\n }\n\n this.logger.info(`Summarizing article ${article.id} using OpenAI`);\n const prompt = `Can you summarize this article?\\nTitle: ${article.title}\\nContent: ${article.content}`;\n const completion = await this.getCompletion(\n prompt,\n options?.credentials?.principal.userEntityRef,\n );\n\n return { answer: completion };\n }\n\n async suggestTags(\n title: string,\n content: string,\n options?: { credentials?: BackstageCredentials<BackstageUserPrincipal> },\n ): Promise<{ tags: string[] }> {\n const enabled = this.config.getOptionalBoolean(\n 'qeta.openai.post.tagSuggestions',\n );\n if (enabled === false) {\n throw new Error('OpenAI is disabled for tag suggestions');\n }\n\n this.logger.info(`Suggesting tags for post \"${title}\" using OpenAI`);\n const prompt = `Based on the following post title and content, suggest relevant tags. Always place the most relevant tags first. Tags should be single words, no spaces. Return only a comma-separated list of tags, nothing else.\\nTitle: ${title}\\nContent: ${content}`;\n const completion = await this.getCompletion(\n prompt,\n options?.credentials?.principal.userEntityRef,\n );\n\n const tags = completion\n .split(',')\n .map(tag => tag.trim())\n .filter(tag => tag.length > 0);\n\n return { tags };\n }\n\n private async getCompletion(prompt: string, user?: string) {\n const client = this.getClient();\n\n let completion;\n try {\n const messages: Array<OpenAI.ChatCompletionMessageParam> =\n new Array<OpenAI.ChatCompletionMessageParam>();\n if (this.systemPrompt) {\n messages.push({ role: 'system', content: this.systemPrompt });\n }\n const userPrompt: OpenAI.ChatCompletionMessageParam = {\n role: 'user',\n content: `${this.userPromptPrefix ?? ''}${prompt}${\n this.userPromptSuffix ?? ''\n }`,\n };\n messages.push(userPrompt);\n\n completion = await client.chat.completions.create({\n model: this.model,\n messages: messages,\n stream: false,\n max_tokens: this.maxTokens,\n temperature: this.temperature,\n user,\n n: 1,\n });\n } catch (e) {\n // Hide the real error from users\n this.logger.error(`Error from OpenAI: ${e}`);\n throw new Error('Failed to get response from OpenAI');\n }\n\n if (\n completion.choices.length === 0 ||\n !completion.choices[0].message.content\n ) {\n throw new Error('No response from OpenAI');\n }\n return completion.choices[0].message.content;\n }\n\n private getClient() {\n const apiKey = this.config.getOptionalString('qeta.openai.apiKey');\n const organization = this.config.getOptionalString(\n 'qeta.openai.organization',\n );\n const endpoint = this.config.getOptionalString('qeta.openai.endpoint');\n const project = this.config.getOptionalString('qeta.openai.project');\n\n return new OpenAI({ baseURL: endpoint, apiKey, organization, project });\n }\n}\n"],"names":["OpenAI"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@drodil/backstage-plugin-qeta-backend-module-openai",
|
|
3
3
|
"description": "The OpenAI backend module for the qeta plugin.",
|
|
4
|
-
"version": "3.30.
|
|
4
|
+
"version": "3.30.2",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"license": "MIT",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"@backstage/backend-plugin-api": "^1.3.1",
|
|
42
42
|
"@backstage/config": "^1.3.2",
|
|
43
43
|
"@backstage/types": "^1.2.1",
|
|
44
|
-
"@drodil/backstage-plugin-qeta-common": "^3.30.
|
|
45
|
-
"@drodil/backstage-plugin-qeta-node": "^3.30.
|
|
44
|
+
"@drodil/backstage-plugin-qeta-common": "^3.30.2",
|
|
45
|
+
"@drodil/backstage-plugin-qeta-node": "^3.30.2",
|
|
46
46
|
"openai": "^4.68.4"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|