From 39ed967c80a55ad226f662f7e5123f3c79235920 Mon Sep 17 00:00:00 2001 From: usamimeri_renko <1710269958@qq.com> Date: Thu, 2 May 2024 01:48:04 +0800 Subject: [PATCH 01/18] make rag configurable --- config/config2.example.yaml | 1 + metagpt/configs/embedding_config.py | 4 ++++ metagpt/rag/schema.py | 12 +++++++++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/config/config2.example.yaml b/config/config2.example.yaml index 3249f5ae3..6d1148a85 100644 --- a/config/config2.example.yaml +++ b/config/config2.example.yaml @@ -18,6 +18,7 @@ embedding: model: "" api_version: "" embed_batch_size: 100 + dimensions: repair_llm_output: true # when the output is not a valid json, try to repair it diff --git a/metagpt/configs/embedding_config.py b/metagpt/configs/embedding_config.py index 20de47999..f9b41b9dc 100644 --- a/metagpt/configs/embedding_config.py +++ b/metagpt/configs/embedding_config.py @@ -20,11 +20,13 @@ class EmbeddingConfig(YamlModel): --------- api_type: "openai" api_key: "YOU_API_KEY" + dimensions: "YOUR_MODEL_DIMENSIONS" api_type: "azure" api_key: "YOU_API_KEY" base_url: "YOU_BASE_URL" api_version: "YOU_API_VERSION" + dimensions: "YOUR_MODEL_DIMENSIONS" api_type: "gemini" api_key: "YOU_API_KEY" @@ -32,6 +34,7 @@ class EmbeddingConfig(YamlModel): api_type: "ollama" base_url: "YOU_BASE_URL" model: "YOU_MODEL" + dimensions: "YOUR_MODEL_DIMENSIONS" """ api_type: Optional[EmbeddingType] = None @@ -41,6 +44,7 @@ class EmbeddingConfig(YamlModel): model: Optional[str] = None embed_batch_size: Optional[int] = None + dimensions: Optional[int] = None # output dimension of embedding model @field_validator("api_type", mode="before") @classmethod diff --git a/metagpt/rag/schema.py b/metagpt/rag/schema.py index e7b2e5ce9..bedba164c 100644 --- a/metagpt/rag/schema.py +++ b/metagpt/rag/schema.py @@ -12,6 +12,7 @@ from pydantic import BaseModel, ConfigDict, Field, PrivateAttr, model_validator from metagpt.config2 import config from metagpt.configs.embedding_config import EmbeddingType +from metagpt.logs import logger from metagpt.rag.interface import RAGObject @@ -34,16 +35,21 @@ class IndexRetrieverConfig(BaseRetrieverConfig): class FAISSRetrieverConfig(IndexRetrieverConfig): """Config for FAISS-based retrievers.""" - dimensions: int = Field(default=0, description="Dimensionality of the vectors for FAISS index construction.") + dimensions: int = Field( + default=config.embedding.dimensions, description="Dimensionality of the vectors for FAISS index construction." + ) _embedding_type_to_dimensions: ClassVar[dict[EmbeddingType, int]] = { EmbeddingType.GEMINI: 768, - EmbeddingType.OLLAMA: 4096, } @model_validator(mode="after") def check_dimensions(self): - if self.dimensions == 0: + if self.dimensions is None: + if config.embedding.api_type not in self._embedding_type_to_dimensions: + logger.info( + f"You didn't set the dimensions in config when using {config.embedding.api_type}, default to 1536" + ) self.dimensions = self._embedding_type_to_dimensions.get(config.embedding.api_type, 1536) return self From fa8b35cef4fb4de9db2b0f0b79cfe85718e26775 Mon Sep 17 00:00:00 2001 From: usamimeri_renko <1710269958@qq.com> Date: Fri, 3 May 2024 16:46:41 +0800 Subject: [PATCH 02/18] add comment --- config/config2.example.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config2.example.yaml b/config/config2.example.yaml index 6d1148a85..e57ec3ee8 100644 --- a/config/config2.example.yaml +++ b/config/config2.example.yaml @@ -18,7 +18,7 @@ embedding: model: "" api_version: "" embed_batch_size: 100 - dimensions: + dimensions: # output dimension of embedding model repair_llm_output: true # when the output is not a valid json, try to repair it From d4c0678aafbdd9617d1c0096d6e8e21b613c8abe Mon Sep 17 00:00:00 2001 From: seehi <6580@pm.me> Date: Mon, 6 May 2024 14:52:46 +0800 Subject: [PATCH 03/18] fix potential NoneType error --- metagpt/rag/retrievers/bm25_retriever.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/metagpt/rag/retrievers/bm25_retriever.py b/metagpt/rag/retrievers/bm25_retriever.py index 241820cf4..dc75d87b0 100644 --- a/metagpt/rag/retrievers/bm25_retriever.py +++ b/metagpt/rag/retrievers/bm25_retriever.py @@ -40,8 +40,10 @@ class DynamicBM25Retriever(BM25Retriever): self._corpus = [self._tokenizer(node.get_content()) for node in self._nodes] self.bm25 = BM25Okapi(self._corpus) - self._index.insert_nodes(nodes, **kwargs) + if self._index: + self._index.insert_nodes(nodes, **kwargs) def persist(self, persist_dir: str, **kwargs) -> None: """Support persist.""" - self._index.storage_context.persist(persist_dir) + if self._index: + self._index.storage_context.persist(persist_dir) From 53369ee6da1b3b1090bd9399b537ef99f2e5218a Mon Sep 17 00:00:00 2001 From: seehi <6580@pm.me> Date: Mon, 6 May 2024 15:52:18 +0800 Subject: [PATCH 04/18] update comment in rag_pipeline example --- examples/rag_pipeline.py | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/examples/rag_pipeline.py b/examples/rag_pipeline.py index 7dbca35a6..75888e480 100644 --- a/examples/rag_pipeline.py +++ b/examples/rag_pipeline.py @@ -18,13 +18,13 @@ from metagpt.rag.schema import ( ) from metagpt.utils.exceptions import handle_exception +LLM_TIP = "If you not sure, just answer I don't know." + DOC_PATH = EXAMPLE_DATA_PATH / "rag/writer.txt" -QUESTION = "What are key qualities to be a good writer?" +QUESTION = f"What are key qualities to be a good writer? {LLM_TIP}" TRAVEL_DOC_PATH = EXAMPLE_DATA_PATH / "rag/travel.txt" -TRAVEL_QUESTION = "What does Bob like?" - -LLM_TIP = "If you not sure, just answer I don't know." +TRAVEL_QUESTION = f"What does Bob like? {LLM_TIP}" class Player(BaseModel): @@ -40,21 +40,21 @@ class Player(BaseModel): class RAGExample: - """Show how to use RAG. + """Show how to use RAG.""" - Default engine use LLM Reranker, if the answer from the LLM is incorrect, may encounter `IndexError: list index out of range`. - """ - - def __init__(self, engine: SimpleEngine = None): + def __init__(self, engine: SimpleEngine = None, use_llm_ranker: bool = False): self._engine = engine + self._use_llm_ranker = use_llm_ranker @property def engine(self): if not self._engine: + ranker_configs = [LLMRankerConfig()] if self._use_llm_ranker else None + self._engine = SimpleEngine.from_docs( input_files=[DOC_PATH], retriever_configs=[FAISSRetrieverConfig()], - ranker_configs=[LLMRankerConfig()], + ranker_configs=ranker_configs, ) return self._engine @@ -105,7 +105,7 @@ class RAGExample: """ self._print_title("Add Docs") - travel_question = f"{TRAVEL_QUESTION}{LLM_TIP}" + travel_question = f"{TRAVEL_QUESTION}" travel_filepath = TRAVEL_DOC_PATH logger.info("[Before add docs]") @@ -240,8 +240,14 @@ class RAGExample: async def main(): - """RAG pipeline.""" - e = RAGExample() + """RAG pipeline. + + Note: + 1. If `use_llm_ranker` is True, then will use LLM Reranker to get better result, but it is not always guaranteed that the output will be parseable for reranking, + prefer `gpt-4-turbo`, otherwise might encounter `IndexError: list index out of range` or `ValueError: invalid literal for int() with base 10`. + """ + e = RAGExample(use_llm_ranker=False) + await e.run_pipeline() await e.add_docs() await e.add_objects() From 553702fa6131b042c0af272de00860a27e506c31 Mon Sep 17 00:00:00 2001 From: usamimeri_renko <1710269958@qq.com> Date: Tue, 7 May 2024 12:39:18 +0800 Subject: [PATCH 05/18] make dimensions default --- metagpt/rag/schema.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/metagpt/rag/schema.py b/metagpt/rag/schema.py index bedba164c..ccd727687 100644 --- a/metagpt/rag/schema.py +++ b/metagpt/rag/schema.py @@ -35,22 +35,23 @@ class IndexRetrieverConfig(BaseRetrieverConfig): class FAISSRetrieverConfig(IndexRetrieverConfig): """Config for FAISS-based retrievers.""" - dimensions: int = Field( - default=config.embedding.dimensions, description="Dimensionality of the vectors for FAISS index construction." - ) + dimensions: int = Field(default=0, description="Dimensionality of the vectors for FAISS index construction.") _embedding_type_to_dimensions: ClassVar[dict[EmbeddingType, int]] = { EmbeddingType.GEMINI: 768, + EmbeddingType.OLLAMA: 4096, } @model_validator(mode="after") def check_dimensions(self): - if self.dimensions is None: + if self.dimensions == 0: + self.dimensions = config.embedding.dimensions or self._embedding_type_to_dimensions.get( + config.embedding.api_type, 1536 + ) if config.embedding.api_type not in self._embedding_type_to_dimensions: - logger.info( - f"You didn't set the dimensions in config when using {config.embedding.api_type}, default to 1536" + logger.warning( + f"You didn't set dimensions in config when using {config.embedding.api_type}, default to 1536" ) - self.dimensions = self._embedding_type_to_dimensions.get(config.embedding.api_type, 1536) return self From 01833aa997a33d1cf6989accda0d8a0ad318ce79 Mon Sep 17 00:00:00 2001 From: seehi <6580@pm.me> Date: Tue, 7 May 2024 15:43:20 +0800 Subject: [PATCH 06/18] update comment in rag_pipeline example --- examples/rag_pipeline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/rag_pipeline.py b/examples/rag_pipeline.py index 75888e480..fbbc2cc39 100644 --- a/examples/rag_pipeline.py +++ b/examples/rag_pipeline.py @@ -42,7 +42,7 @@ class Player(BaseModel): class RAGExample: """Show how to use RAG.""" - def __init__(self, engine: SimpleEngine = None, use_llm_ranker: bool = False): + def __init__(self, engine: SimpleEngine = None, use_llm_ranker: bool = True): self._engine = engine self._use_llm_ranker = use_llm_ranker From d31d7507ef893e344af52e01ae07eace5b3962df Mon Sep 17 00:00:00 2001 From: usamimeri_renko <1710269958@qq.com> Date: Tue, 7 May 2024 16:27:25 +0800 Subject: [PATCH 07/18] fix --- metagpt/rag/schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metagpt/rag/schema.py b/metagpt/rag/schema.py index ccd727687..618880a22 100644 --- a/metagpt/rag/schema.py +++ b/metagpt/rag/schema.py @@ -48,7 +48,7 @@ class FAISSRetrieverConfig(IndexRetrieverConfig): self.dimensions = config.embedding.dimensions or self._embedding_type_to_dimensions.get( config.embedding.api_type, 1536 ) - if config.embedding.api_type not in self._embedding_type_to_dimensions: + if not config.embedding.dimensions and config.embedding.api_type not in self._embedding_type_to_dimensions: logger.warning( f"You didn't set dimensions in config when using {config.embedding.api_type}, default to 1536" ) From 8695629fce6be6b72c53ec6c6f48d051bdcac6a0 Mon Sep 17 00:00:00 2001 From: huangpeilin Date: Wed, 8 May 2024 19:22:10 +0800 Subject: [PATCH 08/18] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dusage=20?= =?UTF-8?q?=E5=80=BC=E4=B8=BAnone=20=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- metagpt/provider/openai_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metagpt/provider/openai_api.py b/metagpt/provider/openai_api.py index 7957f775c..cc1a4fc8b 100644 --- a/metagpt/provider/openai_api.py +++ b/metagpt/provider/openai_api.py @@ -100,7 +100,7 @@ class OpenAILLM(BaseLLM): log_llm_stream(chunk_message) collected_messages.append(chunk_message) if finish_reason: - if hasattr(chunk, "usage"): + if hasattr(chunk, "usage") and chunk.usage: # Some services have usage as an attribute of the chunk, such as Fireworks usage = CompletionUsage(**chunk.usage) elif hasattr(chunk.choices[0], "usage"): From a473c74c902b4e9e1aa9ac21baaf61e2a92ba6d5 Mon Sep 17 00:00:00 2001 From: huangpeilin Date: Thu, 9 May 2024 11:36:07 +0800 Subject: [PATCH 09/18] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- metagpt/provider/openai_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metagpt/provider/openai_api.py b/metagpt/provider/openai_api.py index cc1a4fc8b..68dc156c2 100644 --- a/metagpt/provider/openai_api.py +++ b/metagpt/provider/openai_api.py @@ -100,7 +100,7 @@ class OpenAILLM(BaseLLM): log_llm_stream(chunk_message) collected_messages.append(chunk_message) if finish_reason: - if hasattr(chunk, "usage") and chunk.usage: + if hasattr(chunk, "usage") and chunk.usage is not None: # Some services have usage as an attribute of the chunk, such as Fireworks usage = CompletionUsage(**chunk.usage) elif hasattr(chunk.choices[0], "usage"): From d4bd66898327b818eb80eb12a7bba25305304e79 Mon Sep 17 00:00:00 2001 From: Kunal Jain Date: Sat, 11 May 2024 19:03:55 +0530 Subject: [PATCH 10/18] fix ask() got an unexpected keyword argument 'images' --- metagpt/provider/human_provider.py | 1 + 1 file changed, 1 insertion(+) diff --git a/metagpt/provider/human_provider.py b/metagpt/provider/human_provider.py index 87dbd105f..a16a49c20 100644 --- a/metagpt/provider/human_provider.py +++ b/metagpt/provider/human_provider.py @@ -33,6 +33,7 @@ class HumanProvider(BaseLLM): format_msgs: Optional[list[dict[str, str]]] = None, generator: bool = False, timeout=USE_CONFIG_TIMEOUT, + **kwargs ) -> str: return self.ask(msg, timeout=self.get_timeout(timeout)) From 82b4be51bdd69000cc1ace7b7140c6c5f2e07ab9 Mon Sep 17 00:00:00 2001 From: usamimeri_renko <1710269958@qq.com> Date: Mon, 13 May 2024 15:00:22 +0800 Subject: [PATCH 11/18] fix schema bug --- metagpt/provider/base_llm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metagpt/provider/base_llm.py b/metagpt/provider/base_llm.py index 6387e3936..e554f7767 100644 --- a/metagpt/provider/base_llm.py +++ b/metagpt/provider/base_llm.py @@ -65,7 +65,7 @@ class BaseLLM(ABC): # image url or image base64 url = image if image.startswith("http") else f"data:image/jpeg;base64,{image}" # it can with multiple-image inputs - content.append({"type": "image_url", "image_url": url}) + content.append({"type": "image_url", "image_url": {"url": url}}) return {"role": "user", "content": content} def _assistant_msg(self, msg: str) -> dict[str, str]: From 133874cc0b2dcc30e759c61fadf036a0f3d0cec7 Mon Sep 17 00:00:00 2001 From: seehi <6580@pm.me> Date: Tue, 14 May 2024 15:56:52 +0800 Subject: [PATCH 12/18] format --- metagpt/rag/benchmark/base.py | 2 +- metagpt/rag/factories/ranker.py | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/metagpt/rag/benchmark/base.py b/metagpt/rag/benchmark/base.py index c1fd297d9..b5d265b35 100644 --- a/metagpt/rag/benchmark/base.py +++ b/metagpt/rag/benchmark/base.py @@ -121,7 +121,7 @@ class RAGBenchmark: return mrr_sum return mrr_sum - + async def semantic_similarity(self, response: str, reference: str) -> float: result = await self.evaluator.aevaluate( response=response, diff --git a/metagpt/rag/factories/ranker.py b/metagpt/rag/factories/ranker.py index b75745a1f..7abda162a 100644 --- a/metagpt/rag/factories/ranker.py +++ b/metagpt/rag/factories/ranker.py @@ -8,11 +8,11 @@ from metagpt.rag.factories.base import ConfigBasedFactory from metagpt.rag.rankers.object_ranker import ObjectSortPostprocessor from metagpt.rag.schema import ( BaseRankerConfig, + BGERerankConfig, + CohereRerankConfig, ColbertRerankConfig, LLMRankerConfig, ObjectRankerConfig, - CohereRerankConfig, - BGERerankConfig ) @@ -60,13 +60,15 @@ class RankerFactory(ConfigBasedFactory): def _create_bge_rerank(self, config: BGERerankConfig, **kwargs) -> LLMRerank: try: - from llama_index.postprocessor.flag_embedding_reranker import FlagEmbeddingReranker + from llama_index.postprocessor.flag_embedding_reranker import ( + FlagEmbeddingReranker, + ) except ImportError: raise ImportError( "`llama-index-postprocessor-flag-embedding-reranker` package not found, please run `pip install llama-index-postprocessor-flag-embedding-reranker`" ) return FlagEmbeddingReranker(**config.model_dump()) - + def _create_object_ranker(self, config: ObjectRankerConfig, **kwargs) -> LLMRerank: return ObjectSortPostprocessor(**config.model_dump()) From 1047abf1f40c6bc460247bba6254c42a6adaa04a Mon Sep 17 00:00:00 2001 From: usamimeri_renko <1710269958@qq.com> Date: Wed, 15 May 2024 15:40:59 +0800 Subject: [PATCH 13/18] add counter --- metagpt/utils/token_counter.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/metagpt/utils/token_counter.py b/metagpt/utils/token_counter.py index 724d49afc..0c7048331 100644 --- a/metagpt/utils/token_counter.py +++ b/metagpt/utils/token_counter.py @@ -37,6 +37,8 @@ TOKEN_COSTS = { "gpt-4-turbo": {"prompt": 0.01, "completion": 0.03}, "gpt-4-vision-preview": {"prompt": 0.01, "completion": 0.03}, # TODO add extra image price calculator "gpt-4-1106-vision-preview": {"prompt": 0.01, "completion": 0.03}, + "gpt-4o": {"prompt": 0.005, "completion": 0.015}, + "gpt-4o-2024-05-13": {"prompt": 0.005, "completion": 0.015}, "text-embedding-ada-002": {"prompt": 0.0004, "completion": 0.0}, "glm-3-turbo": {"prompt": 0.0007, "completion": 0.0007}, # 128k version, prompt + completion tokens=0.005¥/k-tokens "glm-4": {"prompt": 0.014, "completion": 0.014}, # 128k version, prompt + completion tokens=0.1¥/k-tokens @@ -56,11 +58,13 @@ TOKEN_COSTS = { "claude-3-opus-20240229": {"prompt": 0.015, "completion": 0.075}, "yi-34b-chat-0205": {"prompt": 0.0003, "completion": 0.0003}, "yi-34b-chat-200k": {"prompt": 0.0017, "completion": 0.0017}, + "yi-large": {"prompt": 0.0028, "completion": 0.0028}, "microsoft/wizardlm-2-8x22b": {"prompt": 0.00108, "completion": 0.00108}, # for openrouter, start "meta-llama/llama-3-70b-instruct": {"prompt": 0.008, "completion": 0.008}, "llama3-70b-8192": {"prompt": 0.0059, "completion": 0.0079}, "openai/gpt-3.5-turbo-0125": {"prompt": 0.0005, "completion": 0.0015}, "openai/gpt-4-turbo-preview": {"prompt": 0.01, "completion": 0.03}, + "deepseek-chat": {"prompt": 0.00014, "completion": 0.00028}, } @@ -224,6 +228,8 @@ def count_message_tokens(messages, model="gpt-3.5-turbo-0125"): "gpt-4-turbo", "gpt-4-vision-preview", "gpt-4-1106-vision-preview", + "gpt-4o-2024-05-13", + "gpt-4o", }: tokens_per_message = 3 # # every reply is primed with <|start|>assistant<|message|> tokens_per_name = 1 From 400e0af8144ebc6752adfe96334127d8395fef4c Mon Sep 17 00:00:00 2001 From: seehi <6580@pm.me> Date: Wed, 15 May 2024 17:31:44 +0800 Subject: [PATCH 14/18] format --- metagpt/rag/benchmark/base.py | 2 +- metagpt/rag/factories/ranker.py | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/metagpt/rag/benchmark/base.py b/metagpt/rag/benchmark/base.py index c1fd297d9..b5d265b35 100644 --- a/metagpt/rag/benchmark/base.py +++ b/metagpt/rag/benchmark/base.py @@ -121,7 +121,7 @@ class RAGBenchmark: return mrr_sum return mrr_sum - + async def semantic_similarity(self, response: str, reference: str) -> float: result = await self.evaluator.aevaluate( response=response, diff --git a/metagpt/rag/factories/ranker.py b/metagpt/rag/factories/ranker.py index b75745a1f..7abda162a 100644 --- a/metagpt/rag/factories/ranker.py +++ b/metagpt/rag/factories/ranker.py @@ -8,11 +8,11 @@ from metagpt.rag.factories.base import ConfigBasedFactory from metagpt.rag.rankers.object_ranker import ObjectSortPostprocessor from metagpt.rag.schema import ( BaseRankerConfig, + BGERerankConfig, + CohereRerankConfig, ColbertRerankConfig, LLMRankerConfig, ObjectRankerConfig, - CohereRerankConfig, - BGERerankConfig ) @@ -60,13 +60,15 @@ class RankerFactory(ConfigBasedFactory): def _create_bge_rerank(self, config: BGERerankConfig, **kwargs) -> LLMRerank: try: - from llama_index.postprocessor.flag_embedding_reranker import FlagEmbeddingReranker + from llama_index.postprocessor.flag_embedding_reranker import ( + FlagEmbeddingReranker, + ) except ImportError: raise ImportError( "`llama-index-postprocessor-flag-embedding-reranker` package not found, please run `pip install llama-index-postprocessor-flag-embedding-reranker`" ) return FlagEmbeddingReranker(**config.model_dump()) - + def _create_object_ranker(self, config: ObjectRankerConfig, **kwargs) -> LLMRerank: return ObjectSortPostprocessor(**config.model_dump()) From b71ea5f407c268a846eff5fabc0886c7e74a05b4 Mon Sep 17 00:00:00 2001 From: seehi <6580@pm.me> Date: Wed, 15 May 2024 17:40:21 +0800 Subject: [PATCH 15/18] update comment --- examples/rag_pipeline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/rag_pipeline.py b/examples/rag_pipeline.py index fbbc2cc39..5b716ce03 100644 --- a/examples/rag_pipeline.py +++ b/examples/rag_pipeline.py @@ -243,7 +243,7 @@ async def main(): """RAG pipeline. Note: - 1. If `use_llm_ranker` is True, then will use LLM Reranker to get better result, but it is not always guaranteed that the output will be parseable for reranking, + 1. If `use_llm_ranker` is True, then it will use LLM Reranker to get better result, but it is not always guaranteed that the output will be parseable for reranking, prefer `gpt-4-turbo`, otherwise might encounter `IndexError: list index out of range` or `ValueError: invalid literal for int() with base 10`. """ e = RAGExample(use_llm_ranker=False) From 3f54646691a8abf1ee28e26a667d76ba4ddc78d0 Mon Sep 17 00:00:00 2001 From: usamimeri_renko <1710269958@qq.com> Date: Wed, 15 May 2024 17:44:20 +0800 Subject: [PATCH 16/18] add token max and deepseek-coder,gpt-4-turbo-2024-04-09 --- metagpt/utils/token_counter.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/metagpt/utils/token_counter.py b/metagpt/utils/token_counter.py index 0c7048331..8645e6380 100644 --- a/metagpt/utils/token_counter.py +++ b/metagpt/utils/token_counter.py @@ -35,6 +35,7 @@ TOKEN_COSTS = { "gpt-4-1106-preview": {"prompt": 0.01, "completion": 0.03}, "gpt-4-0125-preview": {"prompt": 0.01, "completion": 0.03}, "gpt-4-turbo": {"prompt": 0.01, "completion": 0.03}, + "gpt-4-turbo-2024-04-09": {"prompt": 0.01, "completion": 0.03}, "gpt-4-vision-preview": {"prompt": 0.01, "completion": 0.03}, # TODO add extra image price calculator "gpt-4-1106-vision-preview": {"prompt": 0.01, "completion": 0.03}, "gpt-4o": {"prompt": 0.005, "completion": 0.015}, @@ -65,6 +66,7 @@ TOKEN_COSTS = { "openai/gpt-3.5-turbo-0125": {"prompt": 0.0005, "completion": 0.0015}, "openai/gpt-4-turbo-preview": {"prompt": 0.01, "completion": 0.03}, "deepseek-chat": {"prompt": 0.00014, "completion": 0.00028}, + "deepseek-coder": {"prompt": 0.00014, "completion": 0.00028}, } @@ -159,6 +161,9 @@ FIREWORKS_GRADE_TOKEN_COSTS = { # https://platform.openai.com/docs/models/gpt-4-and-gpt-4-turbo TOKEN_MAX = { + "gpt-4o-2024-05-13": 128000, + "gpt-4o": 128000, + "gpt-4-turbo-2024-04-09": 128000, "gpt-4-0125-preview": 128000, "gpt-4-turbo-preview": 128000, "gpt-4-1106-preview": 128000, @@ -195,11 +200,14 @@ TOKEN_MAX = { "claude-3-opus-20240229": 200000, "yi-34b-chat-0205": 4000, "yi-34b-chat-200k": 200000, + "yi-large": 16385, "microsoft/wizardlm-2-8x22b": 65536, "meta-llama/llama-3-70b-instruct": 8192, "llama3-70b-8192": 8192, "openai/gpt-3.5-turbo-0125": 16385, "openai/gpt-4-turbo-preview": 128000, + "deepseek-chat": 32768, + "deepseek-coder": 16385, } From a754c0bb8c8f6df9b97769f80cccab7df15f1bc1 Mon Sep 17 00:00:00 2001 From: voidking Date: Thu, 16 May 2024 11:20:02 +0800 Subject: [PATCH 17/18] =?UTF-8?q?Pre-commit=E6=B7=BB=E5=8A=A0=E5=88=B0envi?= =?UTF-8?q?ronment?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pre-commit.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml index ed4bbb144..d350a87f1 100644 --- a/.github/workflows/pre-commit.yaml +++ b/.github/workflows/pre-commit.yaml @@ -11,6 +11,7 @@ on: jobs: pre-commit-check: runs-on: ubuntu-latest + environment: pre-commit steps: - name: Checkout Source Code uses: actions/checkout@v2 From b1c1dd24f3f7509b9f3cbb8c74232b3ce0ae444f Mon Sep 17 00:00:00 2001 From: usamimeri_renko <93753250+usamimeri@users.noreply.github.com> Date: Thu, 16 May 2024 15:20:36 +0800 Subject: [PATCH 18/18] Update requirements.txt update tiktoken to 0.7.0 to support gpt-4o --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 6c219a9dc..2b8e1e13f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -26,7 +26,7 @@ PyYAML==6.0.1 # sentence_transformers==2.2.2 setuptools==65.6.3 tenacity==8.2.3 -tiktoken==0.6.0 +tiktoken==0.7.0 tqdm==4.66.2 #unstructured[local-inference] # selenium>4