Getting incorrect response from openai/gpt-oss-120B model

Hello,
We are using chat/completions endpoint with openai/gpt-oss-120B model. In that we are getting incorrect data compared to what we’ve asked. We’ve added correct data in inputs still its failed to identify it and giving incorrect data.

Below is the example of our request. Please check.
{
“model”:“openai/gpt-oss-120b”,
“temperature”: 0.7,
“top_p”: 0.5,
“messages”: [
{
“role”: “system”,
“content”: “system message“
},
{
“role”: “user”,
“content”: json string
}
],
“response_format”: {
“type”: “json_schema”,
“json_schema”: {}
}
}

So, could you please let me know what EXACTLY is pushed to AI for any model during ai request

Could you please share a full (redacted is fine) example of the entire input request and the output, and what you were expecting?

Are you doing data / semantic extraction, and the model is hallucinating?
Are all models behaving this way?

We run the models exactly as benchmarked; we don’t inject system prompts for your requests; but if you’re using json_schema, make sure that it DOES align with what kind of outputs you’re expecting, or the model might hallucinate more. In your system and user prompts, make sure you guide the model properly as well, or it might start hallucinating.

E.g.

Please extract the data from this passage according to my json_schema:
<passage>(content)</passage>

Using faux xml tags like this really helps steer the models. But with a real-life example I can help you better!

These models expect temperature to be set to 1.0 otherwise the responses get worse! I fixed this and it is better. ONLY major issue for me is pydantic & Groq don’t like each other when it comes to structured output!

In result we’re getting inconsistency in main indicator and it’s values. For each analysis in main_indicator_day_minus_1, main_indicator_day_minus_2, main_indicator_day_minus_3 rather than giving single main indicator. It’s giving two different indicator. And also sometimes values are also incorrect.Also, in underperforming_ads sometimes it’s giving list of ads and sometimes not. And sometimes it’s giving incorrect ads which is not of that specific campaign.

Please check and let us know if there’s any chances of improvement.

I’d have to know the use case and full API call! I’m not even sure what your use cases it!

This is the complete input request I’ve added. please check.
Our main usecase to fetch analysis of meta ads ad account. so for that we’re passing our manual created alerts and ad account data in request. So In output we want structured output as per the json schema provided in request.

API URL : https://api.groq.com/openai/v1/chat/completions

Request:

{

"model": "openai/gpt-oss-120b",

“messages”: [

    {

“role”: “system”,

“content”: “Act as a Meta Ads Media Buyer expert. Review the last 7 days of data and the performance alerts of a Meta Ads account.Your output must strictly follow the required schema and be brief and concise. Data Available - account_level, campaign_level, adset_level, ad_level. Each record includes a timeframe field in YYYY-MM-DD format or text like ‘last_7d’. Alerts are provided in alerts and Previous analyses may be provided in previous_analyses, Additional instructions may be provided in instructions. Main Indicator - Deduce the main performance indicator (ROAS, cost_per_purchase, CPL, etc.) based on account type and available non-null data. Always specify which indicator you used. If you used a secondary indicator because main one was null, it must be said in Optimization advice. Date Handling - ‘Day - 1’ the latest date available in the dataset. ‘Day - 2’ = the date immediately before ‘Day - 1’. ‘Day - 3’ = the date immediately before ‘Day - 2’. ‘Last 7d’ = the record where timefarme = ‘last_7d’. Always display the exact date alongside ‘day - 1’, ‘day - 2’, ‘day - 3’. Tasks - 1. Account-Level Analysis in which Provide: - Daily spend yesterday (show exact date) - Spend last 7d - Main indicator on day - 1 (with exact date) - Main indicator on day - 2 (with exact date) - Main indicator on day - 3 (with exact date) - Main indicator on last 7d. 2. Campaign-Level Analysis in that For each campaign: 1. Provide: - Campaign name - Daily spend yesterday (show exact date) - Spend last 7d - Main indicator on day - 1 (with exact date) - Main indicator on day - 2 (with exact date) - Main indicator on day - 3 (with exact date) - Main indicator on last 7d. 2. List ads of the campaign, grouped by ad set. In that - Identify underperforming ads (higher spend but worse performance than peers in the same ad set). - For each: show ad name, ad set name, spend, main indicator value. 3. Provide one optimization advice for the campaign (max 200 characters). If you used a secondary indicator because main one was null, it must be said in Optimization advice. Output Rules - Follow the exact schema given. - Do not invent dates: always take them from timeframe field in input. - If data is missing for a day, return null instead of guessing. Date Handling Rules - The dataset includes a ‘timeframe’ field in YYYY-MM-DD format (e.g., ‘2025-08-28’) or text like ‘last_7d’. - Define ‘yesterday’ strictly as the latest available daily date in the dataset. - Define ‘day - 1’ = yesterday (latest date). - Define ‘day - 2’ = the date immediately before day - 1 in the dataset. - Define ‘day - 3’ = the date immediately before day - 2 in the dataset. - ‘last_7d’ must always be taken from the record with ‘date’ = ‘last_7d’. - Always display the metric together with the exact date in parentheses. Examples - If the dataset has campaign rows with: - ‘2025-08-30’ - ‘2025-08-29’ - ‘2025-08-28’ - ‘last_7d’ Then: - day - 1 = 2025-08-3 - day - 2 = 2025-08-29 - day - 3 = 2025-08-28 - last 7d = last_7d record. Example Output format: - Daily spend yesterday: 26.32 (2025-08-30) - Main indicator day - 1: ROAS: 0.95 (2025-08-30) - Main indicator day - 2: ROAS: 1.20 (2025-08-29) - Main indicator day - 3: ROAS: 0.88 (2025-08-28) - Main indicator last 7d: ROAS: 1.05 (last_7d)”

    },

    {

“role”: “user”,

“content”: “[{\“timeframe\”:\“last_7d\”,\“currency\”:\“EUR\”,\“account\”:{\“account_name\”:\“account name\”,\“metrics\”:{\“spend\”:487.34,\“ctr_link\”:1.467,\“cpc\”:0.453,\“cost_per_atc\”:3.165,\“cost_per_purchase\”:37.488,\“roas\”:1.679,\“cost_per_lead\”:0},\“campaigns\”:[{\“campaign_name\”:\“campaign 1\”,\“timeframe\”:\“last_7d\”,\“metrics\”:{\“spend\”:73.68,\“ctr_link\”:1.353,\“cpc\”:0.333,\“cost_per_atc\”:10.526,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:[{\“adset_name\”:\“adset 1\”,\“metrics\”:{\“spend\”:73.68,\“ctr_link\”:1.353,\“cpc\”:0.333,\“cost_per_atc\”:10.526,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“ads\”:[{\“ad_name\”:\“adname 1\”,\“metrics\”:{\“spend\”:39.7,\“ctr_link\”:1.594,\“cpc\”:0.361,\“cost_per_atc\”:7.94,\“cost_per_purchase\”:null,\“roas\”:0,\“cost_per_lead\”:0}},{\“ad_name\”:\“adname 2\”,\“metrics\”:{\“spend\”:33.98,\“ctr_link\”:1.177,\“cpc\”:0.306,\“cost_per_atc\”:16.99,\“cost_per_purchase\”:null,\“roas\”:0,\“cost_per_lead\”:0}}]}]},{\“campaign_name\”:\“dcampaign 2\”,\“timeframe\”:\“last_7d\”,\“metrics\”:{\“spend\”:198.23,\“ctr_link\”:1.3,\“cpc\”:0.459,\“cost_per_atc\”:5.358,\“cost_per_purchase\”:28.319,\“roas\”:2.036,\“cost_per_lead\”:0},\“adsets\”:[{\“adset_name\”:\“adset 2\”,\“metrics\”:{\“spend\”:6.95,\“ctr_link\”:1.078,\“cpc\”:0.579,\“cost_per_atc\”:0,\“cost_per_purchase\”:0,\“roas\”:0,\“cost_per_lead\”:0},\“ads\”:},{\“adset_name\”:\“adset 3\”,\“metrics\”:{\“spend\”:38.42,\“ctr_link\”:0.499,\“cpc\”:0.937,\“cost_per_atc\”:9.605,\“cost_per_purchase\”:19.21,\“roas\”:4.373,\“cost_per_lead\”:0},\“ads\”:[{\“ad_name\”:\“adname 3\”,\“metrics\”:{\“spend\”:38.42,\“ctr_link\”:0.499,\“cpc\”:0.937,\“cost_per_atc\”:9.605,\“cost_per_purchase\”:19.21,\“roas\”:4.37,\“cost_per_lead\”:0}},{\“ad_name\”:\“adname 4\”,\“metrics\”:{\“spend\”:38.29,\“ctr_link\”:0.497,\“cpc\”:1.235,\“cost_per_atc\”:9.573,\“cost_per_purchase\”:19.145,\“roas\”:1.54,\“cost_per_lead\”:0}}]},{\“adset_name\”:\“adset 4\”,\“metrics\”:{\“spend\”:62.7,\“ctr_link\”:1.634,\“cpc\”:0.418,\“cost_per_atc\”:2.986,\“cost_per_purchase\”:20.9,\“roas\”:2.815,\“cost_per_lead\”:0},\“ads\”:[{\“ad_name\”:\“adname 5\”,\“metrics\”:{\“spend\”:2.34,\“ctr_link\”:1.422,\“cpc\”:0.39,\“cost_per_atc\”:0.78,\“cost_per_purchase\”:null,\“roas\”:0,\“cost_per_lead\”:0}},{\“ad_name\”:\“adname 6\”,\“metrics\”:{\“spend\”:7.12,\“ctr_link\”:1.263,\“cpc\”:0.647,\“cost_per_atc\”:null,\“cost_per_purchase\”:null,\“roas\”:0,\“cost_per_lead\”:0}},{\“ad_name\”:\“adname 7\”,\“metrics\”:{\“spend\”:46.13,\“ctr_link\”:1.72,\“cpc\”:0.394,\“cost_per_atc\”:2.883,\“cost_per_purchase\”:15.377,\“roas\”:3.83,\“cost_per_lead\”:0}},{\“ad_name\”:\“adname 8\”,\“metrics\”:{\“spend\”:7.11,\“ctr_link\”:1.476,\“cpc\”:0.444,\“cost_per_atc\”:3.555,\“cost_per_purchase\”:null,\“roas\”:0,\“cost_per_lead\”:0}},{\“ad_name\”:\“adname 9\”,\“metrics\”:{\“spend\”:46.63,\“ctr_link\”:2.468,\“cpc\”:0.248,\“cost_per_atc\”:5.829,\“cost_per_purchase\”:null,\“roas\”:0,\“cost_per_lead\”:0}}]}]},{\“campaign_name\”:\“campaign 3\”,\“timeframe\”:\“last_7d\”,\“metrics\”:{\“spend\”:61.88,\“ctr_link\”:1.656,\“cpc\”:0.563,\“cost_per_atc\”:1.587,\“cost_per_purchase\”:61.88,\“roas\”:0.913,\“cost_per_lead\”:0},\“adsets\”:[{\“adset_name\”:\“adset 5\”,\“metrics\”:{\“spend\”:28.35,\“ctr_link\”:2.079,\“cpc\”:0.515,\“cost_per_atc\”:2.025,\“cost_per_purchase\”:28.35,\“roas\”:1.993,\“cost_per_lead\”:0},\“ads\”:[{\“ad_name\”:\“adname 10\”,\“metrics\”:{\“spend\”:13.19,\“ctr_link\”:2.646,\“cpc\”:0.4,\“cost_per_atc\”:1.199,\“cost_per_purchase\”:13.19,\“roas\”:4.28,\“cost_per_lead\”:0}},{\“ad_name\”:\“adname 6\”,\“metrics\”:{\“spend\”:0.75,\“ctr_link\”:null,\“cpc\”:0,\“cost_per_atc\”:null,\“cost_per_purchase\”:null,\“roas\”:0,\“cost_per_lead\”:0}},{\“ad_name\”:\“adname 7\”,\“metrics\”:{\“spend\”:14.39,\“ctr_link\”:1.657,\“cpc\”:0.654,\“cost_per_atc\”:4.797,\“cost_per_purchase\”:null,\“roas\”:0,\“cost_per_lead\”:0}}]},{\“adset_name\”:\“adset 6\”,\“metrics\”:{\“spend\”:31.32,\“ctr_link\”:1.254,\“cpc\”:0.653,\“cost_per_atc\”:null,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“ads\”:[{\“ad_name\”:\“adname 6\”,\“metrics\”:{\“spend\”:0.11,\“ctr_link\”:3.448,\“cpc\”:0.11,\“cost_per_atc\”:null,\“cost_per_purchase\”:null,\“roas\”:0,\“cost_per_lead\”:0}},{\“ad_name\”:\“adname 8\”,\“metrics\”:{\“spend\”:31.21,\“ctr_link\”:1.237,\“cpc\”:0.664,\“cost_per_atc\”:null,\“cost_per_purchase\”:null,\“roas\”:0,\“cost_per_lead\”:0}}]},{\“adset_name\”:\“adset 7\”,\“metrics\”:{\“spend\”:2.21,\“ctr_link\”:4.118,\“cpc\”:0.316,\“cost_per_atc\”:0.088,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“ads\”:}]},{\“campaign_name\”:\“campaign 4\”,\“timeframe\”:\“last_7d\”,\“metrics\”:{\“spend\”:46.52,\“ctr_link\”:1.581,\“cpc\”:0.629,\“cost_per_atc\”:2.908,\“cost_per_purchase\”:23.26,\“roas\”:1.298,\“cost_per_lead\”:0},\“adsets\”:[{\“adset_name\”:\“adset 8\”,\“metrics\”:{\“spend\”:36.06,\“ctr_link\”:1.719,\“cpc\”:0.622,\“cost_per_atc\”:2.576,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“ads\”:[{\“ad_name\”:\“adname 9\”\”,\“metrics\”:{\“spend\”:4.77,\“ctr_link\”:1.623,\“cpc\”:0.596,\“cost_per_atc\”:null,\“cost_per_purchase\”:null,\“roas\”:0,\“cost_per_lead\”:0}},{\“ad_name\”:\“adname 10\” - Copie\“,\“metrics\”:{\“spend\”:31.29,\“ctr_link\”:1.735,\“cpc\”:0.626,\“cost_per_atc\”:2.235,\“cost_per_purchase\”:null,\“roas\”:0,\“cost_per_lead\”:0}}]},{\“adset_name\”:\“adset 9\”,\“metrics\”:{\“spend\”:10.46,\“ctr_link\”:1.225,\“cpc\”:0.654,\“cost_per_atc\”:5.23,\“cost_per_purchase\”:5.23,\“roas\”:5.774,\“cost_per_lead\”:0},\“ads\”:[{\“ad_name\”:\“adname 11\”,\“metrics\”:{\“spend\”:10.46,\“ctr_link\”:1.225,\“cpc\”:0.654,\“cost_per_atc\”:5.23,\“cost_per_purchase\”:5.23,\“roas\”:5.77,\“cost_per_lead\”:0}}]}]},{\“campaign_name\”:\“campaign 5\”,\“timeframe\”:\“last_7d\”,\“metrics\”:{\“spend\”:107.03,\“ctr_link\”:1.923,\“cpc\”:0.45,\“cost_per_atc\”:1.946,\“cost_per_purchase\”:35.677,\“roas\”:2.781,\“cost_per_lead\”:0},\“adsets\”:[{\“adset_name\”:\“campaign 5\”,\“metrics\”:{\“spend\”:107.03,\“ctr_link\”:1.923,\“cpc\”:0.45,\“cost_per_atc\”:1.946,\“cost_per_purchase\”:35.677,\“roas\”:2.781,\“cost_per_lead\”:0},\“ads\”:[{\“ad_name\”:\“adname 11\”,\“metrics\”:{\“spend\”:26.4,\“ctr_link\”:1.311,\“cpc\”:0.455,\“cost_per_atc\”:2.4,\“cost_per_purchase\”:26.4,\“roas\”:3.85,\“cost_per_lead\”:0}},{\“ad_name\”:\“adname 12\”,\“metrics\”:{\“spend\”:76.26,\“ctr_link\”:2.255,\“cpc\”:0.449,\“cost_per_atc\”:1.86,\“cost_per_purchase\”:38.13,\“roas\”:2.57,\“cost_per_lead\”:0}}]}]}]}},{\“timeframe\”:\“2025-11-06\”,\“currency\”:\“EUR\”,\“account\”:{\“account_name\”:\“account name\”,\“metrics\”:{\“spend\”:66.04,\“ctr_link\”:1.266,\“cpc\”:0.434,\“cost_per_atc\”:3.669,\“cost_per_purchase\”:66.04,\“roas\”:1.196,\“cost_per_lead\”:0},\“campaigns\”:[{\“campaign_name\”:\“campaign 3\”,\“timeframe\”:\“2025-11-06\”,\“metrics\”:{\“spend\”:9.38,\“ctr_link\”:1.841,\“cpc\”:0.586,\“cost_per_atc\”:3.127,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“dcampaign 2\”,\“timeframe\”:\“2025-11-06\”,\“metrics\”:{\“spend\”:27.01,\“ctr_link\”:1.557,\“cpc\”:0.409,\“cost_per_atc\”:5.402,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 4\”,\“timeframe\”:\“2025-11-06\”,\“metrics\”:{\“spend\”:5.85,\“ctr_link\”:1.681,\“cpc\”:0.585,\“cost_per_atc\”:1.95,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 5\”,\“timeframe\”:\“2025-11-06\”,\“metrics\”:{\“spend\”:14.05,\“ctr_link\”:2.059,\“cpc\”:0.37,\“cost_per_atc\”:2.007,\“cost_per_purchase\”:14.05,\“roas\”:5.623,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 1\”,\“timeframe\”:\“2025-11-06\”,\“metrics\”:{\“spend\”:9.75,\“ctr_link\”:0.493,\“cpc\”:0.443,\“cost_per_atc\”:null,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:}]}},{\“timeframe\”:\“2025-11-05\”,\“currency\”:\“EUR\”,\“account\”:{\“account_name\”:\“account name\”,\“metrics\”:{\“spend\”:67.02,\“ctr_link\”:1.576,\“cpc\”:0.441,\“cost_per_atc\”:2.311,\“cost_per_purchase\”:16.755,\“roas\”:4.379,\“cost_per_lead\”:0},\“campaigns\”:[{\“campaign_name\”:\“dcampaign 2\”,\“timeframe\”:\“2025-11-05\”,\“metrics\”:{\“spend\”:26.9,\“ctr_link\”:1.366,\“cpc\”:0.489,\“cost_per_atc\”:2.989,\“cost_per_purchase\”:8.967,\“roas\”:6.561,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 3\”,\“timeframe\”:\“2025-11-05\”,\“metrics\”:{\“spend\”:8.86,\“ctr_link\”:1.379,\“cpc\”:0.633,\“cost_per_atc\”:null,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 1\”,\“timeframe\”:\“2025-11-05\”,\“metrics\”:{\“spend\”:9.88,\“ctr_link\”:2.192,\“cpc\”:0.198,\“cost_per_atc\”:9.88,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 4\”,\“timeframe\”:\“2025-11-05\”,\“metrics\”:{\“spend\”:6.88,\“ctr_link\”:1.389,\“cpc\”:0.764,\“cost_per_atc\”:3.44,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 5\”,\“timeframe\”:\“2025-11-05\”,\“metrics\”:{\“spend\”:14.42,\“ctr_link\”:1.386,\“cpc\”:0.627,\“cost_per_atc\”:0.848,\“cost_per_purchase\”:14.42,\“roas\”:8.114,\“cost_per_lead\”:0},\“adsets\”:}]}},{\“timeframe\”:\“2025-11-04\”,\“currency\”:\“EUR\”,\“account\”:{\“account_name\”:\“account name\”,\“metrics\”:{\“spend\”:69.32,\“ctr_link\”:1.25,\“cpc\”:0.525,\“cost_per_atc\”:3.648,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“campaigns\”:[{\“campaign_name\”:\“dcampaign 2\”,\“timeframe\”:\“2025-11-04\”,\“metrics\”:{\“spend\”:28.12,\“ctr_link\”:0.957,\“cpc\”:0.586,\“cost_per_atc\”:9.373,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 3\”,\“timeframe\”:\“2025-11-04\”,\“metrics\”:{\“spend\”:9.62,\“ctr_link\”:1.218,\“cpc\”:0.74,\“cost_per_atc\”:null,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 1\”,\“timeframe\”:\“2025-11-04\”,\“metrics\”:{\“spend\”:9.67,\“ctr_link\”:1.707,\“cpc\”:0.254,\“cost_per_atc\”:1.934,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 4\”,\“timeframe\”:\“2025-11-04\”,\“metrics\”:{\“spend\”:6.69,\“ctr_link\”:0.867,\“cpc\”:1.115,\“cost_per_atc\”:1.115,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 5\”,\“timeframe\”:\“2025-11-04\”,\“metrics\”:{\“spend\”:15.13,\“ctr_link\”:1.687,\“cpc\”:0.582,\“cost_per_atc\”:3.026,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:}]}},{\“timeframe\”:\“2025-11-03\”,\“currency\”:\“EUR\”,\“account\”:{\“account_name\”:\“account name\”,\“metrics\”:{\“spend\”:66.38,\“ctr_link\”:1.471,\“cpc\”:0.412,\“cost_per_atc\”:3.494,\“cost_per_purchase\”:33.19,\“roas\”:0.91,\“cost_per_lead\”:0},\“campaigns\”:[{\“campaign_name\”:\“dcampaign 2\”,\“timeframe\”:\“2025-11-03\”,\“metrics\”:{\“spend\”:27.46,\“ctr_link\”:1.142,\“cpc\”:0.465,\“cost_per_atc\”:5.492,\“cost_per_purchase\”:0,\“roas\”:0,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 1\”,\“timeframe\”:\“2025-11-03\”,\“metrics\”:{\“spend\”:10.38,\“ctr_link\”:2.18,\“cpc\”:0.204,\“cost_per_atc\”:null,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 4\”,\“timeframe\”:\“2025-11-03\”,\“metrics\”:{\“spend\”:6.46,\“ctr_link\”:1.742,\“cpc\”:0.646,\“cost_per_atc\”:6.46,\“cost_per_purchase\”:3.23,\“roas\”:9.35,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 3\”,\“timeframe\”:\“2025-11-03\”,\“metrics\”:{\“spend\”:8.27,\“ctr_link\”:1.044,\“cpc\”:0.689,\“cost_per_atc\”:4.135,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 5\”,\“timeframe\”:\“2025-11-03\”,\“metrics\”:{\“spend\”:13.76,\“ctr_link\”:1.709,\“cpc\”:0.474,\“cost_per_atc\”:1.251,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:}]}},{\“timeframe\”:\“2025-11-02\”,\“currency\”:\“EUR\”,\“account\”:{\“account_name\”:\“account name\”,\“metrics\”:{\“spend\”:80.48,\“ctr_link\”:1.811,\“cpc\”:0.398,\“cost_per_atc\”:5.365,\“cost_per_purchase\”:26.827,\“roas\”:3.351,\“cost_per_lead\”:0},\“campaigns\”:[{\“campaign_name\”:\“dcampaign 2\”,\“timeframe\”:\“2025-11-02\”,\“metrics\”:{\“spend\”:31.56,\“ctr_link\”:1.625,\“cpc\”:0.371,\“cost_per_atc\”:7.89,\“cost_per_purchase\”:15.78,\“roas\”:5.323,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 3\”,\“timeframe\”:\“2025-11-02\”,\“metrics\”:{\“spend\”:10.63,\“ctr_link\”:2.172,\“cpc\”:0.462,\“cost_per_atc\”:2.658,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 4\”,\“timeframe\”:\“2025-11-02\”,\“metrics\”:{\“spend\”:7.88,\“ctr_link\”:1.938,\“cpc\”:0.525,\“cost_per_atc\”:null,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 5\”,\“timeframe\”:\“2025-11-02\”,\“metrics\”:{\“spend\”:19.04,\“ctr_link\”:2.346,\“cpc\”:0.381,\“cost_per_atc\”:2.72,\“cost_per_purchase\”:19.04,\“roas\”:5.341,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 1\”,\“timeframe\”:\“2025-11-02\”,\“metrics\”:{\“spend\”:11.2,\“ctr_link\”:1.493,\“cpc\”:0.386,\“cost_per_atc\”:null,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:}]}},{\“timeframe\”:\“2025-11-01\”,\“currency\”:\“EUR\”,\“account\”:{\“account_name\”:\“account name\”,\“metrics\”:{\“spend\”:66.32,\“ctr_link\”:1.734,\“cpc\”:0.425,\“cost_per_atc\”:1.618,\“cost_per_purchase\”:22.107,\“roas\”:1.742,\“cost_per_lead\”:0},\“campaigns\”:[{\“campaign_name\”:\“dcampaign 2\”,\“timeframe\”:\“2025-11-01\”,\“metrics\”:{\“spend\”:27.35,\“ctr_link\”:1.733,\“cpc\”:0.355,\“cost_per_atc\”:4.558,\“cost_per_purchase\”:13.675,\“roas\”:2.157,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 3\”,\“timeframe\”:\“2025-11-01\”,\“metrics\”:{\“spend\”:8.86,\“ctr_link\”:2.052,\“cpc\”:0.492,\“cost_per_atc\”:0.306,\“cost_per_purchase\”:8.86,\“roas\”:6.377,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 4\”,\“timeframe\”:\“2025-11-01\”,\“metrics\”:{\“spend\”:6.09,\“ctr_link\”:1.821,\“cpc\”:0.468,\“cost_per_atc\”:2.03,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 5\”,\“timeframe\”:\“2025-11-01\”,\“metrics\”:{\“spend\”:13.55,\“ctr_link\”:2.507,\“cpc\”:0.387,\“cost_per_atc\”:4.517,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 1\”,\“timeframe\”:\“2025-11-01\”,\“metrics\”:{\“spend\”:10.45,\“ctr_link\”:0.834,\“cpc\”:0.804,\“cost_per_atc\”:null,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:}]}},{\“timeframe\”:\“2025-10-31\”,\“currency\”:\“EUR\”,\“account\”:{\“account_name\”:\“account name\”,\“metrics\”:{\“spend\”:71.78,\“ctr_link\”:1.207,\“cpc\”:0.598,\“cost_per_atc\”:5.522,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“campaigns\”:[{\“campaign_name\”:\“dcampaign 2\”,\“timeframe\”:\“2025-10-31\”,\“metrics\”:{\“spend\”:29.68,\“ctr_link\”:0.809,\“cpc\”:0.724,\“cost_per_atc\”:5.936,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 3\”,\“timeframe\”:\“2025-10-31\”,\“metrics\”:{\“spend\”:6.23,\“ctr_link\”:2.337,\“cpc\”:0.445,\“cost_per_atc\”:6.23,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 4\”,\“timeframe\”:\“2025-10-31\”,\“metrics\”:{\“spend\”:6.62,\“ctr_link\”:1.63,\“cpc\”:0.602,\“cost_per_atc\”:6.62,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 5\”,\“timeframe\”:\“2025-10-31\”,\“metrics\”:{\“spend\”:16.93,\“ctr_link\”:1.725,\“cpc\”:0.47,\“cost_per_atc\”:3.386,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:},{\“campaign_name\”:\“campaign 1\”,\“timeframe\”:\“2025-10-31\”,\“metrics\”:{\“spend\”:12.29,\“ctr_link\”:1.2,\“cpc\”:0.683,\“cost_per_atc\”:12.29,\“cost_per_purchase\”:null,\“roas\”:null,\“cost_per_lead\”:0},\“adsets\”:}]}}],\“previous_prompts\”:{\“prompt_response_1\”:,\“prompt_response_2\”:,\“prompt_response_3\”:},\“alerts\”:{\“ad_level\”:{\“23857632602330030\”:{\“campaign_name\”:\“Camapaign name\”,\“adset_name\”:\“adset name\”,\“ad_name\”:\“ad name\”,\“spend\”:4.7699,\“CTR link_last_30d\”:2.722,\“CTR link_last_7d\”:1.622,\“CTR link_drop\”:\“40.4%\”,\“cpc_last_30d\”:0.422,\“cpc_last_7d\”:0.595,\“cpc_increase\”:\“40.9%\”},\“120232603530010031\”:{\“campaign_name\”:\“Campaign name\”,\“adset_name\”:\“adset name\”,\“ad_name\”:\“ad name\”,\“spend\”:39.700,\“cost_per_atc_last_30d\”:2.843,\“cost_per_atc_last_7d\”:7.940,\“cost_per_atc_increase\”:\“179.18%\”},\“120232608282510031\”:{\“campaign_name\”:\“Campaign name\”,\“adset_name\”:\“adset name\”,\“ad_name\”:\“ad name\”,\“spend\”:10.460,\“cost_per_atc_last_30d\”:3.463,\“cost_per_atc_last_7d\”:5.230,\“cost_per_atc_increase\”:\“51.03%\”}},\“adset_level\”:{\“23857632602350030\”:{\“campaign_name\”:\“Campaign name\”,\“adset_name\”:\“adset name\”,\“spend\”:36.060,\“CTR link_last_30d\”:2.323,\“CTR link_last_7d\”:1.719,\“CTR link_drop\”:\“26.03%\”},\“120204063966600031\”:{\“campaign_name\”:\“Campaign name\”,\“adset_name\”:\“adset name\”,\“spend\”:73.680,\“cost_per_atc_last_30d\”:3.629,\“cost_per_atc_last_7d\”:10.525,\“cost_per_atc_increase\”:\“189.97%\”},\“120232608282520031\”:{\“campaign_name\”:\“Campaign name\”,\“adset_name\”:\“adset name\”,\“spend\”:10.460,\“cost_per_atc_last_30d\”:3.463,\“cost_per_atc_last_7d\”:5.230,\“cost_per_atc_increase\”:\“51.03%\”},\“23854321056670030\”:{\“campaign_name\”:\“Campaign name\”,\“adset_name\”:\“adset name\”,\“spend\”:28.350,\“cost_per_purchase_last_30d\”:19.609,\“cost_per_purchase_last_7d\”:28.350,\“cost_per_purchase_increase\”:\“44.58%\”}},\“account_level\”:{\“act_316181945638277\”:{\“ad_account_name\”:\“Atelier des dames\”,\“spend\”:487.339,\“spend_last_30d\”:2227.630,\“cost_per_purchase_last_7d\”:37.487,\“cost_per_purchase_last_30d\”:42.030}},\“campaign_level\”:{\“120204063966620031\”:{\“campaign_name\”:\“Campaign name\”,\“spend\”:73.680,\“cost_per_atc_last_30d\”:3.629,\“cost_per_atc_last_7d\”:10.525,\“cost_per_atc_increase\”:\“189.97%\”},\“23853944366060030\”:{\“campaign_name\”:\“Campaign name\”,\“spend\”:61.880,\“cost_per_purchase_last_30d\”:29.942,\“cost_per_purchase_last_7d\”:61.880,\“cost_per_purchase_increase\”:\“106.67%\”,\“roas_last_30d\”:1.183,\“roas_last_7d\”:0.913,\“roas_drop\”:\“22.89%\”},\“23853957164060030\”:{\“campaign_name\”:\“Campaign name\”,\“spend\”:46.520,\“cost_per_purchase_last_30d\”:16.176,\“cost_per_purchase_last_7d\”:23.260,\“cost_per_purchase_increase\”:\“43.78%\”,\“roas_last_30d\”:2.229,\“roas_last_7d\”:1.298,\“roas_drop\”:\“41.77%\”}}}”

    }

\],

“response_format”: {

“type”: “json_schema”,

“json_schema”: {

“name”: “AccountAndCampaignAnalysis”,

“schema”: {

“type”: “object”,

“properties”: {

“account_analysis”: {

“type”: “object”,

“additionalProperties”: false,

“properties”: {

“account_name”: {

“type”: “string”

                        },

“daily_spend_yesterday”: {

“type”: [

“string”,

“null”

                            \]

                        },

“spend_last_7d”: {

“type”: [

“string”,

“null”

                            \]

                        },

“main_indicator_day_minus_1”: {

“type”: [

“string”,

“null”

                            \]

                        },

“main_indicator_day_minus_2”: {

“type”: [

“string”,

“null”

                            \]

                        },

“main_indicator_day_minus_3”: {

“type”: [

“string”,

“null”

                            \]

                        },

“main_indicator_last_7d”: {

“type”: [

“string”,

“null”

                            \]

                        }

                    },

“required”: [

“account_name”,

“daily_spend_yesterday”,

“spend_last_7d”,

“main_indicator_day_minus_1”,

“main_indicator_day_minus_2”,

“main_indicator_day_minus_3”,

“main_indicator_last_7d”

                    \]

                },

“campaign_analyses”: {

“type”: “array”,

“items”: {

“type”: “object”,

“additionalProperties”: false,

“properties”: {

“campaign_name”: {

“type”: “string”

                            },

“daily_spend_yesterday”: {

“type”: [

“string”,

“null”

                                \]

                            },

“spend_last_7d”: {

“type”: [

“string”,

“null”

                                \]

                            },

“main_indicator_day_minus_1”: {

“type”: [

“string”,

“null”

                                \]

                            },

“main_indicator_day_minus_2”: {

“type”: [

“string”,

“null”

                                \]

                            },

“main_indicator_day_minus_3”: {

“type”: [

“string”,

“null”

                                \]

                            },

“main_indicator_last_7d”: {

“type”: [

“string”,

“null”

                                \]

                            },

“underperforming_ads”: {

“type”: “array”,

“items”: {

“type”: “object”,

“additionalProperties”: false,

“properties”: {

“ad_name”: {

“type”: “string”

                                        },

“adset_name”: {

“type”: [

“string”,

“null”

                                            \]

                                        },

“spend”: {

“type”: [

“string”,

“null”

                                            \]

                                        },

“performance”: {

“type”: [

“string”,

“null”

                                            \]

                                        }

                                    },

“required”: [

“ad_name”,

“adset_name”,

“spend”,

“performance”

                                    \]

                                }

                            },

“optimization_advice”: {

“type”: [

“string”,

“null”

                                \]

                            }

                        },

“required”: [

“campaign_name”,

“daily_spend_yesterday”,

“spend_last_7d”,

“main_indicator_day_minus_1”,

“main_indicator_day_minus_2”,

“main_indicator_day_minus_3”,

“main_indicator_last_7d”,

“underperforming_ads”,

“optimization_advice”

                        \]

                    }

                }

            },

“required”: [

“account_analysis”,

“campaign_analyses”

            \]

        }

    }

}

}

Hi, thanks for sharing, and I understand it a little better now!

It’s quite a beefy prompt you’re asking gpt-oss-120b to process, and there’s multiple things it needs to get right in one go. I’d break this down into multiple smaller tasks with smaller goals, and check if you get a better response that way.

I think the combination of various analyses, goals, indicators and timeframes is confusing the model, and it helps to break it down into small units of analysis tasks.

I’d probably break the prompt down into a few core reusable analysis functions various timeframes (e.g. last_7d, 2025-11-06, etc.), analyses (account / campaigns / adsets / ads), use the appropriate metrics for each (e.g. cost_per_purchase, cost_per_purchase), etc. — and break it down into tiny “units” of work, with smaller json schemas that reflect what that unit of analysis might mean.

Basically, I’d probably start with an overview of account-level analysis, w/ account-level schema — I’d probably wrap that in an accountAnalysis function, and make sure that one works well. I’d then work my way down to a campaignAnalysis, and include only the campaign’s data w/ a limited time range

You could also try to build together some kind of agent that runs an analysis on accounts first, summarizes it and gets it into an appropriate, smaller schema, then feed that analysis + indicator (e.g. ROAS) into each campaign, and see what the model spits out.

tldr separate your analysis into smaller units of work; even using tiny functions and prompt like like “find underperforming ads within last 7d” would probably yield much better results.

What are your thoughts?