Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "multi-agent-chat-platform",
"version": "0.1.0",
"description": "Multi-agent interactive chat platform",
"scripts": {
"test": "jest",
"lint": "eslint . --ext .ts"
},
"dependencies": {},
"devDependencies": {
"@types/jest": "^29.5.3",
"jest": "^29.6.1",
"ts-jest": "^29.1.1",
"typescript": "^5.1.6"
},
"jest": {
"preset": "ts-jest",
"testEnvironment": "node"
}
}
26 changes: 26 additions & 0 deletions src/interfaces/chat.interface.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Chat message interface
export interface ChatMessage {
id: string;
sessionId: string;
sender: string;
content: string;
timestamp: Date;
}

// Chat session interface
export interface ChatSession {
id: string;
participants: string[];
messages: ChatMessage[];
createdAt: Date;
lastActiveAt: Date;
}

// Chat response interface
export interface ChatResponse {
sessionId: string;
replies: {
agentId: string;
message: string;
}[];
}
31 changes: 31 additions & 0 deletions src/interfaces/personality.interface.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Interface for Personality Profile
export interface PersonalityProfile {
id: string;
name: string;
description: string;
tone: string;
samplePrompts: string[];

// Metadata for versioning
version: number;
createdAt: Date;
updatedAt: Date;
}

// Validation function for Personality Profile
export function validatePersonalityProfile(profile: PersonalityProfile): boolean {
// Basic validation checks
if (!profile.id || profile.id.trim() === '') {
return false;
}

if (!profile.name || profile.name.trim() === '') {
return false;
}

if (profile.samplePrompts.length === 0) {
return false;
}

return true;
}
42 changes: 42 additions & 0 deletions tests/chat.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { ChatMessage, ChatSession, ChatResponse } from '../src/interfaces/chat.interface';

describe('Chat Interfaces', () => {
const sampleMessage: ChatMessage = {
id: 'msg-001',
sessionId: 'session-001',
sender: 'peter',
content: 'I will never deny you',
timestamp: new Date()
};

const sampleSession: ChatSession = {
id: 'session-001',
participants: ['peter', 'jesus'],
messages: [sampleMessage],
createdAt: new Date(),
lastActiveAt: new Date()
};

const sampleResponse: ChatResponse = {
sessionId: 'session-001',
replies: [
{ agentId: 'peter', message: 'Master, I am ready to follow you' },
{ agentId: 'jesus', message: 'Before the rooster crows, you will deny me three times' }
]
};

test('chat message interface should be valid', () => {
expect(sampleMessage.sender).toBe('peter');
expect(sampleMessage.content).toBe('I will never deny you');
});

test('chat session should track messages and participants', () => {
expect(sampleSession.participants).toHaveLength(2);
expect(sampleSession.messages).toHaveLength(1);
});

test('chat response should include multiple agent replies', () => {
expect(sampleResponse.replies).toHaveLength(2);
expect(sampleResponse.replies[0].agentId).toBe('peter');
});
});
33 changes: 33 additions & 0 deletions tests/personality.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { PersonalityProfile, validatePersonalityProfile } from '../src/interfaces/personality.interface';

describe('Personality Profile Validation', () => {
const validProfile: PersonalityProfile = {
id: 'peter-apostle',
name: 'Peter the Apostle',
description: 'Fisherman turned disciple',
tone: 'passionate',
samplePrompts: ['Tell me about walking on water', 'What was it like following Jesus?'],
version: 1,
createdAt: new Date(),
updatedAt: new Date()
};

test('should validate a correct personality profile', () => {
expect(validatePersonalityProfile(validProfile)).toBe(true);
});

test('should reject profile with empty id', () => {
const invalidProfile = { ...validProfile, id: '' };
expect(validatePersonalityProfile(invalidProfile)).toBe(false);
});

test('should reject profile with empty name', () => {
const invalidProfile = { ...validProfile, name: '' };
expect(validatePersonalityProfile(invalidProfile)).toBe(false);
});

test('should reject profile with no sample prompts', () => {
const invalidProfile = { ...validProfile, samplePrompts: [] };
expect(validatePersonalityProfile(invalidProfile)).toBe(false);
});
});