MCPcopy
hub / github.com/mastra-ai/mastra / searchMessages

Method searchMessages

packages/memory/src/index.ts:1927–2026  ·  view source on GitHub ↗

* Search observation groups across threads by semantic similarity. * Requires a vector store and embedder to be configured.

({
    query,
    resourceId,
    topK = 10,
    filter,
  }: {
    query: string;
    resourceId: string;
    topK?: number;
    filter?: {
      threadId?: string;
      observedAfter?: Date;
      observedBefore?: Date;
    };
  })

Source from the content-addressed store, hash-verified

1925 * Requires a vector store and embedder to be configured.
1926 */
1927 public async searchMessages({
1928 query,
1929 resourceId,
1930 topK = 10,
1931 filter,
1932 }: {
1933 query: string;
1934 resourceId: string;
1935 topK?: number;
1936 filter?: {
1937 threadId?: string;
1938 observedAfter?: Date;
1939 observedBefore?: Date;
1940 };
1941 }): Promise<{
1942 results: Array<{
1943 threadId: string;
1944 score: number;
1945 groupId?: string;
1946 range?: string;
1947 text?: string;
1948 observedAt?: Date;
1949 }>;
1950 }> {
1951 if (!this.vector) {
1952 throw new Error('searchMessages requires a vector store. Configure vector and embedder on your Memory instance.');
1953 }
1954
1955 const { embeddings, dimension } = await this.embedMessageContent(query);
1956 const { indexName } = await this.createObservationEmbeddingIndex(dimension);
1957
1958 const vectorFilter: VectorFilter = { resource_id: resourceId };
1959 if (filter?.threadId) {
1960 vectorFilter.thread_id = filter.threadId;
1961 }
1962 if (filter?.observedAfter || filter?.observedBefore) {
1963 vectorFilter.observed_at = {
1964 ...(filter.observedAfter ? { $gt: filter.observedAfter.toISOString() } : {}),
1965 ...(filter.observedBefore ? { $lt: filter.observedBefore.toISOString() } : {}),
1966 };
1967 }
1968
1969 const queryResults: Array<{
1970 threadId: string;
1971 score: number;
1972 groupId?: string;
1973 range?: string;
1974 text?: string;
1975 observedAt?: Date;
1976 }> = [];
1977
1978 await Promise.all(
1979 embeddings.map(async embedding => {
1980 const results = await this.vector!.query({
1981 indexName,
1982 queryVector: embedding,
1983 topK,
1984 filter: vectorFilter,

Callers 1

Calls 9

embedMessageContentMethod · 0.95
mapMethod · 0.80
allMethod · 0.65
queryMethod · 0.65
getMethod · 0.65
setMethod · 0.65
valuesMethod · 0.65
pushMethod · 0.45

Tested by

no test coverage detected