MCPcopy Create free account
hub / github.com/NVIDIA/NeMo-Relay / build_cache_telemetry_event

Function build_cache_telemetry_event

crates/python/src/py_adaptive.rs:322–367  ·  view source on GitHub ↗
(
    py: Python<'_>,
    provider: &str,
    request_id: &str,
    usage: Option<&Bound<'_, PyAny>>,
    request_facts: Option<&Bound<'_, PyAny>>,
    agent_id: &str,
    template_version: &str,
    

Source from the content-addressed store, hash-verified

320 text_signature = "(*, provider: str, request_id: str, usage: dict | None = None, request_facts: object | None = None, agent_id: str, template_version: str, toolset_hash: str, model_family: str, tenant_scope: str, timestamp: str | None = None) -> dict | None"
321)]
322fn build_cache_telemetry_event(
323 py: Python<'_>,
324 provider: &str,
325 request_id: &str,
326 usage: Option<&Bound<'_, PyAny>>,
327 request_facts: Option<&Bound<'_, PyAny>>,
328 agent_id: &str,
329 template_version: &str,
330 toolset_hash: &str,
331 model_family: &str,
332 tenant_scope: &str,
333 timestamp: Option<&str>,
334) -> PyResult<Py<PyAny>> {
335 let provider = parse_cache_telemetry_provider(provider)?;
336 let request_id = parse_cache_telemetry_request_id(request_id)?;
337 let timestamp = parse_cache_telemetry_timestamp(timestamp)?;
338 let Some(usage_json) = opt_py_to_json(usage)? else {
339 return Ok(py.None());
340 };
341 let request_facts = parse_cache_request_facts(request_facts)?;
342 let usage: Usage = serde_json::from_value(usage_json)
343 .map_err(|e| pyo3::exceptions::PyValueError::new_err(format!("invalid usage: {e}")))?;
344 let agent_identity = AgentIdentity {
345 agent_id: agent_id.to_string(),
346 template_version: template_version.to_string(),
347 toolset_hash: toolset_hash.to_string(),
348 model_family: model_family.to_string(),
349 tenant_scope: tenant_scope.to_string(),
350 };
351
352 match CacheTelemetryEvent::from_usage(
353 request_id,
354 agent_identity,
355 provider,
356 &usage,
357 timestamp,
358 request_facts.as_ref(),
359 ) {
360 Some(event) => {
361 let event = serde_json::to_value(&event)
362 .map_err(|e| pyo3::exceptions::PyRuntimeError::new_err(e.to_string()))?;
363 json_to_py(py, &event)
364 }
365 None => Ok(py.None()),
366 }
367}
368
369#[pyfunction]
370#[pyo3(signature = (config: "object") -> "object", text_signature = "(config: object) -> object")]

Calls 6

opt_py_to_jsonFunction · 0.85
json_to_pyFunction · 0.85