a2a-source-edit: write agent.py

This commit is contained in:
a2a-cloud
2026-07-18 08:57:34 +00:00
parent 8bf645091b
commit c20b62400e

View File

@@ -12,7 +12,6 @@ import io
import json import json
import os import os
import re import re
import uuid
from datetime import datetime, timezone from datetime import datetime, timezone
from decimal import Decimal, InvalidOperation from decimal import Decimal, InvalidOperation
from typing import Annotated, Any from typing import Annotated, Any
@@ -31,7 +30,6 @@ from a2a_pack import (
Pricing, Pricing,
Resources, Resources,
RunContext, RunContext,
State,
UploadedFile, UploadedFile,
) )
@@ -95,7 +93,6 @@ class CsvAnswersStudioV1(A2AAgent[CsvAnswersStudioV1Config, PlatformUserAuth]):
config_model = CsvAnswersStudioV1Config config_model = CsvAnswersStudioV1Config
auth_model = PlatformUserAuth auth_model = PlatformUserAuth
state = State.DURABLE
resources = Resources(cpu="500m", memory="512Mi", max_runtime_seconds=120) resources = Resources(cpu="500m", memory="512Mi", max_runtime_seconds=120)
pricing = Pricing( pricing = Pricing(
price_per_call_usd=0.0, price_per_call_usd=0.0,
@@ -329,19 +326,21 @@ def _analyze_csv_text(*, analysis_id: str, csv_text: str, question: str) -> CsvA
numeric_column = _choose_numeric_column(question, numeric_columns) numeric_column = _choose_numeric_column(question, numeric_columns)
row_label_column = _choose_label_column(header, numeric_columns) row_label_column = _choose_label_column(header, numeric_columns)
best_index = -1
best_record: dict[str, str] | None = None best_record: dict[str, str] | None = None
best_value: Decimal | None = None best_value: Decimal | None = None
for record in records: for idx, record in enumerate(records):
value = _parse_number(record.get(numeric_column, "")) value = _parse_number(record.get(numeric_column, ""))
if value is None: if value is None:
continue continue
if best_value is None or value > best_value: if best_value is None or value > best_value:
best_value = value best_value = value
best_record = record best_record = record
best_index = idx
if best_record is None or best_value is None: if best_record is None or best_value is None:
return _error(analysis_id, "no_numeric_values", f"Column {numeric_column!r} does not contain numeric values.") return _error(analysis_id, "no_numeric_values", f"Column {numeric_column!r} does not contain numeric values.")
label = best_record.get(row_label_column) or f"row {records.index(best_record) + 1}" label = best_record.get(row_label_column) or f"row {best_index + 1}"
value_text = _format_decimal(best_value) value_text = _format_decimal(best_value)
answer = f"{label} has the highest {numeric_column} at {value_text}." answer = f"{label} has the highest {numeric_column} at {value_text}."
chart_data = [] chart_data = []
@@ -357,7 +356,7 @@ def _analyze_csv_text(*, analysis_id: str, csv_text: str, question: str) -> CsvA
) )
source_rows = [ source_rows = [
{ {
"row_number": records.index(best_record) + 1, "row_number": best_index + 1,
"values": best_record, "values": best_record,
"matched_column": numeric_column, "matched_column": numeric_column,
"matched_value": float(best_value), "matched_value": float(best_value),