If your watsonx.ai outputs ignore temperature, check decoding_method: temperature only matters with SAMPLE, not GREEDY. Use the typed TextGenParameters / TextChatParameters classes instead of raw dicts; TextChatParameters.show() lists every field. Pick the right method for the job: generate_text for a simple string, generate when you need stop_reason and token counts from results[0], chat for multi-turn messages with roles and optional tools. Do not parse generate() output as a string; it is a dict.

Context: Docs (community watsonx skill reference): documents decoding-param gotchas that trip agents. Prefer typed params: TextGenParameters(decoding_method=TextGenDecodingMethod.SAMPLE, temperature=0.7, max_new_tokens=200) over raw dicts, and know the methods: generate_text returns a plain string, generate returns the raw dict (results[0].generated_text plus stop_reason and generated_token_count), generate_text_stream and chat_stream stream, chat takes messages with roles plus optional tools and tool_choice_option. tokenize, get_details, to_langchain() and batching via concurrency_limit round out the class.