call method
- bool encode = false,
Calls the Pollinations API to generate text based on the provided prompt.
@param encode Whether to encode the response. Default is false. @return A Future that resolves to a string with the generated text or an error message.
Implementation
Future<String> call({bool encode = false}) async {
try {
if (contextual || (images != null && images!.isNotEmpty)) {
List<Map<String, dynamic>> formattedMessages =
messages?.map((message) {
return message.call();
}).toList() ??
[];
if (system.isNotEmpty &&
(formattedMessages.isEmpty ||
formattedMessages.first['role'] !=
EnumToString.convertToString(Role.system))) {
formattedMessages.insert(
0,
Message(role: Role.system, content: system).call(),
);
}
if (prompt.isNotEmpty) {
if (images != null && images!.isNotEmpty) {
// Ensure images are correctly formatted in the messages
formattedMessages.add(
Message(role: Role.user, content: prompt, images: images).call(),
);
} else {
formattedMessages.add(
Message(role: Role.user, content: prompt).call(),
);
}
}
final response = await http
.post(
Uri.parse("https://${ApiConfig.getEndpoint(Api.text)}/"),
headers: ApiConfig.headers,
body: json.encode({
"model": model,
"messages": formattedMessages,
"seed": seed.toString(),
"private": private.toString(),
"reasoning_effort": reasoningEffort,
"json": jsonMode.toString(),
"referrer": referrer,
}),
)
.timeout(Duration(seconds: ApiConfig.timeout));
if (response.statusCode == 200) {
if (jsonMode) {
try {
return json.decode(response.body);
} catch (e) {
return response.body;
}
} else {
return response.body;
}
} else {
return "An error occurred: ${response.statusCode} - ${response.body}";
}
} else {
final params = {
"model": model,
"seed": seed.toString(),
"private": private.toString(),
"reasoning_effort": reasoningEffort,
"json": jsonMode.toString(),
"referrer": referrer,
};
if (system.isNotEmpty) {
params["system"] = system;
}
final uri = Uri.parse(
"https://${ApiConfig.getEndpoint(Api.text)}/$prompt",
).replace(queryParameters: params);
final response = await http
.get(uri, headers: ApiConfig.headers)
.timeout(Duration(seconds: ApiConfig.timeout));
if (response.statusCode == 200) {
if (jsonMode) {
try {
return json.decode(response.body);
} catch (e) {
return response.body;
}
} else {
return response.body;
}
} else {
return "An error occurred: ${response.statusCode} - ${response.body}";
}
}
} catch (e) {
return "An error occurred: $e";
}
}