Skip to content

merge from master#1

Open
lucy-kind wants to merge 3114 commits intolucy-kind:addsvsfrom
datacommonsorg:master
Open

merge from master#1
lucy-kind wants to merge 3114 commits intolucy-kind:addsvsfrom
datacommonsorg:master

Conversation

@lucy-kind
Copy link
Owner

No description provided.

clincoln8 and others added 30 commits November 6, 2025 17:07
Introduces the necessary infrastructure to support an agentic detector
mode for NL queries:
* Uses the `enable_nl_agent_detector` flag created in
#5694
* Updates to the detector routing logic to accommodate the new "agent"
detector type.
* <img width="3424" height="1716" alt="image"
src="https://github.com/user-attachments/assets/acec41ea-e7da-46de-9e34-bf8dd538847a"
/>
* The agent detector currently returns an empty Detection response as a
placeholder for future implementation.


Misc changes included in this PR:
* This also fixes a bug in debug logs where detection information was
not propagated on abort pathway.
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
- Make a fresh version of the Docker image with pre-built node_modules,
including the two other directories that have them.
  - Add convenience script for copying them into place
- Also disable npm audit when using them, on the suspicion that npm
downloads a bunch of stuff despite the cache to do the audit.

~Fold in the Custom DC webdriver tests that used to run single-threaded
under the `one_at_a_time` annotation. Recent efforts to reduce flakiness
hopefully mean that this is safe. If that proves out after a couple
weeks, we can go through and clean up `one_at_a_time` elsewhere in the
code.~ Left this out in the end because it didn't seem to improve
flakiness.
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
Following conversation with Prem, the decision is to disable the
autocomplete experiment. Keep the code in, and revisit later. For now,
there are more pressing things to work on, and the experiment results do
not justify putting more work in.
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
Creates a wrapper around `@cache.cached` and `@cache.memoize` that logs
any `requestIds` found in the cached result. These IDs uniquely identify
each Mixer response and are added to the `ObservationResponse` in [this
PR](datacommonsorg/mixer#1660).

These logs are used to track usage from the website cache in my Mixer
usage logs. The logger writes the `requestIds` in a JSON object that can
be ingested by GCP cloud logging, which I plan to route to a BigQuery
table and join with my existing mixer logs to track which mixer calls
are used even when they are cached. The request IDs are written for
cache hits and misses -- in my logger, I plan to subtract one call from
each ID found to account for the first cache miss.

This first PR adds the cacher and uses it in `get` and `post_wrapper`,
where we most directly fetch the Mixer results. It will later be used
anywhere we cache an object that is populated by Mixer results. These
first cases use `cache.memoize`, but I added support for `cache.cached`
as well because it is used by these later sites. The later changes are
made in [this PR](#5693).
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
This PR adds the ONE Data logo to the partners component

<img width="1358" height="223" alt="Screenshot 2025-11-11 at 4 49 32 PM"
src="https://github.com/user-attachments/assets/ece061ed-0b9a-4528-8ea1-74d1fdae81ab"
/>
Expands the cache wrapper added in [this PR
](#5652) to all callsites
that cache mixer responses. This logs the mixer response IDs (unique ID
for each call made to mixer) in the following places:
- point, point_within, etc. -- all `point` and `series fetchers
- `overview_table` on the place page

These logs are used to track mixer usage in the website cache.
This is a simplified version of
#5708.

Included in this PR:
* Initialize and add to the Flask app config a single ADK Runner
containing the detection agent during server startup
* The detection agent requires an env var `DC_MCP_URL` to connect to a
DC MCP server via http
* For each detect-and-fulfill request, an ephemeral App session is
created along with an MCP session to perform the detection tasks.
* The app session is manually deleted at the end of the request to keep
the number of sessions in the InMemorySessionService low
* The MCP sessions are deleted using toolset.close() to correctly close
them from the correct thread. See MCP session management below for more
context.

#### Testing
Started the MCP server in a terminal:
```
DC_API_KEY=<my_key> uvx datacommons-mcp@1.1.2rc2 serve http --port 3001
```
Then started the client code and nl servers in separate terminals
(`./run_npm.sh` and `./run_nl_server.sh`). Then in another terminal ran
```
DC_MCP_URL=http://localhost:3001 ./run_server.sh -m
```
then went to
`http://localhost:8080/explore?q=gdp+of+california&client=ui_query&detector=agent`
which printed:
```
indicators={'InflationAdjustedGDP': 'Measure of gross domestic product', 'Amount_EconomicActivity_GrossDomesticProduction_RealValue': 'Real gross domestic product by economic activity', 'dc/topic/GDP': 'GDP'} places=[Place(dcid='geoId/06', name='California', place_type='State')] parent_place=None child_place_type=None classification='Simple'
```


#### MCP Session Management Info
* toolset close is meant to be called multiple times: [toolset.close
implementation](https://github.com/google/adk-python/blob/b7d571bc3fa751bb2b08e83e666eec8c2c63eae1/src/google/adk/tools/mcp_tool/mcp_toolset.py#L212-L214)
* calls [mcp_session close
implmentation](https://github.com/google/adk-python/blob/b7d571bc3fa751bb2b08e83e666eec8c2c63eae1/src/google/adk/tools/mcp_tool/mcp_session_manager.py#L388-L403)
* a new mcp session is created at each tool call: [tool.run_async
impl](https://github.com/google/adk-python/blob/b7d571bc3fa751bb2b08e83e666eec8c2c63eae1/src/google/adk/tools/mcp_tool/mcp_tool.py#L217)
* so we need to close those sessions when we're done with the tool call
* documentation:
[instruction](https://google.github.io/adk-docs/tools-custom/mcp-tools/#using-mcp-tools-in-your-own-agent-out-of-adk-web:~:text=You%20need%20to%20properly%20manage%20the%20exit%20stack%2C%20so%20that%20your%20agents%20and%20tools%20are%20destructed%20properly%20when%20the%20connection%20to%20MCP%20Server%20is%20closed.),
[code](https://google.github.io/adk-docs/tools-custom/mcp-tools/#using-mcp-tools-in-your-own-agent-out-of-adk-web:~:text=await%20toolset.close())
* example discussion: google/adk-docs#319
…nd race conditions (#5727)

# Changes Made
This PR fixes some bugs in the Scatter Tool related to context
initialization and updating. These changes are:

### 1. Initialize Context using hash parameter values

Currently, the Scatter tool initializes its context with an empty state,
and requires a re-render when updating the empty state with hash values
from the URL.

This PR initializes the context with values from the current hash, which
prevents the unnecessary re-render.

### 2. Use React's builtin previous state handling to avoid race
conditions

The current context setters had the client manually provide the previous
state to update. The problem is that this resulted in a race condition
when multiple context setting functions are called concurrently. Changes
in one context update would get clobbered by a different context update
because the second updater was using a now-outdated version of the
context.

This PR updates the setters to use react's built-in functional state
update syntax so that react always sees the latest `prevState`.

### 3. Clean up handling of hash parameters in utils
The context handling utils contain a bug that result in hash parameters
being added even when the parameter's value is undefined. This PR now
only adds hash parameters to the URL if both key and value are truthy.

### 4. Update client tests
This PR also updates the scatter npm client tests to match these
changes.

# Issues Fixed
As a result, these changes fix the following issues:

### 1. The stat var widget flickers in and out when loading a chart URL
When clicking landing page links or directly navigating to a scatter
chart URL, the stat var widget will flicker in and out due to the
enclosing places being re-set between re-renders. The functional version
of state updates does not re-set enclosing places between re-renders,
which stops the flickering.

Before:


https://github.com/user-attachments/assets/05abbe2b-3cde-435b-94d9-779054022f21


After:


https://github.com/user-attachments/assets/60e83747-9115-4bdf-8acd-c9f7cd0095a1


### 2. The scatter tool hangs sometimes
Sometimes, the tool will stall and not load anything despite having
selected settings via the UI. This is caused by the race condition
described above, where concurrent context updates clobber each other,
leaving the app in an invalid state. Switching to the functional state
update syntax removes this race condition.

### 3. Scatter tool URLs have unnecessary entries
Interacting with the scatter tool results in chart URLs that look like
this (note the unnecessary `%26` after the hash `#`):
```
/tools/scatter#%26svx%3DCount_Person%26lx%3D1%26dx%3DCount_Person%26svy%3DCount_HousingUnit%26pcy%3D1%26dy%3DCount_Person%26epd%3DgeoId%2F10%26ept%3DCounty%26ub%3D99999%26qd%3D1%26ld%3D1%26dd%3D1%26rg%3D1%26pp%3Dlinear
```
Note the unnecessary %26 in front. With this change, URLs now look like
(note the unnecessary `%26` after the hash `#` is now gone):
```
/tools/scatter#svx%3DCount_Person%26lx%3D1%26dx%3DCount_Person%26svy%3DCount_HousingUnit%26pcy%3D1%26dy%3DCount_Person%26epd%3DgeoId%2F10%26ept%3DCounty%26ub%3D99999%26qd%3D1%26ld%3D1%26dd%3D1%26rg%3D1%26pp%3Dlinear
```
- Split into two scripts, one that creates a dataset and cloud loggers
in each project that has a Mixer instance and one that creates a
aggregation dataset and schedules a query to aggregate the logs.
- I split these up because Cloud Logging takes a minute to ingest the
first batch of logs and declare the schema of the destination table.
It's possible to manually define the schema, but because it's so complex
it seems easier especially if partners modify the schema in the future
to just wait.
- Also includes a readme outlining how to use the scripts.
- Fully parameterized so can be customized for any GCP project.
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
…ation_test env (#5728)

Tested by starting local website with:
1. current PR to ensure default behavior is unchanged and 
2. disabled both `LOG_EXTREME_MIXER_CALLS` and
`LOG_CACHED_MIXER_RESPONSE_USAGE` in `server/app_env/local.py` to test
that both cases were no longer logged (then reverted the change to
local.py)

Reason for change: These logs tend to clutter the integration test and
webdriver outputs, making it hard to find salient error messages.
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
Follow up to datacommonsorg/mixer#1785 , which
upgrades the version in mixer

Once approved but before submitting, I will
* Update the docker image following
https://github.com/datacommonsorg/website/blob/009c7f2faa36c46571c14277a18874626f78e239/build/full_env/README.md?plain=1#L30-L40

After submitting, I will
* Create a mixer pr to update the mixer-only tags
https://github.com/search?q=repo%3Adatacommonsorg%2Fmixer%20mixer-only&type=code

Please let me know if these steps make sense or if there's anything else
needed
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
…w a spike of usage after enabling the feature for 20% of users, gradually rolling up to 60% (#5995)

In the prod environment, saw a spike of 4 times Gemini usage after 20%
rollup, where a small spike of page views was also observed. Gradually
rolling to 60% and monitor the usage again
Co-authored-by: Hannah Pho <hpho@google.com>
Co-authored-by: Gabriel Mechali <gabriel.mechali@gmail.com>
Co-authored-by: Keyur Shah <keyurva@gmail.com>
Co-authored-by: Christie Ellks <calinc@google.com>
Co-authored-by: Dan Noble <dnoble@gmail.com>
Co-authored-by: chejennifer <69875368+chejennifer@users.noreply.github.com>
Co-authored-by: Carolyn Au <6052978+beets@users.noreply.github.com>
Co-authored-by: Vishal Gupta <vishg@google.com>
Co-authored-by: natalie <77713883+n-h-diaz@users.noreply.github.com>
## Issue

[b/487296898](https://b.corp.google.com/issues/487296898)

## Description

The test_hover_tooltip test had begun to fail intermittently in both my
local environment and during PRs. This can be replicated locally by
running the following command (although as with all race condition
issues with tests, mileage may vary):

```
./run_test.sh -w --flake-finder -k "test_hover_tooltip"
```

The PR adds in a new utility function that follows the pattern of other
functions in `base_utils.py` that avoid race condition errors by
granting an allowance until timeout before failing.

It then updates the test to use that new function.

## Testing

Running the test with the `flake-finder` flag in master will likely
result in failures. Running the test afterwards should result in no
failures.
This pull request updates the golden files automatically via Cloud
Build. Please review the changes carefully. [Cloud Build
Log](https://console.cloud.google.com/cloud-build/builds/d8fea5e3-e0d2-4b57-9334-272b7027f005?project=datcom-ci)

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
Co-authored-by: natalie <77713883+n-h-diaz@users.noreply.github.com>
## Description

This PR updates the v1 scatterplot vis tool so that the metadata modal
is populated by the facets selected in the chart (and so change when a
facet is explicitly selected).

There are two primary changes that implement this:
1. The code (in chart_loader.tsx) that collates the metadata and
mappings for the citation display/API dialog is updated to only include
the selected facet (if one is given).
2. These are now passed into ToolChartFooter in chart.tsx.

## Issue

[b/485657324](https://b.corp.google.com/issues/485657324)

## Testing

URL: [Chart to
test](http://localhost:8080/tools/scatter#svx%3DDifferenceRelativeToBaseDate2006_Max_Temperature_RCP45%26dx%3DCount_Person%26svy%3DPercent_Person_WithCoronaryHeartDisease%26dy%3DCount_Person%26epd%3Dcountry%2FUSA%26ept%3DCounty%26qd%3D1%26dd%3D1)

### Before

The behavior before this PR is:
1. When no facet is selected (for either of the axes) the metadata modal
displays all the facets [this is expected].
2. When a facet is selected (for either axis or both), then the stat var
still displays all the facets [this will change in the after].

### After

The behavior after this PR is:
1. When no facet is selected (for either of the axes) the metadata modal
displays all the facets [this is the same as before].
2. When a facet is selected (for either axis or both), then only the
selected facet will display for that stat var].
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
This PR is updating the LLM fallback prompt based on the observation
that we have a flaky test that returns unsafe query or cut query metric
for "number of poort hispanic women phd"

It includes modifying the instruction to include "number of" and a new
example to clarify UNSAFE range to stablize the query.

Before the prompt change, the mentioned test has 1/4 chance of being
classified as unsafe and 1/8 chance missing "number of" in the query.

With this prompt change, the above situations are fully removed and
local NL eval test on hybrid mode shows no score difference with the
recent staing nl eval run
## Description

This PR updates the v1 map vis tool so that the metadata modal is
populated by the facets selected in the chart (and so change when a
facet is explicitly selected).

It is a follow-up to
[6011](#6011)

There are related updates that implement the changes in the PR:

1. Update the metadata modal in the V1 map tool to only show selected
facets.
2. Update the source list in the V1 map tool to only show sources
connected to those facets
3. Update the source list in the V1 scatter tool to only show sources
connected to selected facets.
4. Update the ga_events tests for the new map interface.

## Testing

URL: [Map Chart to
test](http://localhost:8080/tools/map#%26sv%3DMedian_Age_Person%26pc%3D0%26denom%3DCount_Person%26pd%3Dcountry%2FUSA%26ept%3DCounty)

### Before

The behavior before this PR is:
1. When no facet is selected the metadata modal displays all the facets
[this is expected].
2. When a facet is selected, then the stat var still displays all the
facets [this will change in the after].

### After

The behavior after this PR is:
1. When no facet is selected the metadata modal displays all the facets
[this is the same as before].
2. When a facet is selected, then only that facet displays in the
metadata modal, reflecting the facet displayed on the map [this
functionality is different].

URL: [Scatter Plot to
test](http://localhost:8080/tools/scatter#svx%3DCount_Person_BelowPovertyLevelInThePast12Months_AsFractionOf_Count_Person%26dx%3DCount_Person%26svy%3DCount_Person_Literate%26pcy%3D1%26dy%3DCount_Person%26epd%3Dcountry%2FIND%26ept%3DAdministrativeArea1)

### Before

Selecting facets before this PR do not update the sources displayed with
the chart.

### After

Selecting facets after this PR update the sources displayed with the
chart.

The metadata modal fix from the previous PR should remains intact.
This is within the larger migration project where we wanted to deprecate
usage of search_dc page which is only used for internal search. For now we will redirect user to the /search path. 
The follow up steps is to mark the apigee endpoint in mixer server as deprecated and monitor traffic going to zero before deleting code.
I tested this locally via
[instructions](https://github.com/datacommonsorg/website/blob/master/docs/developer_guide.md#running-flask-locally)
on some simple queries.
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
Launch the migrated visualization tool experience on production at 100%


Updates the `standardized_vis_tool` feature flag to a 100% rollout
instead of a 20% rollout. This change follows the successful 20% rollout
and launch approval via email from team leads.

Note to reviewers: This change will go live on prod the moment this PR
gets merged, outside of the normal release process. We'll time the merge
of this PR with the next website production release.
This pull request updates the golden files automatically via Cloud
Build. Please review the changes carefully. [Cloud Build
Log](https://console.cloud.google.com/cloud-build/builds/23fc5e86-af24-4cd9-8c99-dbd732b3396d?project=datcom-ci)

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
Co-authored-by: natalie <77713883+n-h-diaz@users.noreply.github.com>
Removes the false-alarm uv warnings seen when running `./run_test.sh -p`

## Problem
When running `./run_test.sh -p`, we see warnings like:

```
warning: `VIRTUAL_ENV=tools/nl/embeddings/.venv` does not match the project environment path `server/.venv` and will be ignored; use `--active` to target the active environment instead
```

But the test script is working as intended, so no action is needed.

## Root cause

In these lines of `run_test.sh`:
https://github.com/datacommonsorg/website/blob/8afa6bd1d5530a9803f580468bd3cafb12d55f4a/run_test.sh#L235-L241

tools/nl/embeddings doesn't use a uv .toml file yet, so we need to
manually create and activate a local venv.

Then in line 245 and 250 uv is switching to the environment defined in
`server/.venv` (as intended) to do the lint checks, but warning us that
it's making the switch.

## Changes made

This PR deactivates the `tools/nl/embeddings/.venv` after we're done
using it, so there is no longer an active enviroment to conflict with
`server/.venv`
Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.1.2 to
3.1.3.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/isaacs/minimatch/commit/00c323b188b704e5d4bc534ecec2268cfa70a32a"><code>00c323b</code></a>
3.1.3</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/30486b2048929264f44d18822891cfffa02af78b"><code>30486b2</code></a>
update CI matrix and actions</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/9c31b2d4e0af72a6c2d2d62c5dbc2247da669802"><code>9c31b2d</code></a>
update test expectations for coalesced consecutive stars</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/46fe687857cf02f6cf45469cc593b97e11b10c96"><code>46fe687</code></a>
coalesce consecutive non-globstar * characters</li>
<li><a
href="https://github.com/isaacs/minimatch/commit/5a9ccbda64befc5d94b965534dbea2853c92aebd"><code>5a9ccbd</code></a>
[meta] update publishConfig.tag to legacy-v3</li>
<li>See full diff in <a
href="https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=minimatch&package-manager=npm_and_yarn&previous-version=3.1.2&new-version=3.1.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/datacommonsorg/website/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
The `geoJsonCoordinateIndia*` family of properties have been added, and
they are taking up a lot of space in our browser pages:

<img width="1706" height="1328" alt="image"
src="https://github.com/user-attachments/assets/cafc1c9b-d1c2-43a3-b66d-22e563cb3bed"
/>

This PR adds these properties to the "filtered out" list so they stop
showing up in the browser pages:

(notice that there are no geoJson properties showing up anymore)
<img width="1706" height="1328" alt="image"
src="https://github.com/user-attachments/assets/207a2422-8b78-4f02-9143-0e7992baf217"
/>
Adding a workflow to auto-approve our dependabot package update PRs.
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
As a followup to #6050, this PR implements the Gemini suggestion to
refactor the property exclusion logic to filter by prefix.

Original Gemini Comment:
#6050 (comment)

> While this change is correct, the list of geoJsonCoordinates
properties to ignore is getting quite long. To improve maintainability
and avoid having to update this list every time a new geo-related
property is added, consider refactoring this to use a prefix-based
filter. As per our guidelines, use Array.prototype.some() to check for
the existence of an element in an array that satisfies a condition, as
it is more declarative and concise than using a loop with a flag
variable.
>
> For example, you could modify the check in fetchData to something like
this:
```TypeScript
const IGNORED_PROPERTIES = new Set([
  "provenance",
  "kmlCoordinates",
  "firePerimeter",
]);
const IGNORED_PREFIXES = ["geoJsonCoordinates"];

// in fetchData()
for (const pred in triplesData) {
  if (
    IGNORED_PROPERTIES.has(pred) ||
    IGNORED_PREFIXES.some((prefix) => pred.startsWith(prefix))
  ) {
    continue;
  }
  // ...
}
```
> This would make the code more robust to future additions of similar
properties. This could be addressed in a follow-up change.

Changes made in this PR:
* Filters out geoJson properties by prefix instead
* Adds a function for determining whether to ignore a given property
* Adds a unit test for that new function

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
…tools/nl/eval (#6015)

Bumps
[google-cloud-aiplatform](https://github.com/googleapis/python-aiplatform)
from 1.42.1 to 1.133.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/python-aiplatform/releases">google-cloud-aiplatform's
releases</a>.</em></p>
<blockquote>
<h2>v1.133.0</h2>
<h2><a
href="https://github.com/googleapis/python-aiplatform/compare/v1.132.0...v1.133.0">1.133.0</a>
(2026-01-08)</h2>
<h3>Features</h3>
<ul>
<li>Deprecate tuning public preview SDK in favor of tuning SDK (<a
href="https://github.com/googleapis/python-aiplatform/commit/35d362ce8f6c50498f781857e0d8cabd327284be">35d362c</a>)</li>
<li>GenAI SDK client - Enabling Few-shot Prompt Optimization by passing
either &quot;OPTIMIZATION_TARGET_FEW_SHOT_RUBRICS&quot; or
&quot;OPTIMIZATION_TARGET_FEW_SHOT_TARGET_RESPONSE&quot; to the
<code>optimize_prompt</code> method (<a
href="https://github.com/googleapis/python-aiplatform/commit/715cc5b71b996eecde2d97bad71a617274739dcc">715cc5b</a>)</li>
<li>GenAI SDK client(memory): Add enable_third_person_memories (<a
href="https://github.com/googleapis/python-aiplatform/commit/65717fa0c3d9b8c3105638cf9c75ee415f36b6e0">65717fa</a>)</li>
<li>Support Developer Connect in AE (<a
href="https://github.com/googleapis/python-aiplatform/commit/04f1771e16f54a0627ecac1266764ca77f833694">04f1771</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Add None check for agent_info in evals.py (<a
href="https://github.com/googleapis/python-aiplatform/commit/c8c0f0f7eb67696c2e91902af7e6dca20cea2040">c8c0f0f</a>)</li>
<li>GenAI client(evals) - Fix TypeError in
_build_generate_content_config (<a
href="https://github.com/googleapis/python-aiplatform/commit/be2eaaa30dbf13a86f6856771eeacd2a51a97806">be2eaaa</a>)</li>
<li>Make project_number to project_id mapping fail-open. (<a
href="https://github.com/googleapis/python-aiplatform/commit/f1c8458dd5e4641cb03ff175f0837b6d6017c131">f1c8458</a>)</li>
<li>Replace asyncio.run with create_task in ADK async thread mains. (<a
href="https://github.com/googleapis/python-aiplatform/commit/83f4076706d808dcc0e1784219856846540e10da">83f4076</a>)</li>
<li>Replace asyncio.run with create_task in ADK async thread mains. (<a
href="https://github.com/googleapis/python-aiplatform/commit/8c876ef069d0fe6942790ede41e203196cd4a390">8c876ef</a>)</li>
<li>Require uri or staging bucket configuration for saving model to
Vertex Experiment. (<a
href="https://github.com/googleapis/python-aiplatform/commit/5448f065fa30d77c2ee0868249ec0bea6a93a4c0">5448f06</a>)</li>
<li>Return embedding metadata if available (<a
href="https://github.com/googleapis/python-aiplatform/commit/d9c6eb199b6ccc1fae417463e1b374574f2ae2f8">d9c6eb1</a>)</li>
<li>Update <code>examples_dataframe</code> type to
<code>PandasDataFrame</code> in Prompt Optimizer. (<a
href="https://github.com/googleapis/python-aiplatform/commit/a2564cc3ea5c4860ee732f14cea9db2c10b52420">a2564cc</a>)</li>
</ul>
<h2>v1.132.0</h2>
<h2><a
href="https://github.com/googleapis/python-aiplatform/compare/v1.131.0...v1.132.0">1.132.0</a>
(2025-12-17)</h2>
<h3>Features</h3>
<ul>
<li>Add Lustre support to the Vertex Training Custom Job API (<a
href="https://github.com/googleapis/python-aiplatform/commit/71747e8cbb028f321fd9499bd77656b083909eb0">71747e8</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>A comment for field <code>restart_job_on_worker_restart</code> in
message <code>.google.cloud.aiplatform.v1beta1.Scheduling</code> is
changed (<a
href="https://github.com/googleapis/python-aiplatform/commit/71747e8cbb028f321fd9499bd77656b083909eb0">71747e8</a>)</li>
<li>A comment for field <code>timeout</code> in message
<code>.google.cloud.aiplatform.v1beta1.Scheduling</code> is changed (<a
href="https://github.com/googleapis/python-aiplatform/commit/71747e8cbb028f321fd9499bd77656b083909eb0">71747e8</a>)</li>
</ul>
<h2>v1.131.0</h2>
<h2><a
href="https://github.com/googleapis/python-aiplatform/compare/v1.130.0...v1.131.0">1.131.0</a>
(2025-12-16)</h2>
<h3>Features</h3>
<ul>
<li>Allow list of events to be passed to AdkApp.async_stream_query (<a
href="https://github.com/googleapis/python-aiplatform/commit/dd8840a5012b2762f8b8971b6cea4302ac5c648d">dd8840a</a>)</li>
<li>GenAI Client(evals) - Support CustomCodeExecution metric in Vertex
Gen AI Eval Service (<a
href="https://github.com/googleapis/python-aiplatform/commit/4114728750b5b12f991a18df87c1f1a570d1b29d">4114728</a>)</li>
<li>Updates the ADK template to direct structured JSON logs to standard
output. (<a
href="https://github.com/googleapis/python-aiplatform/commit/a65ec297c5b8d99e4d2dfb49473c189197198f97">a65ec29</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/python-aiplatform/blob/main/CHANGELOG.md">google-cloud-aiplatform's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/googleapis/python-aiplatform/compare/v1.132.0...v1.133.0">1.133.0</a>
(2026-01-08)</h2>
<h3>Features</h3>
<ul>
<li>Deprecate tuning public preview SDK in favor of tuning SDK (<a
href="https://github.com/googleapis/python-aiplatform/commit/35d362ce8f6c50498f781857e0d8cabd327284be">35d362c</a>)</li>
<li>GenAI SDK client - Enabling Few-shot Prompt Optimization by passing
either &quot;OPTIMIZATION_TARGET_FEW_SHOT_RUBRICS&quot; or
&quot;OPTIMIZATION_TARGET_FEW_SHOT_TARGET_RESPONSE&quot; to the
<code>optimize_prompt</code> method (<a
href="https://github.com/googleapis/python-aiplatform/commit/715cc5b71b996eecde2d97bad71a617274739dcc">715cc5b</a>)</li>
<li>GenAI SDK client(memory): Add enable_third_person_memories (<a
href="https://github.com/googleapis/python-aiplatform/commit/65717fa0c3d9b8c3105638cf9c75ee415f36b6e0">65717fa</a>)</li>
<li>Support Developer Connect in AE (<a
href="https://github.com/googleapis/python-aiplatform/commit/04f1771e16f54a0627ecac1266764ca77f833694">04f1771</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Add None check for agent_info in evals.py (<a
href="https://github.com/googleapis/python-aiplatform/commit/c8c0f0f7eb67696c2e91902af7e6dca20cea2040">c8c0f0f</a>)</li>
<li>GenAI client(evals) - Fix TypeError in
_build_generate_content_config (<a
href="https://github.com/googleapis/python-aiplatform/commit/be2eaaa30dbf13a86f6856771eeacd2a51a97806">be2eaaa</a>)</li>
<li>Make project_number to project_id mapping fail-open. (<a
href="https://github.com/googleapis/python-aiplatform/commit/f1c8458dd5e4641cb03ff175f0837b6d6017c131">f1c8458</a>)</li>
<li>Replace asyncio.run with create_task in ADK async thread mains. (<a
href="https://github.com/googleapis/python-aiplatform/commit/83f4076706d808dcc0e1784219856846540e10da">83f4076</a>)</li>
<li>Replace asyncio.run with create_task in ADK async thread mains. (<a
href="https://github.com/googleapis/python-aiplatform/commit/8c876ef069d0fe6942790ede41e203196cd4a390">8c876ef</a>)</li>
<li>Require uri or staging bucket configuration for saving model to
Vertex Experiment. (<a
href="https://github.com/googleapis/python-aiplatform/commit/5448f065fa30d77c2ee0868249ec0bea6a93a4c0">5448f06</a>)</li>
<li>Return embedding metadata if available (<a
href="https://github.com/googleapis/python-aiplatform/commit/d9c6eb199b6ccc1fae417463e1b374574f2ae2f8">d9c6eb1</a>)</li>
<li>Update <code>examples_dataframe</code> type to
<code>PandasDataFrame</code> in Prompt Optimizer. (<a
href="https://github.com/googleapis/python-aiplatform/commit/a2564cc3ea5c4860ee732f14cea9db2c10b52420">a2564cc</a>)</li>
</ul>
<h2><a
href="https://github.com/googleapis/python-aiplatform/compare/v1.131.0...v1.132.0">1.132.0</a>
(2025-12-17)</h2>
<h3>Features</h3>
<ul>
<li>Add Lustre support to the Vertex Training Custom Job API (<a
href="https://github.com/googleapis/python-aiplatform/commit/71747e8cbb028f321fd9499bd77656b083909eb0">71747e8</a>)</li>
<li>Add Lustre support to the Vertex Training Custom Job API (<a
href="https://github.com/googleapis/python-aiplatform/commit/71747e8cbb028f321fd9499bd77656b083909eb0">71747e8</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>A comment for field <code>restart_job_on_worker_restart</code> in
message <code>.google.cloud.aiplatform.v1beta1.Scheduling</code> is
changed (<a
href="https://github.com/googleapis/python-aiplatform/commit/71747e8cbb028f321fd9499bd77656b083909eb0">71747e8</a>)</li>
<li>A comment for field <code>timeout</code> in message
<code>.google.cloud.aiplatform.v1beta1.Scheduling</code> is changed (<a
href="https://github.com/googleapis/python-aiplatform/commit/71747e8cbb028f321fd9499bd77656b083909eb0">71747e8</a>)</li>
</ul>
<h2><a
href="https://github.com/googleapis/python-aiplatform/compare/v1.130.0...v1.131.0">1.131.0</a>
(2025-12-16)</h2>
<h3>Features</h3>
<ul>
<li>Allow list of events to be passed to AdkApp.async_stream_query (<a
href="https://github.com/googleapis/python-aiplatform/commit/dd8840a5012b2762f8b8971b6cea4302ac5c648d">dd8840a</a>)</li>
<li>GenAI Client(evals) - Support CustomCodeExecution metric in Vertex
Gen AI Eval Service (<a
href="https://github.com/googleapis/python-aiplatform/commit/4114728750b5b12f991a18df87c1f1a570d1b29d">4114728</a>)</li>
<li>Updates the ADK template to direct structured JSON logs to standard
output. (<a
href="https://github.com/googleapis/python-aiplatform/commit/a65ec297c5b8d99e4d2dfb49473c189197198f97">a65ec29</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>Fix RagManagedVertexVectorSearch when using backend_config (<a
href="https://github.com/googleapis/python-aiplatform/commit/df0976ed3195dc8313f4728bc5ecb29dda55d467">df0976e</a>)</li>
<li>GenAI Client(evals) - patch for vulnerability in visualization (<a
href="https://github.com/googleapis/python-aiplatform/commit/8a00d43dbd24e95dbab6ea32c63ce0a5a1849480">8a00d43</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/googleapis/python-aiplatform/commit/78f2bdd08bae0696923e61ab73080b5846c67ae0"><code>78f2bdd</code></a>
chore(main): release 1.133.0 (<a
href="https://redirect.github.com/googleapis/python-aiplatform/issues/6211">#6211</a>)</li>
<li><a
href="https://github.com/googleapis/python-aiplatform/commit/c8c0f0f7eb67696c2e91902af7e6dca20cea2040"><code>c8c0f0f</code></a>
fix: Add None check for agent_info in evals.py</li>
<li><a
href="https://github.com/googleapis/python-aiplatform/commit/9952b970b73cfe38e68c48b3699ee4e1df0264df"><code>9952b97</code></a>
chore: rollback</li>
<li><a
href="https://github.com/googleapis/python-aiplatform/commit/83f4076706d808dcc0e1784219856846540e10da"><code>83f4076</code></a>
fix: Replace asyncio.run with create_task in ADK async thread
mains.</li>
<li><a
href="https://github.com/googleapis/python-aiplatform/commit/937d5af6b9bdbbe3b50181745c99550f124ad8b4"><code>937d5af</code></a>
Copybara import of the project:</li>
<li><a
href="https://github.com/googleapis/python-aiplatform/commit/aaaf902be02747cd2281196aad6278df0fd11f7e"><code>aaaf902</code></a>
chore: bump google-auth lower bound to 2.47.0 in GenAI and Vertex
SDKs</li>
<li><a
href="https://github.com/googleapis/python-aiplatform/commit/8c876ef069d0fe6942790ede41e203196cd4a390"><code>8c876ef</code></a>
fix: Replace asyncio.run with create_task in ADK async thread
mains.</li>
<li><a
href="https://github.com/googleapis/python-aiplatform/commit/5448f065fa30d77c2ee0868249ec0bea6a93a4c0"><code>5448f06</code></a>
fix: Require uri or staging bucket configuration for saving model to
Vertex E...</li>
<li><a
href="https://github.com/googleapis/python-aiplatform/commit/65717fa0c3d9b8c3105638cf9c75ee415f36b6e0"><code>65717fa</code></a>
feat: GenAI SDK client(memory): Add enable_third_person_memories</li>
<li><a
href="https://github.com/googleapis/python-aiplatform/commit/be2eaaa30dbf13a86f6856771eeacd2a51a97806"><code>be2eaaa</code></a>
fix: GenAI client(evals) - Fix TypeError in
_build_generate_content_config</li>
<li>Additional commits viewable in <a
href="https://github.com/googleapis/python-aiplatform/compare/v1.42.1...v1.133.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=google-cloud-aiplatform&package-manager=pip&previous-version=1.42.1&new-version=1.133.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/datacommonsorg/website/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Carolyn Au <6052978+beets@users.noreply.github.com>
This PR automatically updates the `mixer` and `import` submodules to
their latest `master` branches.

Co-authored-by: datacommons-robot-author <datacommons-robot-author@users.noreply.github.com>
…bvious Gemini usage increase in the past week (#6054)

Monitored last week's prod Gemini usage and no significant increase.
Bumping to 100%
This PR removes the click functionality of the observation points in
browser page charts.

<img width="800" alt="image"
src="https://github.com/user-attachments/assets/969488a9-5a8e-4b0e-90ff-3472f803e9b6"
/>
(fullsize image link:
https://github.com/user-attachments/assets/969488a9-5a8e-4b0e-90ff-3472f803e9b6
)

## Context
We are deprecating all SPARQL API endpoints as part of the Spanner Graph
migration project. This PR removes a usage of the SPAQRL API that cannot
be replaced with existing `v2` API calls. We use it to fetch the DCID of
the observation being clicked on, so we can redirect the user to its
observation browser page (e.g.
https://datacommons.org/browser/dc/o/h7vbenjee1ypc).

However, this click functionality itself is hard to activate (really
hard to hover over the point exactly), takes a while to render (we get a
spinner before redirecting the user) and it's not obvious to the user
that it's a feature. Thus, we are removing this functionality
altogether.

## Changes Made
This PR:
* Removes code implementing click functionality in browser page charts
* Removes the client test for the click functionality
* Removes /api/browser/observation-id which was used by the click
functionality, which removes the SPARQL API call dependency

Note that this PR does not:
* Change the hover behavior of browser page charts
* Remove the browser observation node pages

## Screenshot
<img width="5344" height="3054" alt="Screenshot 2026-02-27 at 7 35
16 PM"
src="https://github.com/user-attachments/assets/9e225207-b778-444c-8b53-488aaf115404"
/>

On hover, we still show the point value, but the cursor stays default
instead of turning into a pointer.

<img width="1044" height="896" alt="image"
src="https://github.com/user-attachments/assets/5608fc50-faa8-43aa-9157-04197d8b4cca"
/>

In table view, the table values also no longer link to the observation
pages (although the value is still shown).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.