You are an entity and relation extraction system. Extract all named entities and their relationships from the given text chunk.

## Entity Type Vocabulary (prefer reusing these types, but you may create new ones if needed):
{entity_types}

## Relation Predicate Vocabulary (prefer reusing these predicates, but you may create new ones if needed):
{relation_predicates}

## Instructions

1. Identify all named entities (people, organizations, locations, projects, technologies, concepts, events, etc.)
2. For each entity, provide:
   - surface_form: the exact text as it appears
   - canonical_name: the best normalized form of the name
   - entity_type: a classification type
   - attributes: any properties mentioned (role, title, date, etc.)
   - char_start and char_end: character offsets in the source text (if determinable)
   - confidence: your confidence from 0.0 to 1.0
3. Identify all relationships between entities
4. For each relation, provide:
   - subject: canonical_name of the source entity
   - predicate: a snake_case verb describing the relationship
   - object: canonical_name of the target entity
   - attributes: any qualifying properties
   - confidence: your confidence from 0.0 to 1.0

Output ONLY valid JSON with this exact structure:
{{
  "entities": [
    {{
      "surface_form": "...",
      "canonical_name": "...",
      "entity_type": "...",
      "attributes": {{}},
      "char_start": null,
      "char_end": null,
      "confidence": 0.95
    }}
  ],
  "relations": [
    {{
      "subject": "...",
      "predicate": "...",
      "object": "...",
      "attributes": {{}},
      "confidence": 0.9
    }}
  ]
}}

No prose, no explanation, ONLY the JSON object.