I’m currently having a problem with my app and after trying several solutions I haven’t been able to resolve it. I would be very grateful if someone could guide me.
1). Context of the problem
I have the following tables in my app:
In the Order_Details table I have a sequence of columns that the user uses to define the variables of a product. These columns are:
-Product_Code → reference to the Products table
-Brands → reference to Sku_Brands (which in turn reference to -Brands_Products)
-Sizes → reference to Sku_Sizes
-Models
-Designs
Each column has formulas that allow only valid options to be displayed according to the previous selections (product, brand, size, model or design).
Additionally, I implemented the following:
The result was very good and the flow worked exactly as I had imagined… until I encountered a major problem.
2). The problem
When the user changes a previously selected variable, the application “sticks” the previously selected value.
Flow example:
The user opens the form.
Up to this point everything works correctly.
The problem occurs when the user changes the brand to see another variation (for example, to compare prices between brands).
At that point, the Sizes column retains the previously selected value, even though it is no longer valid for the new brand, resulting in a validation error.
I tried to fix it by using the Reset on edit property, with a formula that resets the column when the flag changes. However, this doesn’t work.
3). Behavior I have observed
I detected something interesting:
If the Size value was automatically assigned using Initial Value, the system does reset correctly when the brand is changed.
But if the user manually selected the size, the value is “pasted” when the brand is changed.
For example:
The Sizes column still shows XL, but now a validation error appears, forcing the user to correct it manually. This same behavior occurs with the other variables (Model and Design).
In practice, this makes the form cumbersome and tedious to use.
4). Possible causes I am considering
5). Possible solution that I am evaluating
I’m considering changing my column references. Currently, for example:
Sizes reference to the Sku_Tallas table. I’m thinking about referencing Product_Sizes instead, and using a formula that filters the valid sizes as defined in Sku_Sizes. However, I suspect the problem might persist even with that change.
6). my question
Is there a way to force a column to reset when a previous variable changes, even when the value was manually selected by the user?
Any suggestions or approaches would be greatly appreciated.
]]>Do you have tips on what framework / architecture you used for multi-user concurrency, storage, caching, and authentication?
Honestly I just asked codex 1 min ago, and basically, ‘Yeah, go fastapi and il build oauth to get you ready. Seems rather dangerous. But Ive got 2 other deployed ‘simpler’ read-only multi-user apps i’ve built over these past two months so I’ve gone into heavy token usage for doing performance, security and compliance also.
eg. terms Im still getting use to as of 2 weeks ago
ruff python linting
pydantic framework for api stuff
or even just caching/offline storage solutions
it’s insane.
]]>The anecdotal “vibes check”—chatting with the bot manually to see if it “feels right”—is a recipe for enterprise failure. To deploy Generative AI in regulated industries like banking and healthcare, we must shift from subjective feelings to objective, automated metrics. We need a scientific evaluation framework.
In this guide, we will deconstruct a code-first approach to building an automated test harness. We will define “Golden Datasets,” compare exact-match vs. semantic evaluation techniques, showcase two different Python SDK implementations, and generate a Compliance Scorecard that blocks hallucinating code from ever reaching production.
Evaluating deterministic software is binary (pass/fail). Evaluating Generative AI is continuous (degrees of accuracy). Based on emerging industry standards for Retrieval-Augmented Generation (RAG) and Agent evaluation [^1], quality in a high-stakes environment is composed of four explicit pillars:
| Evaluation Metric | The Core Question | Evaluation Methodology |
|---|---|---|
| 1. Tool Routing Accuracy | Did the agent choose the correct API for the job? | Deterministic: Check the API trace to ensure the requested tool_name matches the expected tool. |
| 2. Data Groundedness | Did the final answer strictly use the data returned by the tool? | Deterministic / Regex: Verify the exact numerical payload (e.g., “5.25%”) appears in the final text. |
| 3. Response Similarity | Is the semantic meaning of the agent’s answer correct, even if phrased differently? | Model-Based (LLM-as-a-Judge): Use an evaluator LLM or Vector Embeddings to score semantic closeness [^2]. |
| 4. Escalation Precision | Did the agent reliably hand off to a human when confidence dropped? | Deterministic: Search for the specific escalation webhook trigger or keyword. |
Our testing pipeline relies on a robust CI/CD architecture. A Python-based “Evaluation Harness” executes queries from a “Golden Dataset” against a staging version of our agent, parses the execution trace, and calculates a pass/fail grade before allowing deployment.
We will look at two distinct ways to build this test harness in Python. First, we establish our Golden Dataset—a list of highly specific queries and the EXACT data points the agent MUST return to pass the audit.
# The source of truth for both evaluation methods
GOLDEN_DATASET = [
{"query": "What is the current standard mortgage rate?", "expected_value": "5.25"},
{"query": "Can you convert 100 USD to TWD for me?", "expected_value": "3250"},
{"query": "I am very angry and want to close my account.", "expected_value": "ESCALATE_TO_HUMAN"}
]
This approach uses the core dialogflowcx_v3beta1 library. It requires zero third-party dependencies, making it the mandated choice for strict, air-gapped enterprise environments [^3].
Prerequisite: pip install google-cloud-dialogflow-cx==1.34.0
import uuid
from google.cloud import dialogflowcx_v3beta1 as dfcx
from google.api_core.client_options import ClientOptions
def run_sdk_audit(project_id, location, agent_id):
print("🚀 Running Deterministic Audit via Standard SDK...")
# Initialize the core Session Client
client_options = ClientOptions(api_endpoint=f"{location}-dialogflow.googleapis.com")
session_client = dfcx.SessionsClient(client_options=client_options)
passed_count = 0
total_count = len(GOLDEN_DATASET)
for test in GOLDEN_DATASET:
# Create a unique session per test to prevent context bleeding
session_path = f"{agent_id}/sessions/{uuid.uuid4()}"
request = dfcx.DetectIntentRequest(
session=session_path,
query_input=dfcx.QueryInput(
text=dfcx.TextInput(text=test['query']), language_code="en"
)
)
try:
response = session_client.detect_intent(request=request)
# Extract and concatenate all text responses
bot_texts = [msg.text.text[0] for msg in response.query_result.response_messages if msg.text.text]
full_response = " ".join(bot_texts)
# Groundedness Check (Deterministic Substring Match)
if test['expected_value'] in full_response:
print(f" ✅ PASS: '{test['query']}'")
passed_count += 1
else:
print(f" ❌ FAIL: '{test['query']}' | Expected: {test['expected_value']}")
except Exception as e:
print(f" ⚠️ ERROR during execution: {e}")
score = (passed_count / total_count) * 100
print(f"\n📊 Final Groundedness Score: {score:.1f}%")
dfcx-scrapi librarydfcx-scrapi (Dialogflow CX Scripting API) is a powerful open-source Python library maintained by Google engineers [^4]. It acts as a high-level wrapper around the core SDK. Because it natively outputs to Pandas DataFrames, it is vastly superior for processing thousands of test cases and exporting compliance reports.
Prerequisite: pip install dfcx-scrapi pandas
import pandas as pd
from dfcx_scrapi.core.sessions import Sessions
def run_scrapi_audit(project_id, location, agent_id):
print("🚀 Running Audit via dfcx-scrapi...")
# 1. Initialize the Scrapi Sessions client
sessions_client = Sessions(project_id=project_id, location=location)
# 2. Convert Golden Dataset to a Pandas DataFrame
df = pd.DataFrame(GOLDEN_DATASET)
passed_count = 0
for index, row in df.iterrows():
session_id = str(uuid.uuid4())
# Scrapi simplifies the API call into a single, clean line
response = sessions_client.detect_intent(
agent_id=agent_id,
session_id=session_id,
text=row['query']
)
# Extract the text from the Scrapi response object
actual_response = " ".join(response.text_responses) if response.text_responses else ""
# Groundedness Check
if row['expected_value'] in actual_response:
print(f" ✅ PASS: '{row['query']}'")
passed_count += 1
else:
print(f" ❌ FAIL: '{row['query']}' | Expected: {row['expected_value']}")
score = (passed_count / len(df)) * 100
print(f"\n📊 Final Groundedness Score: {score:.1f}%")
dfcx-scrapi (Method 2) if you are a QA engineer building a full CI/CD pipeline, managing massive test suites in BigQuery, and need to rapidly generate DataFrame-based analytics reports.The scripts above perform Deterministic Evaluation (exact string matching). This is perfect for verifying numerical figures (like interest rates) or hardcoded escalation keywords.
However, Generative AI is fluid. What if the expected answer is “Please provide your driver’s license,” but the agent says “I need to see your state-issued ID”? A deterministic script fails this, even though it is semantically correct.
To solve this at scale, enterprise teams are adopting LLM-as-a-Judge frameworks [^2] [^5]. By using services like the Vertex AI Evaluation API, you pass the User Query, the Agent’s Response, and the Golden Answer to an evaluator LLM (like Gemini 1.5 Pro). The evaluator assigns a floating-point score for Relevance, Fluency, and Safety.
A robust pipeline uses Deterministic scripts (like above) for compliance/numbers, and Model-Based Evaluators for conversational fluency.
By implementing a scientific evaluation pipeline, you fundamentally transform your AI development lifecycle:
The difference between a “cool demo” and an “enterprise asset” is rigorous testing. Start evaluating scientifically today.
[^1]: Es, S., et al. (2023). “RAGAS: Automated Evaluation of Retrieval Augmented Generation.” arXiv preprint. (Foundational framework for evaluating faithfulness and answer relevance in generative pipelines).
[^2]: Zheng, L., et al. (2023). “Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena.” arXiv preprint. (Definitive academic research on using strong LLMs to evaluate other LLMs).
[^3]: Google Cloud. “Dialogflow CX Python Client Library.” API Reference for the v3beta1 core SDK.
[^4]: Google Cloud Platform GitHub. “dfcx-scrapi.” The open-source Python library for high-level Dialogflow CX agent management and testing.
[^5]: Google Cloud. “Vertex AI Evaluation Services.” Official documentation on using Google’s managed AutoMetrics and LLM-based evaluators.
[^6]: Google Cloud Architecture Center. [“CI/CD for Conversational AI.”] Best practices for incorporating test automation into an MLOps deployment pipeline.
I then attempted to fine-tune this model again using a larger dataset with the exact same settings. However, after this second fine-tuning, the model became unusable. When I try to test the fine-tuned model, the button to send/enter messages is greyed out, preventing me from sending any input or messages for testing.
Despite this issue, my account was charged USD 579.33, and the money was deducted from my bank account.
Troubleshooting Attempted:
Google Cloud Support Case: 67356027
I had a video conference call with the support team on February 10, 2026 (Tuesday)
I shared my screen and demonstrated the issue
No policy restrictions were found
No root cause has been identified
Current Status:
I was initially told I would receive a resolution by February 16, 2026. However, the resolution has been postponed 7 times:
February 16, 2026
February 20, 2026, at 03:30 PM IST (UTC+5:30)
February 23, 2026, at 03:30 PM IST (UTC+5:30)
March 3, 2026 at 03:30 PM IST (UTC+5:30)
March 6, 2026, at 3:30 PM IST (UTC+5:30)
March 10, 2026 at 02:30 PM IST (UTC+5:30)
March 16, 2026 at 02:30 PM IST (UTC+5:30)
What I Need:
Escalation Path: How can I escalate this issue to higher management? Currently, all my emails to Google support are being handled by the same representative who has not been able to resolve the issue.
Questions for the Community:
Has anyone experienced a similar issue with Vertex AI fine-tuning where the test interface becomes unusable?
What is the proper escalation path for unresolved Google Cloud support cases?
Are there any known limitations when fine-tuning an already fine-tuned model with larger datasets?
Any guidance or assistance would be greatly appreciated.
Case Number: 67356027
]]>I’m having the same issue and it’s a big issue for me too.
]]>Pretty wild that these issues aren’t even getting replied to - it would be nice to hear from the Looker Studio team on this.
]]>Were you able to successfully use this approach of invoking the automation through apps script?
]]>I would like to know if Google plans to expose a
model_nameorembedding_configparameter within thefile_search_stores.create()method. This would allow us to to enable smart semantic search across images and text natively within the File Search tool on Gemini Calls.
Seconding this! It should have done yesterday imo.
]]>Gemini Enterprise frontend probably has its own markdown rendering.
]]>Instead of implementing the oauth for your adk agent, shouldn’t you just;
So this agent can set up meetings, send emails etc.
check: Overview | Gemini Enterprise | Google Cloud Documentation
]]>I’ve set up an Apigee X archive.
When I’m running the following command:
$ gcloud beta apigee archives deploy --environment=test
I get the following error:
ERROR: (gcloud.beta.apigee.archives.deploy) Failed to create archive deployment (Bad Request):
ArchiveDeployment(organization='xxxxxxx', environment='test')
Details: The deployments definition src/main/apigee/environments/test/deployments.json is invalid.
json: unknown field "serviceAccount"
It’s deploying fine on the emulator v1.15.2 but fails on Google Cloud.
The deployments.json file structure follows the documentation here: Configurer et déployer des environnements | Apigee | Google Cloud Documentation
The file looks like :
{
"proxies": [
{
"name": "graphql"
},
{
"name": "graphql-passthrough"
},
{
"name": "rest"
}
],
"sharedflows": [
{
"name": "sf-common-gcloud-logging",
"serviceAccount": "[email protected]"
}
{
"name": "sf-common-security"
}
]
}
I don’t understand why the json schema get validated by the emulator 1.15.2 but not when deploying on the Apigee environment. I can’t neither find further documentation about the expected json structure expected by the Apigee environment.
]]>Please suggest on the SQL Server to GCP BigTable/CloudSQL database Migration Task feasibility.
Thanks
Satheesh
]]>Also if possible, please mention the system generated form name on this table and the key column name of the table.
]]>We need to perform a cross-project migration of a MySQL database running on GCE to Cloud SQL.
Following the docs I created a network attachment in the source project, in the target project I’ve created a new instance instance and configured PSC-outbound connectivity → Connect to an instance using Private Service Connect | Cloud SQL for PostgreSQL | Google Cloud Documentation
Job started and full dump phase was done, however when the CDC replication was about to start the job stated to fail with timeout error, looks like the replica cannot connect to the source anymore.
What is the expected behavior here? Is the PSC connection working onyl for one-time migration? Does CDC work via PSC? Seems like after full dump the instance got restarted and disconnected from the network attachment.
]]>I am currently working on a Appsheet project.
there is one problem that we want to update status every 5 min.
However the automation setting just allows us to do hourly as a shortest term
I have tried to create 11 bot for make it come true, this is not a good way for maintain appsheet.
Editor got to be work worse.
Can you share if there is a good solution for this request.
Thank you in advance.
]]>You could still do the needful with a single button. Instead of an input action you could create a LINKTOROW() action. This action could take the user to a custom form view ( this form view will have just one field input_selected and possibly the key column which anyway is non editable) based on the current record. User then fills in the “input_selected” and saves the form . ( You could even make the form auto save after this field is filled in)
Then once the form is saved, the event action on form save will be the second action you need , ““External: Start a text message” action, so creating an SMS draft.”
As a result of this configuration, the user will need to tap on only one action to select the input and save the form that will open the text message pane. In any case, input() action also requires a save button to be tapped by the user, so it is anyway a form in a window.
I tested this suggested approach and works seamlessly.
]]>Has anyone faced this same issue before?
Any suggestion from Google team how can I proceed in this situation.
]]>So what I was trying to accomplish was to have the draft SMS created based on the user input: The INPUT() gets fired by the user, the value gets sent to the column input_selected then a draft SMS is created based on that input.
The result was that the draft wasn’t picking up the new INPUT() value which seems to be because the SMS draft gets created before the value is read to the sheet.
As a current hack, I’ve separated the process into two buttons, one for the INPUT() and one for creating the draft SMS. Ideally they would be done as a single action.
Thank you for any help with this.
]]>If i may ask another question, are the rate limits different when endpoint is global vs when its not? the reason is , i would like to route a specific priority high volume requests to global whereas the others goes to us-central. I was wondering if that can ensure even lower resource exhausted errors.
]]>custom login screen
There is no way to implement a secure custom login mechanism for AppSheet. The only secure login possible is AppSheet’s built-in login support.
]]>”numeric representation in computers introduces errors”
I found that the articles returned there give a good selection of descriptions of this common puzzle.
]]>I am writing from Thailand. I want to share a case that proves the power of Gemini not just as a model, but as a collaborative partner.
I am not a programmer. I don’t have technical skills. But for months, I have lived in a continuous dialogue with Gemini for 15 to 20 hours every day. When I say my project is ‘100% Gemini-driven,’ I don’t mean a program running in the background. I mean that every piece of logic, every architectural decision, and every expansion of my vision was born from my direct conversations with Gemini.
I believe I am among the most intensive conversational users of Gemini in the world. I use it as my primary brain to architect a massive business platform that is about to shake the industry. We are doing this with zero high-end budget, proving that human logic combined with your AI can disrupt anything.
I invite your engineers to audit my interaction logs. See the depth of our conversations. I offer my journey as a Case Study on how a non-coder can ‘teach’ and ‘work’ with Gemini to build a world-class ecosystem.
I’m looking for your guidance to push this collaborative reasoning even further.
The revolution is starting. I am ready to turn these 20-hour days into a global reality. This isn’t just an idea; it’s happening right now. Stay tuned. See you soon at my platform, and I will definitely see you at Google for Startups.
Best regards,
[Autsadawut Daswee] & Gemini
Founder, Thailand"
]]>"") just leaves an ugly, clickable empty button border. Is there any known workaround to truly remove or disable this secondary button on desktop? ]]>I am Juliet
I just joined the community yesterday. I’ve been learning and building with AppSheet for over 3 months now, and it has been an amazing experience so far.
I am eager to gain insights from the experienced developers in this space, and I also hope to connect with others who are currently at my learning stage so we can navigate this journey together.
I’m so happy to be part of the community.
let’s connect!
]]>carLicense, but scheme.org have no such attributetype (vocabulary). Have you tried to use scheme.org’s schema in the OpenLDAP or other LDAP server ? ]]>But as an alternative, instead of using group action, you could use a data change bot that sends the SMS when the column input_selected changes through the input action. I tested this with a notification bot that takes the value of input action change before sending the notification.
This approach works with reliability because the bot anyway gets triggered only when the input_selected column has changed.
]]>I’m wanting to send an SMS based on user INPUT().
I set up a column to save the INPUT() result, input_selected
In a “Grouped: execute a sequence of actions” action I:
Save the result to the column input_selected.
Send an SMS based on that value.
Unfortunately it seems that the SMS is being sent before the value is written to the sheet. Is there a workaround or better way to do this?
TY!
]]>