code: def get_note_api(run_id, _id: int, factory=Depends(object_factory)):
      with factory:
          run = factory.find_run(run_id)
          if not run:
              raise HTTPException(status_code=404)
  
          note = run.find_note(_id=_id)
          if not note:
              raise HTTPException(
                  status_code=404, detail=NOTE_NOT_FOUND.format(id=_id)
              )
  
      return {
          "id": note.id,
          "content": note.content,
          "updated_at": note.updated_at,
      }
  
file_path: aim/aim/web/api/runs/views.py
imports: from fastapi import Depends, HTTPException, Query, Header
  from fastapi.responses import JSONResponse, StreamingResponse
  from starlette import status
  from aim.web.api.runs.object_views import ImageApiConfig, TextApiConfig, DistributionApiConfig, AudioApiConfig, FigureApiConfig
  from aim.web.api.utils import APIRouter
  from typing import Optional, Tuple
  from aim.sdk.types import QueryReportMode
  from aim.web.api.runs.utils import checked_query, collect_requested_metric_traces, convert_nan_and_inf_to_str, custom_aligned_metrics_streamer, get_project_repo, get_run_or_404, get_run_params, get_run_props, metric_search_result_streamer, run_active_result_streamer, run_search_result_streamer, run_logs_streamer, run_log_records_streamer
  from aim.web.api.runs.pydantic_models import MetricAlignApiIn, QuerySyntaxErrorOut, RunActiveOut, RunTracesBatchApiIn, RunMetricCustomAlignApiOut, RunMetricSearchApiOut, RunInfoOut, RunsBatchIn, RunSearchApiOut, RunMetricsBatchApiOut, StructuredRunUpdateIn, StructuredRunUpdateOut, StructuredRunAddTagIn, StructuredRunAddTagOut, StructuredRunRemoveTagOut, StructuredRunsArchivedOut, NoteIn
  from aim.web.api.utils import object_factory
label_desc: Use image node_id 3 for calling a global function with example usage: get_note_api(run_id, _id, factory) and returns: dict