Web search
Cura 1T can pull live information from the web with the built-in $web_search tool. The Cura platform runs the search for you — there is no search backend to host and nothing to execute on your side.
Cura 1T is a research model, not a medical service, and not a substitute for a clinician. Benchmark scores do not establish safety for unsupervised clinical use.
Enable it
Add a single built-in tool to your request. Unlike a custom function it needs no schema — just the type builtin_function and the reserved name $web_search. The tool runs outside the model's own reasoning, so disable thinking mode on the search turn.
import jsonimport osfrom openai import OpenAI client = OpenAI(api_key=os.environ["ACTAVA_API_KEY"], base_url="https://inference.actava.ai/v1") tools = [{"type": "builtin_function", "function": {"name": "$web_search"}}] messages = [ {"role": "user", "content": "Who won the most recent F1 race, and when?"}] while True: response = client.chat.completions.create( model="actava/cura-soar", messages=messages, tools=tools, # The built-in tool runs outside the model's own reasoning; disable # thinking mode for the search turn. extra_body={"thinking": {"type": "disabled"}}, ) message = response.choices[0].message messages.append(message) if not message.tool_calls: print(message.content) break # $web_search is executed by the Cura platform, not by you. Echo each call # back as a tool result — the platform runs the search and feeds the # results to the model on the next turn. for call in message.tool_calls: messages.append( { "role": "tool", "tool_call_id": call.id, "name": "$web_search", "content": call.function.arguments, # relay verbatim; do not execute } )The flow
When the model decides to search, it responds with a $web_search tool call carrying the query it chose:
{ "role": "assistant", "content": "", "tool_calls": [ { "id": "functions.$web_search:0", "type": "function", "function": { "name": "$web_search", "arguments": "{\"query\": \"most recent F1 race winner\"}" } } ]}You don't execute anything — append the assistant message and a tool-role message echoing the call's arguments back, then call the API again. The platform runs the search, injects the results, and the model replies grounded in what it found (finish_reason: stop). Keep the assistant message that carries the tool call in your history — dropping it is the usual cause of "tool_call_id not found" errors.
Notes
- Tokens: search results are added to the prompt on the turn that consumes them, so they count as input tokens in usage.prompt_tokens.
- No schema: the built-in takes only type and name. The $ prefix is reserved for platform-executed tools.
- Verify results: web results are third-party and unvetted. Cura 1T is a research model, not a medical service, and not a substitute for a clinician — confirm anything clinical before acting on it.