Issue with current documentation:
I see that Memory object takes a config defined by MemoryConfig class, which has 6 fields configuring different modules. Right now I want to change the llm config. Do I need to import all the Config classes and create a MemoryConfig instance in order to achieve it?
Following is what I am doing, but I think there should be a more elegant way.
`
import os
import mem0
from mem0 import Memory
from typing import Optional
from mem0.vector_stores.configs import VectorStoreConfig
from mem0.llms.configs import LlmConfig
from mem0.embeddings.configs import EmbedderConfig
from pydantic import BaseModel, Field, field_validator
class LlmConfig(BaseModel):
provider: str = Field(
description="Provider of the LLM (e.g., 'ollama', 'openai')", default="openai"
)
config: Optional[dict] = Field(
description="Configuration for the specific LLM", default={}
)
@field_validator("config")
def validate_config(cls, v, values):
provider = values.data.get("provider")
if provider in ("openai", "ollama", "groq", "together", "aws_bedrock", "litellm"):
return v
else:
raise ValueError(f"Unsupported LLM provider: {provider}")
class MemoryConfig(BaseModel):
vector_store: VectorStoreConfig = Field(
description="Configuration for the vector store",
default_factory=VectorStoreConfig,
)
llm: LlmConfig = Field(
description="Configuration for the language model",
default_factory=LlmConfig,
)
embedder: EmbedderConfig = Field(
description="Configuration for the embedding model",
default_factory=EmbedderConfig,
)
history_db_path: str = Field(
description="Path to the history database",
default=os.path.join("mem0_dir", "history.db"),
)
collection_name: str = Field(default="mem0", description="Name of the collection")
embedding_model_dims: int = Field(
default=1536, description="Dimensions of the embedding model"
)
custom_llm_config = LlmConfig(provider="openai", config={"model":"kimi","temperature":0.3,"max_tokens":3000, "top_p":0.3})
memory_config = MemoryConfig(llm=custom_llm_config)
os.environ["OPENAI_API_KEY"] = "sk-O1q9KvklLakotmFB02AycfIM9gffBa9M97rUvEzXYMx8hkDQ"
mem = Memory(config=memory_config)
`
Issue with current documentation:
I see that Memory object takes a config defined by MemoryConfig class, which has 6 fields configuring different modules. Right now I want to change the llm config. Do I need to import all the Config classes and create a MemoryConfig instance in order to achieve it?
Following is what I am doing, but I think there should be a more elegant way.
`
import os
import mem0
from mem0 import Memory
from typing import Optional
from mem0.vector_stores.configs import VectorStoreConfig
from mem0.llms.configs import LlmConfig
from mem0.embeddings.configs import EmbedderConfig
from pydantic import BaseModel, Field, field_validator
class LlmConfig(BaseModel):
provider: str = Field(
description="Provider of the LLM (e.g., 'ollama', 'openai')", default="openai"
)
config: Optional[dict] = Field(
description="Configuration for the specific LLM", default={}
)
class MemoryConfig(BaseModel):
vector_store: VectorStoreConfig = Field(
description="Configuration for the vector store",
default_factory=VectorStoreConfig,
)
llm: LlmConfig = Field(
description="Configuration for the language model",
default_factory=LlmConfig,
)
embedder: EmbedderConfig = Field(
description="Configuration for the embedding model",
default_factory=EmbedderConfig,
)
history_db_path: str = Field(
description="Path to the history database",
default=os.path.join("mem0_dir", "history.db"),
)
collection_name: str = Field(default="mem0", description="Name of the collection")
embedding_model_dims: int = Field(
default=1536, description="Dimensions of the embedding model"
)
custom_llm_config = LlmConfig(provider="openai", config={"model":"kimi","temperature":0.3,"max_tokens":3000, "top_p":0.3})
memory_config = MemoryConfig(llm=custom_llm_config)
os.environ["OPENAI_API_KEY"] = "sk-O1q9KvklLakotmFB02AycfIM9gffBa9M97rUvEzXYMx8hkDQ"
mem = Memory(config=memory_config)
`