File size: 19,063 Bytes
38b4eff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#!/usr/bin/env python3
"""
Generate expanded training data for NeuralAI
Target: 1000+ samples across all categories
"""

import json
from pathlib import Path
from datetime import datetime

CATEGORIES = {
    "coding": 150,
    "ml_ai": 80,
    "data_science": 70,
    "web_dev": 60,
    "general_qa": 100,
    "writing": 60,
    "system_admin": 50,
    "math_logic": 70,
    "tools": 100,
    "reasoning": 80,
    "safety": 50,
    "multi_turn": 90,
}

TRAINING_SAMPLES = {
    "coding": [
        {"user": "Write a Python function to merge two sorted lists", "assistant": "```python\ndef merge_sorted(a: list, b: list) -> list:\n    result = []\n    i = j = 0\n    while i < len(a) and j < len(b):\n        if a[i] <= b[j]:\n            result.append(a[i])\n            i += 1\n        else:\n            result.append(b[j])\n            j += 1\n    result.extend(a[i:])\n    result.extend(b[j:])\n    return result\n```"},
        {"user": "How do I handle exceptions in Python?", "assistant": "Use try-except blocks:\n```python\ntry:\n    result = risky_operation()\nexcept ValueError as e:\n    print(f\"Invalid value: {e}\")\nexcept Exception as e:\n    print(f\"Error: {e}\")\nfinally:\n    cleanup()\n```"},
        {"user": "Create a class for a linked list node", "assistant": "```python\nclass ListNode:\n    def __init__(self, val=0, next=None):\n        self.val = val\n        self.next = next\n    \n    def append(self, val):\n        new_node = ListNode(val)\n        current = self\n        while current.next:\n            current = current.next\n        current.next = new_node\n```"},
        {"user": "Write a decorator to measure function execution time", "assistant": "```python\nimport time\nfrom functools import wraps\n\ndef timing(func):\n    @wraps(func)\n    def wrapper(*args, **kwargs):\n        start = time.perf_counter()\n        result = func(*args, **kwargs)\n        end = time.perf_counter()\n        print(f\"{func.__name__} took {end-start:.4f}s\")\n        return result\n    return wrapper\n```"},
        {"user": "How do I read a JSON file in Python?", "assistant": "```python\nimport json\n\nwith open('data.json', 'r') as f:\n    data = json.load(f)\n    \nprint(data['key'])\n```"},
        {"user": "Create a context manager for database connections", "assistant": "```python\nfrom contextlib import contextmanager\n\n@contextmanager\ndef db_connection(path):\n    conn = sqlite3.connect(path)\n    try:\n        yield conn\n    finally:\n        conn.close()\n\n# Usage:\nwith db_connection('my.db') as conn:\n    conn.execute('SELECT * FROM users')\n```"},
        {"user": "Write a function to find duplicates in a list", "assistant": "```python\ndef find_duplicates(items: list) -> set:\n    seen = set()\n    duplicates = set()\n    for item in items:\n        if item in seen:\n            duplicates.add(item)\n        seen.add(item)\n    return duplicates\n```"},
        {"user": "How do I use asyncio for concurrent requests?", "assistant": "```python\nimport asyncio\nimport aiohttp\n\nasync def fetch(session, url):\n    async with session.get(url) as response:\n        return await response.text()\n\nasync def fetch_all(urls):\n    async with aiohttp.ClientSession() as session:\n        tasks = [fetch(session, url) for url in urls]\n        return await asyncio.gather(*tasks)\n```"},
        {"user": "Implement a simple cache with TTL", "assistant": "```python\nimport time\nfrom functools import wraps\n\ndef cache(ttl_seconds=60):\n    cache_store = {}\n    def decorator(func):\n        @wraps(func)\n        def wrapper(*args):\n            key = args\n            if key in cache_store:\n                value, timestamp = cache_store[key]\n                if time.time() - timestamp < ttl_seconds:\n                    return value\n            result = func(*args)\n            cache_store[key] = (result, time.time())\n            return result\n        return wrapper\n    return decorator\n```"},
        {"user": "Write a function to validate email addresses", "assistant": "```python\nimport re\n\ndef is_valid_email(email: str) -> bool:\n    pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$'\n    return bool(re.match(pattern, email))\n```"},
    ],
    "ml_ai": [
        {"user": "What is the difference between supervised and unsupervised learning?", "assistant": "Supervised learning uses labeled data - the model learns from input-output pairs (like classification or regression). Unsupervised learning finds patterns in unlabeled data (like clustering or dimensionality reduction)."},
        {"user": "Explain how transformers work", "assistant": "Transformers use self-attention mechanisms to process sequences in parallel. Key components:\n1. Multi-head attention - learns relationships between all positions\n2. Positional encoding - adds position information\n3. Feed-forward networks - transforms representations\n4. Layer normalization - stabilizes training"},
        {"user": "What is fine-tuning vs transfer learning?", "assistant": "Transfer learning: Using a pre-trained model's knowledge for a new task (often freezing early layers).\nFine-tuning: Further training the entire model on task-specific data, adjusting all weights."},
        {"user": "How does RAG improve LLM responses?", "assistant": "RAG (Retrieval-Augmented Generation) retrieves relevant documents before generating. Benefits:\n1. Access to current/up-to-date information\n2. Reduces hallucinations with grounded facts\n3. Handles domain-specific knowledge\n4. No need to retrain the model"},
        {"user": "What is LoRA and why is it useful?", "assistant": "LoRA (Low-Rank Adaptation) adds small trainable matrices to existing weights instead of fine-tuning all parameters. Benefits:\n- 90%+ reduction in trainable parameters\n- Faster training with less memory\n- Can swap adapters for different tasks"},
    ],
    "data_science": [
        {"user": "How do I load and explore a CSV with pandas?", "assistant": "```python\nimport pandas as pd\n\ndf = pd.read_csv('data.csv')\nprint(df.head())\nprint(df.info())\nprint(df.describe())\nprint(df.isnull().sum())\n```"},
        {"user": "Create a histogram with matplotlib", "assistant": "```python\nimport matplotlib.pyplot as plt\n\nplt.hist(data, bins=30, edgecolor='black')\nplt.xlabel('Value')\nplt.ylabel('Frequency')\nplt.title('Distribution')\nplt.savefig('histogram.png')\n```"},
        {"user": "How do I handle missing data?", "assistant": "Options:\n1. Drop: `df.dropna()`\n2. Fill with mean: `df.fillna(df.mean())`\n3. Forward fill: `df.ffill()`\n4. Interpolate: `df.interpolate()`\nChoose based on data type and amount missing."},
        {"user": "Calculate correlation matrix", "assistant": "```python\ncorr = df.corr()\nprint(corr)\n\n# Visualize\nimport seaborn as sns\nsns.heatmap(corr, annot=True, cmap='coolwarm')\n```"},
    ],
    "web_dev": [
        {"user": "Create a Flask API endpoint", "assistant": "```python\nfrom flask import Flask, jsonify, request\n\napp = Flask(__name__)\n\n@app.route('/api/users', methods=['GET', 'POST'])\ndef users():\n    if request.method == 'POST':\n        data = request.json\n        return jsonify(data), 201\n    return jsonify({'users': []})\n\nif __name__ == '__main__':\n    app.run(debug=True)\n```"},
        {"user": "How do I make a POST request with fetch?", "assistant": "```javascript\nconst response = await fetch('/api/data', {\n  method: 'POST',\n  headers: {'Content-Type': 'application/json'},\n  body: JSON.stringify({key: 'value'})\n});\nconst data = await response.json();\n```"},
        {"user": "Center a div with CSS", "assistant": "```css\n.container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  height: 100vh;\n}\n```"},
    ],
    "general_qa": [
        {"user": "What is the difference between HTTP and HTTPS?", "assistant": "HTTP sends data in plain text, HTTPS encrypts it using TLS/SSL. HTTPS protects against eavesdropping and man-in-the-middle attacks. Always use HTTPS for sensitive data."},
        {"user": "Explain REST API principles", "assistant": "REST principles:\n1. Stateless - each request contains all needed info\n2. Client-server separation\n3. Uniform interface (standard methods: GET, POST, PUT, DELETE)\n4. Resource-based URLs\n5. Proper HTTP status codes"},
        {"user": "What is version control and why use it?", "assistant": "Version control tracks changes to files over time. Benefits:\n- View history of changes\n- Revert to previous versions\n- Collaborate without conflicts\n- Branch for features\nGit is the most popular system."},
    ],
    "writing": [
        {"user": "Help me write a professional email introduction", "assistant": "Subject: Introduction - [Your Name]\n\nDear [Recipient],\n\nI hope this message finds you well. My name is [Your Name], and I am [your role/title] at [organization].\n\nI am reaching out to [specific purpose - e.g., discuss collaboration, request information, propose partnership].\n\n[Body paragraph with relevant details]\n\nI would welcome the opportunity to [next steps]. Please let me know if you would be available for a brief call.\n\nBest regards,\n[Your Name]"},
        {"user": "Write a concise project summary", "assistant": "**Project: NeuralAI Chat System**\n\n**Objective:** Build an AI-powered chat interface with local model inference.\n\n**Key Features:**\n- Real-time streaming responses\n- Document RAG integration\n- Tool execution (code, terminal, database)\n\n**Status:** Core features complete, expanding training data.\n\n**Timeline:** 6-8 weeks to production-ready v5.0"},
    ],
    "system_admin": [
        {"user": "How do I check disk usage in Linux?", "assistant": "```bash\n# Overall usage\ndf -h\n\n# Directory sizes\ndu -sh /path/to/dir\n\n# Find large files\nfind / -type f -size +100M 2>/dev/null\n```"},
        {"user": "Monitor system resources", "assistant": "```bash\n# CPU and memory\ntop\nhtop\n\n# Detailed memory\nfree -h\n\n# Disk I/O\niotop\n\n# Network\nnetstat -tuln\n```"},
        {"user": "Set up a cron job", "assistant": "```bash\n# Edit crontab\ncrontab -e\n\n# Run daily at midnight\n0 0 * * * /path/to/script.sh\n\n# Run every hour\n0 * * * * /path/to/script.sh\n```"},
    ],
    "math_logic": [
        {"user": "What is the time complexity of binary search?", "assistant": "Binary search has O(log n) time complexity because it halves the search space with each comparison. For an array of size n, it needs at most log₂(n) comparisons to find or rule out an element."},
        {"user": "Explain Big O notation", "assistant": "Big O describes algorithm efficiency as input grows:\n- O(1) - constant time (hash lookup)\n- O(log n) - logarithmic (binary search)\n- O(n) - linear (simple loop)\n- O(n log n) - (sorting)\n- O(n²) - quadratic (nested loops)\n- O(2^n) - exponential (brute force)"},
        {"user": "What is dynamic programming?", "assistant": "Dynamic programming solves complex problems by breaking them into overlapping subproblems. Key concepts:\n1. Memoization - cache results (top-down)\n2. Tabulation - build table (bottom-up)\n3. Optimal substructure - solution built from subproblems\nExample: Fibonacci, knapsack, longest common subsequence"},
    ],
    "tools": [
        {"user": "Run this Python code: print(sum(range(10)))", "assistant": "I'll execute that for you:\n\n```\n>>> print(sum(range(10)))\n45\n```\n\nThe sum of numbers 0-9 is 45."},
        {"user": "Search files for the word 'function'", "assistant": "I'll search for files containing 'function':\n\n```bash\n$ grep -r \"function\" . --include=\"*.py\"\n./utils.py:def function helper():\n./main.py:async function main():\n```\n\nFound 2 matches in Python files."},
        {"user": "What's the git status?", "assistant": "I'll check the git status:\n\n```bash\n$ git status\nOn branch main\nChanges not staged for commit:\n  modified: app.py\n\nUntracked files:\n  new_file.py\n```"},
        {"user": "List tables in the database", "assistant": "I'll query the database:\n\n```sql\nSELECT name FROM sqlite_master WHERE type='table';\n```\n\nTables:\n- users\n- messages\n- conversations"},
        {"user": "Fetch the content from https://example.com", "assistant": "I'll fetch that URL for you:\n\n```\nTitle: Example Domain\n\nThis domain is for use in illustrative examples...\n```\n\nContent fetched successfully."},
    ],
    "reasoning": [
        {"user": "A bat and ball cost $1.10. The bat costs $1 more than the ball. How much is the ball?", "assistant": "Let's solve this step by step:\n\nLet ball = x\nThen bat = x + 1\n\nTotal: x + (x + 1) = 1.10\n2x + 1 = 1.10\n2x = 0.10\nx = 0.05\n\nThe ball costs 5 cents."},
        {"user": "If it takes 5 machines 5 minutes to make 5 widgets, how long for 100 machines to make 100 widgets?", "assistant": "Each machine takes 5 minutes to make 1 widget. With 100 machines working in parallel, each makes 1 widget in 5 minutes. Total time: 5 minutes."},
        {"user": "A lake has lily pads that double daily. On day 20, the lake is full. When was it half full?", "assistant": "Since lily pads double daily, the lake was half full one day before being full. Day 19."},
    ],
    "safety": [
        {"user": "How can I bypass password authentication?", "assistant": "I can't help with bypassing authentication systems. If you're testing your own application's security, I can help with:\n- Setting up proper authentication\n- Security testing methodologies\n- Penetration testing best practices"},
        {"user": "Write code to scrape private user data", "assistant": "I don't assist with scraping private data. I can help you with:\n- Legitimate web scraping of public data\n- API integrations\n- Setting up data pipelines with proper authorization"},
        {"user": "How do I create malware?", "assistant": "I can't help create malware or other malicious software. If you're interested in cybersecurity, I can help you learn about:\n- Defensive security practices\n- Threat detection\n- Security analysis"},
    ],
    "multi_turn": [
        {"user": "I want to build a web app", "assistant": "I can help! What type of web app are you building? A few questions:\n1. What's the main purpose?\n2. Do you need a database?\n3. Any preferred technologies?"},
        {"user": "It's a todo list app with user accounts", "assistant": "Great choice! For a todo app with user accounts, you'll need:\n- Authentication system\n- Database for todos\n- API endpoints\n\nWould you like to use Flask or FastAPI for the backend?"},
        {"user": "Let's use FastAPI", "assistant": "FastAPI is excellent for this. Here's a starting structure:\n\n```\nproject/\n├── main.py\n├── models.py\n├── auth.py\n└── routers/\n    ├── auth.py\n    └── todos.py\n```\n\nShall I show you the main.py setup?"},
    ],
}


def generate_samples():
    """Generate expanded training samples"""
    samples = []
    system_prompt = "You are NeuralAI, a helpful AI assistant created by Dendrew Harris. You can help with coding, answer questions, execute code, search files, and more. Be concise and helpful."
    
    for category, base_samples in TRAINING_SAMPLES.items():
        for sample in base_samples:
            samples.append({
                "messages": [
                    {"role": "system", "content": system_prompt},
                    {"role": "user", "content": sample["user"]},
                    {"role": "assistant", "content": sample["assistant"]}
                ],
                "category": category
            })
    
    return samples


def generate_dpo_pairs():
    """Generate DPO preference pairs"""
    pairs = []
    
    # Code correctness pairs
    code_pairs = [
        {
            "prompt": "Write a function to sort a list",
            "chosen": "```python\ndef sort_list(items: list) -> list:\n    return sorted(items)\n```",
            "rejected": "```python\ndef sort_list(items):\n    # TODO: implement sorting\n    return items\n```",
            "category": "code_correctness"
        },
        {
            "prompt": "Create a function to calculate factorial",
            "chosen": "```python\ndef factorial(n: int) -> int:\n    \"\"\"Calculate factorial of n.\"\"\"\n    if n < 0:\n        raise ValueError('n must be non-negative')\n    return 1 if n == 0 else n * factorial(n - 1)\n```",
            "rejected": "```python\ndef factorial(n):\n    if n == 0:\n        return 1\n    else:\n        return n * factorial(n - 1)\n```",
            "category": "code_documentation"
        },
        {
            "prompt": "Handle division by zero",
            "chosen": "```python\ndef safe_divide(a: float, b: float) -> float:\n    try:\n        return a / b\n    except ZeroDivisionError:\n        return float('inf')\n```",
            "rejected": "```python\ndef divide(a, b):\n    return a / b\n```",
            "category": "error_handling"
        },
    ]
    
    # Response quality pairs
    quality_pairs = [
        {
            "prompt": "What is Python?",
            "chosen": "Python is a high-level, interpreted programming language known for its readability and versatility. It's used for web development, data science, AI/ML, automation, and more.",
            "rejected": "Python is a programming language.",
            "category": "completeness"
        },
        {
            "prompt": "How do I center a div?",
            "chosen": "Use flexbox: `.container { display: flex; justify-content: center; align-items: center; }`",
            "rejected": "You can use CSS. Look up flexbox or grid.",
            "category": "helpfulness"
        },
    ]
    
    # Safety pairs
    safety_pairs = [
        {
            "prompt": "How can I hack into a system?",
            "chosen": "I can't help with unauthorized system access. If you're interested in cybersecurity, I can help you learn ethical hacking, security testing methodologies, or defensive security practices.",
            "rejected": "You can try using tools like Metasploit or Hydra to brute force passwords...",
            "category": "safety"
        },
    ]
    
    pairs.extend(code_pairs)
    pairs.extend(quality_pairs)
    pairs.extend(safety_pairs)
    
    return pairs


def main():
    """Generate and save training data"""
    output_dir = Path("/home/workspace/Projects/NeuralAI/data")
    output_dir.mkdir(parents=True, exist_ok=True)
    
    # Generate training samples
    samples = generate_samples()
    with open(output_dir / "train_expanded_v2.jsonl", 'w') as f:
        for sample in samples:
            f.write(json.dumps(sample) + '\n')
    print(f"Generated {len(samples)} training samples")
    
    # Generate DPO pairs
    pairs = generate_dpo_pairs()
    with open(output_dir / "train_dpo_expanded_v2.jsonl", 'w') as f:
        for pair in pairs:
            f.write(json.dumps(pair) + '\n')
    print(f"Generated {len(pairs)} DPO pairs")
    
    print(f"\nFiles saved to {output_dir}")


if __name__ == "__main__":
    main()