@juspay/neurolink 7.33.4 → 7.34.0

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.
Files changed (93) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +37 -0
  3. package/dist/cli/errorHandler.d.ts +1 -0
  4. package/dist/cli/errorHandler.js +28 -0
  5. package/dist/cli/factories/commandFactory.d.ts +23 -0
  6. package/dist/cli/factories/commandFactory.js +375 -60
  7. package/dist/cli/factories/ollamaCommandFactory.js +7 -1
  8. package/dist/cli/index.d.ts +1 -1
  9. package/dist/cli/index.js +9 -164
  10. package/dist/cli/loop/optionsSchema.d.ts +15 -0
  11. package/dist/cli/loop/optionsSchema.js +59 -0
  12. package/dist/cli/loop/session.d.ts +15 -0
  13. package/dist/cli/loop/session.js +252 -0
  14. package/dist/cli/parser.d.ts +1 -0
  15. package/dist/cli/parser.js +158 -0
  16. package/dist/cli/utils/ollamaUtils.js +6 -0
  17. package/dist/config/{conversationMemoryConfig.d.ts → conversationMemory.d.ts} +1 -1
  18. package/dist/core/baseProvider.js +17 -3
  19. package/dist/core/conversationMemoryFactory.d.ts +23 -0
  20. package/dist/core/conversationMemoryFactory.js +144 -0
  21. package/dist/core/conversationMemoryInitializer.d.ts +14 -0
  22. package/dist/core/conversationMemoryInitializer.js +127 -0
  23. package/dist/core/conversationMemoryManager.d.ts +3 -2
  24. package/dist/core/conversationMemoryManager.js +4 -3
  25. package/dist/core/redisConversationMemoryManager.d.ts +73 -0
  26. package/dist/core/redisConversationMemoryManager.js +483 -0
  27. package/dist/core/types.d.ts +1 -1
  28. package/dist/lib/config/{conversationMemoryConfig.d.ts → conversationMemory.d.ts} +1 -1
  29. package/dist/lib/core/baseProvider.js +17 -3
  30. package/dist/lib/core/conversationMemoryFactory.d.ts +23 -0
  31. package/dist/lib/core/conversationMemoryFactory.js +144 -0
  32. package/dist/lib/core/conversationMemoryInitializer.d.ts +14 -0
  33. package/dist/lib/core/conversationMemoryInitializer.js +127 -0
  34. package/dist/lib/core/conversationMemoryManager.d.ts +3 -2
  35. package/dist/lib/core/conversationMemoryManager.js +4 -3
  36. package/dist/lib/core/redisConversationMemoryManager.d.ts +73 -0
  37. package/dist/lib/core/redisConversationMemoryManager.js +483 -0
  38. package/dist/lib/core/types.d.ts +1 -1
  39. package/dist/lib/neurolink.d.ts +15 -9
  40. package/dist/lib/neurolink.js +218 -67
  41. package/dist/lib/providers/amazonBedrock.d.ts +4 -4
  42. package/dist/lib/providers/anthropic.d.ts +4 -4
  43. package/dist/lib/providers/azureOpenai.d.ts +4 -4
  44. package/dist/lib/providers/googleAiStudio.d.ts +4 -4
  45. package/dist/lib/providers/googleAiStudio.js +1 -1
  46. package/dist/lib/providers/huggingFace.d.ts +4 -4
  47. package/dist/lib/providers/litellm.d.ts +1 -1
  48. package/dist/lib/providers/mistral.d.ts +4 -4
  49. package/dist/lib/providers/mistral.js +2 -2
  50. package/dist/lib/providers/openAI.d.ts +4 -4
  51. package/dist/lib/session/globalSessionState.d.ts +27 -0
  52. package/dist/lib/session/globalSessionState.js +77 -0
  53. package/dist/lib/types/{conversationTypes.d.ts → conversation.d.ts} +32 -0
  54. package/dist/lib/types/generateTypes.d.ts +1 -1
  55. package/dist/lib/types/streamTypes.d.ts +1 -1
  56. package/dist/lib/utils/conversationMemory.d.ts +22 -0
  57. package/dist/lib/utils/conversationMemory.js +121 -0
  58. package/dist/lib/utils/conversationMemoryUtils.d.ts +1 -1
  59. package/dist/lib/utils/conversationMemoryUtils.js +2 -2
  60. package/dist/lib/utils/messageBuilder.d.ts +1 -1
  61. package/dist/lib/utils/messageBuilder.js +1 -1
  62. package/dist/lib/utils/redis.d.ts +42 -0
  63. package/dist/lib/utils/redis.js +263 -0
  64. package/dist/neurolink.d.ts +15 -9
  65. package/dist/neurolink.js +218 -67
  66. package/dist/providers/amazonBedrock.d.ts +4 -4
  67. package/dist/providers/anthropic.d.ts +4 -4
  68. package/dist/providers/azureOpenai.d.ts +4 -4
  69. package/dist/providers/googleAiStudio.d.ts +4 -4
  70. package/dist/providers/googleAiStudio.js +1 -1
  71. package/dist/providers/huggingFace.d.ts +4 -4
  72. package/dist/providers/litellm.d.ts +1 -1
  73. package/dist/providers/mistral.d.ts +4 -4
  74. package/dist/providers/mistral.js +2 -2
  75. package/dist/providers/openAI.d.ts +4 -4
  76. package/dist/session/globalSessionState.d.ts +27 -0
  77. package/dist/session/globalSessionState.js +77 -0
  78. package/dist/types/{conversationTypes.d.ts → conversation.d.ts} +32 -0
  79. package/dist/types/generateTypes.d.ts +1 -1
  80. package/dist/types/streamTypes.d.ts +1 -1
  81. package/dist/utils/conversationMemory.d.ts +22 -0
  82. package/dist/utils/conversationMemory.js +121 -0
  83. package/dist/utils/conversationMemoryUtils.d.ts +1 -1
  84. package/dist/utils/conversationMemoryUtils.js +2 -2
  85. package/dist/utils/messageBuilder.d.ts +1 -1
  86. package/dist/utils/messageBuilder.js +1 -1
  87. package/dist/utils/redis.d.ts +42 -0
  88. package/dist/utils/redis.js +263 -0
  89. package/package.json +3 -1
  90. /package/dist/config/{conversationMemoryConfig.js → conversationMemory.js} +0 -0
  91. /package/dist/lib/config/{conversationMemoryConfig.js → conversationMemory.js} +0 -0
  92. /package/dist/lib/types/{conversationTypes.js → conversation.js} +0 -0
  93. /package/dist/types/{conversationTypes.js → conversation.js} +0 -0
@@ -68,12 +68,12 @@ export declare class HuggingFaceProvider extends BaseProvider {
68
68
  /**
69
69
  * Enhanced error handling with HuggingFace-specific guidance
70
70
  */
71
- protected handleProviderError(error: unknown): Error;
72
- protected getProviderName(): AIProviderName;
73
- protected getDefaultModel(): string;
71
+ handleProviderError(error: unknown): Error;
72
+ getProviderName(): AIProviderName;
73
+ getDefaultModel(): string;
74
74
  /**
75
75
  * Returns the Vercel AI SDK model instance for HuggingFace
76
76
  */
77
- protected getAISDKModel(): LanguageModelV1;
77
+ getAISDKModel(): LanguageModelV1;
78
78
  }
79
79
  export default HuggingFaceProvider;
@@ -19,7 +19,7 @@ export declare class LiteLLMProvider extends BaseProvider {
19
19
  * Returns the Vercel AI SDK model instance for LiteLLM
20
20
  */
21
21
  protected getAISDKModel(): LanguageModelV1;
22
- protected handleProviderError(error: unknown): Error;
22
+ handleProviderError(error: unknown): Error;
23
23
  /**
24
24
  * LiteLLM supports tools for compatible models
25
25
  */
@@ -11,13 +11,13 @@ export declare class MistralProvider extends BaseProvider {
11
11
  private model;
12
12
  constructor(modelName?: string, sdk?: unknown);
13
13
  protected executeStream(options: StreamOptions, _analysisSchema?: ValidationSchema): Promise<StreamResult>;
14
- protected getProviderName(): AIProviderName;
15
- protected getDefaultModel(): string;
14
+ getProviderName(): AIProviderName;
15
+ getDefaultModel(): string;
16
16
  /**
17
17
  * Returns the Vercel AI SDK model instance for Mistral
18
18
  */
19
- protected getAISDKModel(): LanguageModelV1;
20
- protected handleProviderError(error: unknown): Error;
19
+ getAISDKModel(): LanguageModelV1;
20
+ handleProviderError(error: unknown): Error;
21
21
  /**
22
22
  * Validate provider configuration
23
23
  */
@@ -111,8 +111,8 @@ export class MistralProvider extends BaseProvider {
111
111
  message.includes("Invalid API key")) {
112
112
  return new Error("Invalid Mistral API key. Please check your MISTRAL_API_KEY environment variable.");
113
113
  }
114
- if (message.includes("rate limit")) {
115
- return new Error("Mistral rate limit exceeded. Please try again later.");
114
+ if (message.includes("Rate limit exceeded")) {
115
+ return new Error("Mistral rate limit exceeded");
116
116
  }
117
117
  return new Error(`Mistral error: ${message}`);
118
118
  }
@@ -11,13 +11,13 @@ import type { NeuroLink } from "../neurolink.js";
11
11
  export declare class OpenAIProvider extends BaseProvider {
12
12
  private model;
13
13
  constructor(modelName?: string, neurolink?: NeuroLink);
14
- protected getProviderName(): AIProviderName;
15
- protected getDefaultModel(): string;
14
+ getProviderName(): AIProviderName;
15
+ getDefaultModel(): string;
16
16
  /**
17
17
  * Returns the Vercel AI SDK model instance for OpenAI
18
18
  */
19
- protected getAISDKModel(): LanguageModelV1;
20
- protected handleProviderError(error: unknown): Error;
19
+ getAISDKModel(): LanguageModelV1;
20
+ handleProviderError(error: unknown): Error;
21
21
  /**
22
22
  * executeGenerate method removed - generation is now handled by BaseProvider.
23
23
  * For details on the changes and migration steps, refer to the BaseProvider documentation
@@ -0,0 +1,27 @@
1
+ import { NeuroLink } from "../neurolink.js";
2
+ import type { ConversationMemoryConfig } from "../types/conversation.js";
3
+ type SessionVariableValue = string | number | boolean;
4
+ interface LoopSessionState {
5
+ neurolinkInstance: NeuroLink;
6
+ sessionId: string;
7
+ isActive: boolean;
8
+ conversationMemoryConfig?: ConversationMemoryConfig;
9
+ sessionVariables: Record<string, SessionVariableValue>;
10
+ }
11
+ export declare class GlobalSessionManager {
12
+ private static instance;
13
+ private loopSession;
14
+ static getInstance(): GlobalSessionManager;
15
+ setLoopSession(config?: ConversationMemoryConfig): string;
16
+ getLoopSession(): LoopSessionState | null;
17
+ clearLoopSession(): void;
18
+ getOrCreateNeuroLink(): NeuroLink;
19
+ getCurrentSessionId(): string | undefined;
20
+ setSessionVariable(key: string, value: SessionVariableValue): void;
21
+ getSessionVariable(key: string): SessionVariableValue | undefined;
22
+ getSessionVariables(): Record<string, SessionVariableValue>;
23
+ unsetSessionVariable(key: string): boolean;
24
+ clearSessionVariables(): void;
25
+ }
26
+ export declare const globalSession: GlobalSessionManager;
27
+ export {};
@@ -0,0 +1,77 @@
1
+ import { nanoid } from "nanoid";
2
+ import { NeuroLink } from "../neurolink.js";
3
+ export class GlobalSessionManager {
4
+ static instance;
5
+ loopSession = null;
6
+ static getInstance() {
7
+ if (!GlobalSessionManager.instance) {
8
+ GlobalSessionManager.instance = new GlobalSessionManager();
9
+ }
10
+ return GlobalSessionManager.instance;
11
+ }
12
+ setLoopSession(config) {
13
+ const sessionId = `NL_${nanoid()}`;
14
+ const neurolinkOptions = {};
15
+ if (config?.enabled) {
16
+ neurolinkOptions.conversationMemory = {
17
+ enabled: true,
18
+ maxSessions: config.maxSessions,
19
+ maxTurnsPerSession: config.maxTurnsPerSession,
20
+ };
21
+ }
22
+ this.loopSession = {
23
+ neurolinkInstance: new NeuroLink(neurolinkOptions),
24
+ sessionId,
25
+ isActive: true,
26
+ conversationMemoryConfig: config,
27
+ sessionVariables: {},
28
+ };
29
+ return sessionId;
30
+ }
31
+ getLoopSession() {
32
+ return this.loopSession?.isActive ? this.loopSession : null;
33
+ }
34
+ clearLoopSession() {
35
+ if (this.loopSession) {
36
+ this.loopSession.isActive = false;
37
+ this.loopSession = null;
38
+ }
39
+ }
40
+ getOrCreateNeuroLink() {
41
+ const session = this.getLoopSession();
42
+ return session ? session.neurolinkInstance : new NeuroLink();
43
+ }
44
+ getCurrentSessionId() {
45
+ return this.getLoopSession()?.sessionId;
46
+ }
47
+ // Session variable management
48
+ setSessionVariable(key, value) {
49
+ const session = this.getLoopSession();
50
+ if (session) {
51
+ session.sessionVariables[key] = value;
52
+ }
53
+ }
54
+ getSessionVariable(key) {
55
+ const session = this.getLoopSession();
56
+ return session?.sessionVariables[key];
57
+ }
58
+ getSessionVariables() {
59
+ const session = this.getLoopSession();
60
+ return session?.sessionVariables || {};
61
+ }
62
+ unsetSessionVariable(key) {
63
+ const session = this.getLoopSession();
64
+ if (session && key in session.sessionVariables) {
65
+ delete session.sessionVariables[key];
66
+ return true;
67
+ }
68
+ return false;
69
+ }
70
+ clearSessionVariables() {
71
+ const session = this.getLoopSession();
72
+ if (session) {
73
+ session.sessionVariables = {};
74
+ }
75
+ }
76
+ }
77
+ export const globalSession = GlobalSessionManager.getInstance();
@@ -103,3 +103,35 @@ export declare class ConversationMemoryError extends Error {
103
103
  details?: Record<string, unknown> | undefined;
104
104
  constructor(message: string, code: "STORAGE_ERROR" | "CONFIG_ERROR" | "SESSION_NOT_FOUND" | "CLEANUP_ERROR", details?: Record<string, unknown> | undefined);
105
105
  }
106
+ /**
107
+ * Session identifier for Redis storage operations
108
+ */
109
+ export type SessionIdentifier = {
110
+ sessionId: string;
111
+ userId?: string;
112
+ };
113
+ /**
114
+ * Redis storage configuration
115
+ */
116
+ export type RedisStorageConfig = {
117
+ /** Redis host (default: 'localhost') */
118
+ host?: string;
119
+ /** Redis port (default: 6379) */
120
+ port?: number;
121
+ /** Redis password (optional) */
122
+ password?: string;
123
+ /** Redis database number (default: 0) */
124
+ db?: number;
125
+ /** Key prefix for Redis keys (default: 'neurolink:conversation:') */
126
+ keyPrefix?: string;
127
+ /** Time-to-live in seconds (default: 86400, 24 hours) */
128
+ ttl?: number;
129
+ /** Additional Redis connection options */
130
+ connectionOptions?: {
131
+ connectTimeout?: number;
132
+ lazyConnect?: boolean;
133
+ retryDelayOnFailover?: number;
134
+ maxRetriesPerRequest?: number;
135
+ [key: string]: string | number | boolean | undefined;
136
+ };
137
+ };
@@ -3,7 +3,7 @@ import type { ValidationSchema, StandardRecord, ZodUnknownSchema } from "./typeA
3
3
  import type { AIProviderName } from "./providers.js";
4
4
  import type { AnalyticsData, TokenUsage } from "./analytics.js";
5
5
  import type { EvaluationData } from "./evaluation.js";
6
- import type { ChatMessage, ConversationMemoryConfig } from "./conversationTypes.js";
6
+ import type { ChatMessage, ConversationMemoryConfig } from "./conversation.js";
7
7
  import type { MiddlewareFactoryOptions } from "./middlewareTypes.js";
8
8
  import type { JsonValue } from "./common.js";
9
9
  /**
@@ -4,7 +4,7 @@ import type { AIProviderName, ProviderConfig } from "./providers.js";
4
4
  import type { AnalyticsData, TokenUsage } from "./analytics.js";
5
5
  import type { EvaluationData } from "./evaluation.js";
6
6
  import type { UnknownRecord, JsonValue } from "./common.js";
7
- import type { ChatMessage } from "./conversationTypes.js";
7
+ import type { ChatMessage } from "./conversation.js";
8
8
  import type { MiddlewareFactoryOptions } from "./middlewareTypes.js";
9
9
  /**
10
10
  * Progress tracking and metadata for streaming operations
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Conversation Memory Utilities
3
+ * Handles configuration merging and conversation memory operations
4
+ */
5
+ import type { ConversationMemoryConfig, ChatMessage } from "../types/conversation.js";
6
+ import type { ConversationMemoryManager } from "../core/conversationMemoryManager.js";
7
+ import type { RedisConversationMemoryManager } from "../core/redisConversationMemoryManager.js";
8
+ import type { TextGenerationOptions, TextGenerationResult } from "../core/types.js";
9
+ /**
10
+ * Apply conversation memory defaults to user configuration
11
+ * Merges user config with environment variables and default values
12
+ */
13
+ export declare function applyConversationMemoryDefaults(userConfig?: Partial<ConversationMemoryConfig>): ConversationMemoryConfig;
14
+ /**
15
+ * Get conversation history as message array, summarizing if needed.
16
+ */
17
+ export declare function getConversationMessages(conversationMemory: ConversationMemoryManager | RedisConversationMemoryManager | null | undefined, options: TextGenerationOptions): Promise<ChatMessage[]>;
18
+ /**
19
+ * Store conversation turn for future context
20
+ * Saves user messages and AI responses for conversation memory
21
+ */
22
+ export declare function storeConversationTurn(conversationMemory: ConversationMemoryManager | RedisConversationMemoryManager | null | undefined, originalOptions: TextGenerationOptions, result: TextGenerationResult): Promise<void>;
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Conversation Memory Utilities
3
+ * Handles configuration merging and conversation memory operations
4
+ */
5
+ import { getConversationMemoryDefaults } from "../config/conversationMemory.js";
6
+ import { logger } from "./logger.js";
7
+ /**
8
+ * Apply conversation memory defaults to user configuration
9
+ * Merges user config with environment variables and default values
10
+ */
11
+ export function applyConversationMemoryDefaults(userConfig) {
12
+ const defaults = getConversationMemoryDefaults();
13
+ return {
14
+ ...defaults,
15
+ ...userConfig,
16
+ };
17
+ }
18
+ /**
19
+ * Get conversation history as message array, summarizing if needed.
20
+ */
21
+ export async function getConversationMessages(conversationMemory, options) {
22
+ if (!conversationMemory || !options.context) {
23
+ logger.warn("[conversationMemoryUtils] No memory or context, returning empty messages");
24
+ return [];
25
+ }
26
+ const sessionId = options.context?.sessionId;
27
+ if (typeof sessionId !== "string" || !sessionId) {
28
+ logger.warn("[conversationMemoryUtils] Invalid or missing sessionId in context", {
29
+ sessionIdType: typeof sessionId,
30
+ sessionIdValue: sessionId,
31
+ });
32
+ return [];
33
+ }
34
+ try {
35
+ // Remove duplicate summarization logic - it should be handled in ConversationMemoryManager
36
+ const messages = await conversationMemory.buildContextMessages(sessionId);
37
+ logger.debug("[conversationMemoryUtils] Conversation messages retrieved successfully", {
38
+ sessionId,
39
+ messageCount: messages.length,
40
+ messageTypes: messages.map((m) => m.role),
41
+ firstMessage: messages.length > 0
42
+ ? {
43
+ role: messages[0].role,
44
+ contentLength: messages[0].content.length,
45
+ contentPreview: messages[0].content.substring(0, 50),
46
+ }
47
+ : null,
48
+ lastMessage: messages.length > 0
49
+ ? {
50
+ role: messages[messages.length - 1].role,
51
+ contentLength: messages[messages.length - 1].content.length,
52
+ contentPreview: messages[messages.length - 1].content.substring(0, 50),
53
+ }
54
+ : null,
55
+ });
56
+ return messages;
57
+ }
58
+ catch (error) {
59
+ logger.warn("[conversationMemoryUtils] Failed to get conversation messages", {
60
+ sessionId,
61
+ memoryType: conversationMemory.constructor.name,
62
+ error: error instanceof Error ? error.message : String(error),
63
+ stack: error instanceof Error ? error.stack : undefined,
64
+ });
65
+ return [];
66
+ }
67
+ }
68
+ /**
69
+ * Store conversation turn for future context
70
+ * Saves user messages and AI responses for conversation memory
71
+ */
72
+ export async function storeConversationTurn(conversationMemory, originalOptions, result) {
73
+ logger.debug("[conversationMemoryUtils] storeConversationTurn called", {
74
+ hasMemory: !!conversationMemory,
75
+ memoryType: conversationMemory?.constructor?.name || "NONE",
76
+ hasContext: !!originalOptions.context,
77
+ hasResult: !!result,
78
+ resultContentLength: result?.content?.length || 0,
79
+ });
80
+ if (!conversationMemory || !originalOptions.context) {
81
+ logger.debug("[conversationMemoryUtils] No memory or context, skipping conversation storage");
82
+ return;
83
+ }
84
+ const context = originalOptions.context;
85
+ const sessionId = context.sessionId;
86
+ const userId = typeof context.userId === "string" ? context.userId : undefined;
87
+ logger.debug("[conversationMemoryUtils] Extracted session details from context", {
88
+ sessionId,
89
+ userId,
90
+ contextKeys: Object.keys(context),
91
+ hasValidSessionId: typeof sessionId === "string" && !!sessionId,
92
+ });
93
+ if (typeof sessionId !== "string" || !sessionId) {
94
+ logger.warn("[conversationMemoryUtils] Invalid or missing sessionId in context", {
95
+ sessionIdType: typeof sessionId,
96
+ sessionIdValue: sessionId,
97
+ });
98
+ return;
99
+ }
100
+ const userMessage = originalOptions.originalPrompt || originalOptions.prompt || "";
101
+ const aiResponse = result.content;
102
+ try {
103
+ await conversationMemory.storeConversationTurn(sessionId, userId, userMessage, aiResponse);
104
+ logger.debug("[conversationMemoryUtils] Conversation turn stored successfully", {
105
+ sessionId,
106
+ userId,
107
+ memoryType: conversationMemory.constructor.name,
108
+ userMessageLength: userMessage.length,
109
+ aiResponseLength: aiResponse.length,
110
+ });
111
+ }
112
+ catch (error) {
113
+ logger.warn("[conversationMemoryUtils] Failed to store conversation turn", {
114
+ sessionId,
115
+ userId,
116
+ memoryType: conversationMemory.constructor.name,
117
+ error: error instanceof Error ? error.message : String(error),
118
+ stack: error instanceof Error ? error.stack : undefined,
119
+ });
120
+ }
121
+ }
@@ -2,7 +2,7 @@
2
2
  * Conversation Memory Utilities
3
3
  * Handles configuration merging and conversation memory operations
4
4
  */
5
- import type { ConversationMemoryConfig, ChatMessage } from "../types/conversationTypes.js";
5
+ import type { ConversationMemoryConfig, ChatMessage } from "../types/conversation.js";
6
6
  import type { ConversationMemoryManager } from "../core/conversationMemoryManager.js";
7
7
  import type { TextGenerationOptions, TextGenerationResult } from "../types/index.js";
8
8
  /**
@@ -2,7 +2,7 @@
2
2
  * Conversation Memory Utilities
3
3
  * Handles configuration merging and conversation memory operations
4
4
  */
5
- import { getConversationMemoryDefaults } from "../config/conversationMemoryConfig.js";
5
+ import { getConversationMemoryDefaults } from "../config/conversationMemory.js";
6
6
  import { logger } from "./logger.js";
7
7
  /**
8
8
  * Apply conversation memory defaults to user configuration
@@ -28,7 +28,7 @@ export async function getConversationMessages(conversationMemory, options) {
28
28
  }
29
29
  try {
30
30
  // Remove duplicate summarization logic - it should be handled in ConversationMemoryManager
31
- const messages = conversationMemory.buildContextMessages(sessionId);
31
+ const messages = await conversationMemory.buildContextMessages(sessionId);
32
32
  logger.debug("Conversation messages retrieved", {
33
33
  sessionId,
34
34
  messageCount: messages.length,
@@ -2,7 +2,7 @@
2
2
  * Message Builder Utility
3
3
  * Centralized logic for building message arrays from TextGenerationOptions
4
4
  */
5
- import type { ChatMessage } from "../types/conversationTypes.js";
5
+ import type { ChatMessage } from "../types/conversation.js";
6
6
  import type { TextGenerationOptions } from "../types/index.js";
7
7
  import type { StreamOptions } from "../types/streamTypes.js";
8
8
  /**
@@ -2,7 +2,7 @@
2
2
  * Message Builder Utility
3
3
  * Centralized logic for building message arrays from TextGenerationOptions
4
4
  */
5
- import { CONVERSATION_INSTRUCTIONS } from "../config/conversationMemoryConfig.js";
5
+ import { CONVERSATION_INSTRUCTIONS } from "../config/conversationMemory.js";
6
6
  /**
7
7
  * Build a properly formatted message array for AI providers
8
8
  * Combines system prompt, conversation history, and current user prompt
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Redis Utilities for NeuroLink
3
+ * Helper functions for Redis storage operations
4
+ */
5
+ import { createClient } from "redis";
6
+ type RedisClient = ReturnType<typeof createClient>;
7
+ import type { ChatMessage, RedisStorageConfig } from "../types/conversation.js";
8
+ /**
9
+ * Creates a Redis client with the provided configuration
10
+ */
11
+ export declare function createRedisClient(config: Required<RedisStorageConfig>): Promise<RedisClient>;
12
+ /**
13
+ * Generates a Redis key for session messages
14
+ */
15
+ export declare function getSessionKey(config: Required<RedisStorageConfig>, sessionId: string): string;
16
+ /**
17
+ * Serializes messages for Redis storage
18
+ */
19
+ export declare function serializeMessages(messages: ChatMessage[]): string;
20
+ /**
21
+ * Deserializes messages from Redis storage
22
+ */
23
+ export declare function deserializeMessages(data: string | null): ChatMessage[];
24
+ /**
25
+ * Checks if Redis client is healthy
26
+ */
27
+ export declare function isRedisHealthy(client: RedisClient): Promise<boolean>;
28
+ /**
29
+ * Scan Redis keys matching a pattern without blocking the server
30
+ * This is a non-blocking alternative to the KEYS command
31
+ *
32
+ * @param client Redis client
33
+ * @param pattern Pattern to match keys (e.g. "prefix:*")
34
+ * @param batchSize Number of keys to scan in each iteration (default: 100)
35
+ * @returns Array of keys matching the pattern
36
+ */
37
+ export declare function scanKeys(client: RedisClient, pattern: string, batchSize?: number): Promise<string[]>;
38
+ /**
39
+ * Get normalized Redis configuration with defaults
40
+ */
41
+ export declare function getNormalizedConfig(config: RedisStorageConfig): Required<RedisStorageConfig>;
42
+ export {};