/ docs-website / reference_versioned_docs / version-2.27 / experiments-api / experimental_generators_api.md
experimental_generators_api.md
1 --- 2 title: "Generators" 3 id: experimental-generators-api 4 description: "Enables text generation using LLMs." 5 slug: "/experimental-generators-api" 6 --- 7 8 <a id="haystack_experimental.components.generators.chat.openai"></a> 9 10 ## Module haystack\_experimental.components.generators.chat.openai 11 12 <a id="haystack_experimental.components.generators.chat.openai.OpenAIChatGenerator"></a> 13 14 ### OpenAIChatGenerator 15 16 An OpenAI chat-based text generator component that supports hallucination risk scoring. 17 18 This is based on the paper 19 [LLMs are Bayesian, in Expectation, not in Realization](https://arxiv.org/abs/2507.11768). 20 21 ## Usage Example: 22 23 ```python 24 from haystack.dataclasses import ChatMessage 25 26 from haystack_experimental.utils.hallucination_risk_calculator.dataclasses import HallucinationScoreConfig 27 from haystack_experimental.components.generators.chat.openai import OpenAIChatGenerator 28 29 # Evidence-based Example 30 llm = OpenAIChatGenerator(model="gpt-4o") 31 rag_result = llm.run( 32 messages=[ 33 ChatMessage.from_user( 34 text="Task: Answer strictly based on the evidence provided below. 35 " 36 "Question: Who won the Nobel Prize in Physics in 2019? 37 " 38 "Evidence: 39 " 40 "- Nobel Prize press release (2019): James Peebles (1/2); Michel Mayor & Didier Queloz (1/2). 41 " 42 "Constraints: If evidence is insufficient or conflicting, refuse." 43 ) 44 ], 45 hallucination_score_config=HallucinationScoreConfig(skeleton_policy="evidence_erase"), 46 ) 47 print(f"Decision: {rag_result['replies'][0].meta['hallucination_decision']}") 48 print(f"Risk bound: {rag_result['replies'][0].meta['hallucination_risk']:.3f}") 49 print(f"Rationale: {rag_result['replies'][0].meta['hallucination_rationale']}") 50 print(f"Answer: 51 {rag_result['replies'][0].text}") 52 print("---") 53 ``` 54 55 <a id="haystack_experimental.components.generators.chat.openai.OpenAIChatGenerator.run"></a> 56 57 #### OpenAIChatGenerator.run 58 59 ```python 60 @component.output_types(replies=list[ChatMessage]) 61 def run( 62 messages: list[ChatMessage], 63 streaming_callback: StreamingCallbackT | None = None, 64 generation_kwargs: dict[str, Any] | None = None, 65 *, 66 tools: ToolsType | None = None, 67 tools_strict: bool | None = None, 68 hallucination_score_config: HallucinationScoreConfig | None = None 69 ) -> dict[str, list[ChatMessage]] 70 ``` 71 72 Invokes chat completion based on the provided messages and generation parameters. 73 74 **Arguments**: 75 76 - `messages`: A list of ChatMessage instances representing the input messages. 77 - `streaming_callback`: A callback function that is called when a new token is received from the stream. 78 - `generation_kwargs`: Additional keyword arguments for text generation. These parameters will 79 override the parameters passed during component initialization. 80 For details on OpenAI API parameters, see [OpenAI documentation](https://platform.openai.com/docs/api-reference/chat/create). 81 - `tools`: A list of Tool and/or Toolset objects, or a single Toolset for which the model can prepare calls. 82 If set, it will override the `tools` parameter provided during initialization. 83 - `tools_strict`: Whether to enable strict schema adherence for tool calls. If set to `True`, the model will follow exactly 84 the schema provided in the `parameters` field of the tool definition, but this may increase latency. 85 If set, it will override the `tools_strict` parameter set during component initialization. 86 - `hallucination_score_config`: If provided, the generator will evaluate the hallucination risk of its responses using 87 the OpenAIPlanner and annotate each response with hallucination metrics. 88 This involves generating multiple samples and analyzing their consistency, which may increase 89 latency and cost. Use this option when you need to assess the reliability of the generated content 90 in scenarios where accuracy is critical. 91 For details, see the [research paper](https://arxiv.org/abs/2507.11768) 92 93 **Returns**: 94 95 A dictionary with the following key: 96 - `replies`: A list containing the generated responses as ChatMessage instances. If hallucination 97 scoring is enabled, each message will include additional metadata: 98 - `hallucination_decision`: "ANSWER" if the model decided to answer, "REFUSE" if it abstained. 99 - `hallucination_risk`: The EDFL hallucination risk bound. 100 - `hallucination_rationale`: The rationale behind the hallucination decision. 101 102 <a id="haystack_experimental.components.generators.chat.openai.OpenAIChatGenerator.run_async"></a> 103 104 #### OpenAIChatGenerator.run\_async 105 106 ```python 107 @component.output_types(replies=list[ChatMessage]) 108 async def run_async( 109 messages: list[ChatMessage], 110 streaming_callback: StreamingCallbackT | None = None, 111 generation_kwargs: dict[str, Any] | None = None, 112 *, 113 tools: ToolsType | None = None, 114 tools_strict: bool | None = None, 115 hallucination_score_config: HallucinationScoreConfig | None = None 116 ) -> dict[str, list[ChatMessage]] 117 ``` 118 119 Asynchronously invokes chat completion based on the provided messages and generation parameters. 120 121 This is the asynchronous version of the `run` method. It has the same parameters and return values 122 but can be used with `await` in async code. 123 124 **Arguments**: 125 126 - `messages`: A list of ChatMessage instances representing the input messages. 127 - `streaming_callback`: A callback function that is called when a new token is received from the stream. 128 Must be a coroutine. 129 - `generation_kwargs`: Additional keyword arguments for text generation. These parameters will 130 override the parameters passed during component initialization. 131 For details on OpenAI API parameters, see [OpenAI documentation](https://platform.openai.com/docs/api-reference/chat/create). 132 - `tools`: A list of Tool and/or Toolset objects, or a single Toolset for which the model can prepare calls. 133 If set, it will override the `tools` parameter provided during initialization. 134 - `tools_strict`: Whether to enable strict schema adherence for tool calls. If set to `True`, the model will follow exactly 135 the schema provided in the `parameters` field of the tool definition, but this may increase latency. 136 If set, it will override the `tools_strict` parameter set during component initialization. 137 - `hallucination_score_config`: If provided, the generator will evaluate the hallucination risk of its responses using 138 the OpenAIPlanner and annotate each response with hallucination metrics. 139 This involves generating multiple samples and analyzing their consistency, which may increase 140 latency and cost. Use this option when you need to assess the reliability of the generated content 141 in scenarios where accuracy is critical. 142 For details, see the [research paper](https://arxiv.org/abs/2507.11768) 143 144 **Returns**: 145 146 A dictionary with the following key: 147 - `replies`: A list containing the generated responses as ChatMessage instances. If hallucination 148 scoring is enabled, each message will include additional metadata: 149 - `hallucination_decision`: "ANSWER" if the model decided to answer, "REFUSE" if it abstained. 150 - `hallucination_risk`: The EDFL hallucination risk bound. 151 - `hallucination_rationale`: The rationale behind the hallucination decision. 152