Files
innovatieplatform/app/Http/Controllers/AiController.php
znetsixe f4ec49254a Full sweep: fix broken features, redesign NodePreview, wire AI service
FIXES (from comprehensive audit):
- NodePreview: complete rewrite — 380px left panel with document
  summaries, commitment list, phase track visualization, scrollable.
  Fixed children count bug (was showing [object Object]).
  Slides in from left (not right) to not overlap branch handles.
- CommitmentForm: added required validation on eigenaar_id field
- MetroMap: wired custom metro node creation with form + POST /metro-nodes
- MetroMap: removed dead handleCliCommand console.log
- MetroMap: added metro node creation modal (naam + beschrijving)

NEW — AI Service integration:
- ai-service/main.py: real Anthropic API integration via httpx
  - Reads ANTHROPIC_API_KEY from env, uses claude-haiku-4-5-20251001
  - /api/chat fetches project context from PostgreSQL (docs, commitments)
  - /api/summarize sends content to Claude for summarization
  - /api/search does basic text search on documents + kennis_artikelen
- AiController.php: Laravel proxy for /api/ai/chat → ai-service
- CliBar.vue: complete rewrite with async API calls, processing state,
  error handling, conversation history, auto-scroll
  - Receives projectId prop for context-scoped AI queries
  - Shows "denken..." animation while waiting for response
- docker-compose.yml: passes ANTHROPIC_API_KEY to ai-service container
- config/services.php: ai service URL configuration

To activate AI: set ANTHROPIC_API_KEY in .env and rebuild ai-service.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 15:07:51 +02:00

37 lines
1.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
class AiController extends Controller
{
public function chat(Request $request)
{
$validated = $request->validate([
'message' => 'required|string|max:2000',
'project_id' => 'nullable|integer',
'conversation_history' => 'nullable|array',
]);
$aiServiceUrl = config('services.ai.url', 'http://ai-service:8000');
try {
$response = Http::timeout(30)->post("{$aiServiceUrl}/api/chat", $validated);
if ($response->successful()) {
return response()->json($response->json());
}
return response()->json([
'reply' => 'AI service fout: ' . $response->body(),
], 500);
} catch (\Exception $e) {
return response()->json([
'reply' => 'AI service niet bereikbaar: ' . $e->getMessage(),
], 503);
}
}
}