diff --git a/profiles/qwen.json b/profiles/qwen.json index b7ba37a..a531714 100644 --- a/profiles/qwen.json +++ b/profiles/qwen.json @@ -4,12 +4,12 @@ "model": { "api": "qwen", "url": "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation", - "model": "qwen-max" + "model": "qwen-plus" }, "embedding": { "api": "qwen", "url": "https://dashscope.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding", - "model": "text-embedding-v2" + "model": "text-embedding-v3" } } \ No newline at end of file diff --git a/src/agent/prompter.js b/src/agent/prompter.js index d7b21cf..f514ca8 100644 --- a/src/agent/prompter.js +++ b/src/agent/prompter.js @@ -15,6 +15,7 @@ import { GroqCloudAPI } from '../models/groq.js'; import { HuggingFace } from '../models/huggingface.js'; import { Qwen } from "../models/qwen.js"; import { Grok } from "../models/grok.js"; +import {cosineSimilarity} from "../utils/math.js"; export class Prompter { constructor(agent, fp) { @@ -163,7 +164,30 @@ export class Prompter { throw error; } } + async getRelevantSkillDocs(message, select_num) { + let latest_message_embedding = ''; + if(message) //message is not empty, get the relevant skill docs, else return all skill docs + latest_message_embedding = await this.embedding_model.embed(message); + let skill_doc_similarities = Object.keys(this.skill_docs_embeddings) + .map(doc_key => ({ + doc_key, + similarity_score: cosineSimilarity(latest_message_embedding, this.skill_docs_embeddings[doc_key]) + })) + .sort((a, b) => b.similarity_score - a.similarity_score); + + let length = skill_doc_similarities.length; + if (typeof select_num !== 'number' || isNaN(select_num) || select_num < 0) { + select_num = length; + } else { + select_num = Math.min(Math.floor(select_num), length); + } + let selected_docs = skill_doc_similarities.slice(0, select_num); + let relevant_skill_docs = '#### RELEVENT DOCS INFO ###\nThe following functions are listed in descending order of relevance.\n'; + relevant_skill_docs += 'SkillDocs:\n' + relevant_skill_docs += selected_docs.map(doc => `${doc.doc_key}`).join('\n### '); + return relevant_skill_docs; + } async replaceStrings(prompt, messages, examples=null, to_summarize=[], last_goals=null) { prompt = prompt.replaceAll('$NAME', this.agent.name);