{"id":373678,"date":"2026-09-23T06:15:48","date_gmt":"2026-09-23T06:15:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ai-provider-for-stepfun\/"},"modified":"2026-09-23T07:51:50","modified_gmt":"2026-09-23T07:51:50","slug":"bestony-ai-provider-for-stepfun","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/bestony-ai-provider-for-stepfun\/","author":14788414,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.2","stable_tag":"1.2.2","tested":"7.1.2","requires":"7.0","requires_php":"7.4","requires_plugins":null,"header_name":"Bestony AI Provider for StepFun","header_author":"Bestony","header_description":"StepFun (\u9636\u8dc3\u661f\u8fb0) provider for the WordPress AI Client.","assets_banners_color":"6d87b0","last_updated":"2026-09-23 07:51:50","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/bestony\/AI-Provider-for-Stepfun","header_author_uri":"https:\/\/github.com\/bestony","rating":0,"author_block_rating":0,"active_installs":0,"downloads":48,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.1":{"tag":"1.2.1","author":"bestony","date":"2026-09-23 06:15:35","revision":3708601},"1.2.2":{"tag":"1.2.2","author":"bestony","date":"2026-09-23 07:51:50","revision":3708760}},"upgrade_notice":{"1.2.2":"<p>Directory listing artwork only: a new plugin icon and banners. No code change, so an existing\ninstall needs no action.<\/p>","1.2.1":"<p>Documentation and packaging fixes only: corrected the Terms of Service and Privacy Policy links, and\nthe release zip no longer ships the <code>.wordpress-org<\/code> directory. No behaviour change.<\/p>","1.2.0":"<p>Renames the plugin slug, folder, text domain and plugin name. Replace the plugin folder with the new\nzip and reactivate; the stored API key, the base URL setting and the provider ID are unchanged.<\/p>","1.1.0":"<p>Adds a settings page for choosing the StepFun API host (including the Step Plan endpoints). The\ndefault behaviour is unchanged.<\/p>","1.0.1":"<p>The stored StepFun API key is no longer read by the plugin; the AI Client reports whether a credential is configured.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon.svg":{"filename":"icon.svg","revision":3708760,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3708760,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3708760,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.1","1.2.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3708760,"resolution":"1","location":"assets","locale":"","width":666,"height":497},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3708760,"resolution":"2","location":"assets","locale":"","width":1192,"height":349}},"screenshots":{"1":"Choosing StepFun as the provider, and one of its Step models, for an AI feature such as Alt Text Generation.","2":"Settings \u2192 Bestony AI Provider for StepFun, picking which StepFun or Step Plan API host the provider talks to."}},"plugin_section":[],"plugin_tags":[2353,5739,25308,282213,15123],"plugin_category":[],"plugin_contributors":[145631],"plugin_business_model":[],"class_list":["post-373678","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-artificial-intelligence","plugin_tags-connector","plugin_tags-stepfun","plugin_tags-vision","plugin_contributors-bestony","plugin_committers-bestony"],"banners":{"banner":"https:\/\/ps.w.org\/bestony-ai-provider-for-stepfun\/assets\/banner-772x250.png?rev=3708760","banner_2x":"https:\/\/ps.w.org\/bestony-ai-provider-for-stepfun\/assets\/banner-1544x500.png?rev=3708760","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/bestony-ai-provider-for-stepfun\/assets\/icon.svg?rev=3708760","icon":"https:\/\/ps.w.org\/bestony-ai-provider-for-stepfun\/assets\/icon.svg?rev=3708760","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/bestony-ai-provider-for-stepfun\/assets\/screenshot-1.png?rev=3708760","caption":"Choosing StepFun as the provider, and one of its Step models, for an AI feature such as Alt Text Generation."},{"src":"https:\/\/ps.w.org\/bestony-ai-provider-for-stepfun\/assets\/screenshot-2.png?rev=3708760","caption":"Settings \u2192 Bestony AI Provider for StepFun, picking which StepFun or Step Plan API host the provider talks to."}],"raw_content":"<!--section=description-->\n<p>Adds <a href=\"https:\/\/platform.stepfun.com\/\">StepFun<\/a> (\u9636\u8dc3\u661f\u8fb0) as a provider for the WordPress AI Client.<\/p>\n\n<ul>\n<li>The model list is fetched live from <code>GET \/v1\/models<\/code>, so newly released models appear on their own.<\/li>\n<li>Text generation and chat history with the Step chat models, including tool calling, structured\noutput (JSON schema) and stop sequences.<\/li>\n<li>Vision: <code>step-3.7-flash<\/code> and the <code>step-1v-*<\/code> \/ <code>*-vision<\/code> families accept images, so features like\nAlt Text Generation work.<\/li>\n<li>Image generation with the <code>step-image-*<\/code> \/ <code>step-2x-*<\/code> text-to-image models, returning either an\ninline image or a URL.<\/li>\n<li>Reasoning output is surfaced as thought parts rather than mixed into the answer text.<\/li>\n<li>A <strong>Settings \u2192 Bestony AI Provider for StepFun<\/strong> page to pick which StepFun host to talk to, including the\nStep Plan endpoints.<\/li>\n<\/ul>\n\n<h3>Settings<\/h3>\n\n<p><strong>Settings \u2192 Bestony AI Provider for StepFun<\/strong> picks which StepFun host the provider talks to. Four hosts are\noffered:<\/p>\n\n<ul>\n<li>Stepfun.com \u2014 <code>https:\/\/api.stepfun.com\/v1<\/code> (default)<\/li>\n<li>StepPlan at Stepfun.com \u2014 <code>https:\/\/api.stepfun.com\/step_plan\/v1<\/code><\/li>\n<li>Stepfun.ai \u2014 <code>https:\/\/api.stepfun.ai\/v1<\/code><\/li>\n<li>Step Plan at Stepfun.ai \u2014 <code>https:\/\/api.stepfun.ai\/step_plan\/v1<\/code><\/li>\n<\/ul>\n\n<p>The chosen host is used for the model list and for every generation request. It is stored per site, so\neach site on a multisite network configures its own. There is also a <strong>Setup Step Plan<\/strong> link in the\nplugin's row on the Plugins screen that jumps straight to this page.<\/p>\n\n<p>Only these four hosts can be selected: a value that is not one of them (written to the database\ndirectly, for example) falls back to the default. Setting <code>STEPFUN_BASE_URL<\/code> overrides the choice.<\/p>\n\n<p>The page is available in English, Simplified Chinese (<code>zh_CN<\/code>) and Traditional Chinese (<code>zh_TW<\/code>).<\/p>\n\n<h3>Configuration<\/h3>\n\n<p>The API key is read, in order of precedence, from:<\/p>\n\n<ol>\n<li>The <code>STEPFUN_API_KEY<\/code> environment variable<\/li>\n<li>The <code>STEPFUN_API_KEY<\/code> PHP constant<\/li>\n<li>The <code>connectors_ai_stepfun_api_key<\/code> option (Settings \u2192 Connectors)<\/li>\n<\/ol>\n\n<p>All optional settings are environment variables or PHP constants:<\/p>\n\n<ul>\n<li><code>STEPFUN_DEFAULT_MODEL<\/code> \u2014 chat model to prefer in pickers and feature filters.\nDefault: <code>step-3.7-flash<\/code>.<\/li>\n<li><code>STEPFUN_IMAGE_MODEL<\/code> \u2014 image model to prefer in the image generation feature.\nDefault: <code>step-image-edit-2<\/code>.<\/li>\n<li><code>STEPFUN_BASE_URL<\/code> \u2014 API base URL. Overrides the value chosen on Settings \u2192 Bestony AI Provider for StepFun\n(see below).<\/li>\n<li><code>STEPFUN_MODEL_INPUT_MODALITIES<\/code> \u2014 comma-separated list of modalities your models accept. Include\n  image (e.g. <code>text,image<\/code>) to declare vision for <strong>every<\/strong> chat model, for deployments ahead of\nthe built-in list.<\/li>\n<li><code>STEPFUN_STRUCTURED_OUTPUT<\/code> \u2014 how JSON response requests are shaped. One of:\n\n<ul>\n<li><code>json_schema<\/code> (default) \u2014 sends the JSON schema, wrapped the way StepFun documents it.<\/li>\n<li><code>json_object<\/code> \u2014 asks only for valid JSON, without the schema. Fallback for a model that rejects\nschemas.<\/li>\n<li><code>none<\/code> \u2014 sends no <code>response_format<\/code> at all.<\/li>\n<\/ul><\/li>\n<li><code>STEPFUN_SIZE_LANDSCAPE<\/code> \/ <code>STEPFUN_SIZE_PORTRAIT<\/code> \/ <code>STEPFUN_SIZE_SQUARE<\/code> \u2014 override the <code>size<\/code>\nvalue sent for each orientation. Defaults: <code>1360x768<\/code> \/ <code>768x1360<\/code> \/ <code>1024x1024<\/code>. See the FAQ.<\/li>\n<li><code>STEPFUN_REQUEST_TIMEOUT<\/code> \u2014 request timeout in seconds. Default: <code>120<\/code>.<\/li>\n<li><code>STEPFUN_CONNECT_TIMEOUT<\/code> \u2014 connection timeout in seconds. Default: <code>10<\/code>.<\/li>\n<\/ul>\n\n<p>Because the plugin has no database-backed settings of its own, changing an environment variable after\nthe AI Client has cached its model list does not invalidate that cache. If a new value does not take\neffect immediately, clear the cache \u2014 in WP-CLI:<\/p>\n\n<pre><code>wp cache flush\nwp transient delete --all\n<\/code><\/pre>\n\n<p>To influence which models the AI plugin picks, use the standard filters in your own plugin or theme \u2014\nthis plugin already puts its preferred models first:<\/p>\n\n<pre><code>add_filter( 'wpai_preferred_text_models', function ( $models ) {\n    array_unshift( $models, array( 'stepfun', 'step-3.5-flash' ) );\n    return $models;\n} );&lt;h3&gt;External services&lt;\/h3&gt;\n<\/code><\/pre>\n\n<p>This plugin connects to the StepFun API, an external service operated by \u4e0a\u6d77\u9636\u8dc3\u661f\u8fb0\u667a\u80fd\u79d1\u6280\u6709\u9650\u516c\u53f8\n(StepFun). It is required so the WordPress AI Client can send requests to StepFun models from your\nsite. StepFun is a paid service: requests are billed to your StepFun account, and an account with API\naccess is required.<\/p>\n\n<p>The plugin contacts the following endpoints under the selected base URL \u2014 <code>https:\/\/api.stepfun.com\/v1<\/code>\nby default, or whichever host is chosen on Settings \u2192 Bestony AI Provider for StepFun:<\/p>\n\n<ul>\n<li><code>GET \/models<\/code> \u2014 called when the AI Client refreshes its list of available models, and when it checks\nwhether your credentials work. No user content is sent; only your API key, so StepFun can return the\nmodels available to your account.<\/li>\n<li><code>POST \/chat\/completions<\/code> \u2014 called whenever any plugin or theme on your site uses the WordPress AI\nClient to generate text or to analyze an image. The request carries your API key and the prompt:\nmessages, system instruction, tool definitions, and any other parameters the calling code supplied\n(conversation history, a JSON schema for structured output, or images attached to the prompt).<\/li>\n<li><code>POST \/images\/generations<\/code> \u2014 called when something on your site asks the AI Client to generate an\nimage. The request carries your API key and the image prompt.<\/li>\n<\/ul>\n\n<p>No request is made until something on your site asks the AI Client for a generation, or the AI Client\nrefreshes its model list. Your API key is stored on your own site and is only ever sent to the host\nconfigured above.<\/p>\n\n<p>This service is provided by StepFun:<\/p>\n\n<ul>\n<li>Platform and documentation: <a href=\"https:\/\/platform.stepfun.com\/\">https:\/\/platform.stepfun.com\/<\/a><\/li>\n<li>Terms of Service: <a href=\"https:\/\/platform.stepfun.com\/docs\/zh\/agreement\/userservice\">https:\/\/platform.stepfun.com\/docs\/zh\/agreement\/userservice<\/a><\/li>\n<li>Privacy Policy: <a href=\"https:\/\/platform.stepfun.com\/docs\/zh\/agreement\/userprivacy\">https:\/\/platform.stepfun.com\/docs\/zh\/agreement\/userprivacy<\/a><\/li>\n<li>International platform: <a href=\"https:\/\/platform.stepfun.ai\/\">https:\/\/platform.stepfun.ai\/<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/bestony-ai-provider-for-stepfun\/<\/code>.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Go to Settings \u2192 Connectors, open the StepFun card and paste your API key \u2014 or define it outside\nthe database (see Configuration).<\/li>\n<\/ol>\n\n<p>A StepFun account with API access is required. Create a key at\n<a href=\"https:\/\/platform.stepfun.com\/interface-key\">https:\/\/platform.stepfun.com\/interface-key<\/a>.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20work%20without%20the%20php%20ai%20client%3F\"><h3>Does this plugin work without the PHP AI Client?<\/h3><\/dt>\n<dd><p>No. It requires the PHP AI Client SDK, which is provided by WordPress 7.0 or by the AI plugin. The\nprovider stays silent when the SDK is missing.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20configure%20anything%20in%20the%20database%3F\"><h3>Do I need to configure anything in the database?<\/h3><\/dt>\n<dd><p>The API key (on Settings \u2192 Connectors) and, if you do not use the default host, the base URL chosen on\nSettings \u2192 Bestony AI Provider for StepFun. Both can instead be set with an environment variable or constant.<\/p><\/dd>\n<dt id=\"why%20does%20the%20plugin%20require%20wordpress%207.0%3F\"><h3>Why does the plugin require WordPress 7.0?<\/h3><\/dt>\n<dd><p>Because the Connectors screen and the <code>connectors_ai_stepfun_api_key<\/code> option are WordPress 7.0\nfeatures. The SDK's own credential lookup reads only environment variables and constants, so on 6.9\nyou could paste a key into a UI that does not exist yet. WordPress 7.0 wires the stored key to the\nprovider for you.<\/p><\/dd>\n<dt id=\"which%20models%20can%20be%20used%20with%20vision%20features%3F\"><h3>Which models can be used with vision features?<\/h3><\/dt>\n<dd><p>step-3.7-flash, the <code>step-1v-*<\/code> family and any model whose ID ends in <code>-vision<\/code>. The model list\nendpoint reports no capabilities, so this list lives in the plugin source. If your model supports\nimages but is not on the list, set <code>STEPFUN_MODEL_INPUT_MODALITIES=text,image<\/code>.<\/p><\/dd>\n<dt id=\"why%20is%20there%20no%20video%20generation%3F\"><h3>Why is there no video generation?<\/h3><\/dt>\n<dd><p>StepFun's video models are asynchronous jobs, and the PHP AI Client only exposes a synchronous entry\npoint for video generation. The plugin therefore declares no capability for <code>step-video-*<\/code> models:\nthey still appear in the model list, but they cannot be selected. Implementing it would mean writing\ncode the SDK never calls.<\/p><\/dd>\n<dt id=\"why%20is%20there%20no%20image%20editing%3F\"><h3>Why is there no image editing?<\/h3><\/dt>\n<dd><p>Only text-to-image (<code>POST \/v1\/images\/generations<\/code>) is implemented. StepFun's edit endpoints\n(<code>\/v1\/images\/edits<\/code>, <code>\/v1\/images\/image2image<\/code>) take a different request shape per model family, and\nthe AI Client's reference-image flow is not a reliable fit for them.<\/p><\/dd>\n<dt id=\"image%20generation%20fails%20with%20an%20invalid%20size\"><h3>Image generation fails with an invalid size<\/h3><\/dt>\n<dd><p>The plugin sends <code>1360x768<\/code> for landscape and <code>768x1360<\/code> for portrait. StepFun documents\n    step-image-edit-2 sizes as <code>height x width<\/code>, which is ambiguous \u2014 those two values are the\nreasonable numeric reading, but if the API rejects them, swap them:<\/p>\n\n<pre><code>STEPFUN_SIZE_LANDSCAPE=768x1360\nSTEPFUN_SIZE_PORTRAIT=1360x768\n<\/code><\/pre><\/dd>\n<dt id=\"a%20json%20feature%20fails%20with%20%60400%20...%20%22param%22%3A%22response_format%22%60\"><h3>A JSON feature fails with `400 ... \"param\":\"response_format\"`<\/h3><\/dt>\n<dd><p>That feature asks for a JSON schema response. Try <code>STEPFUN_STRUCTURED_OUTPUT=json_object<\/code> to ask for\nplain JSON instead, or <code>none<\/code> to send no <code>response_format<\/code> at all \u2014 the prompt still asks for JSON.<\/p><\/dd>\n<dt id=\"where%20is%20my%20api%20key%20stored%3F\"><h3>Where is my API key stored?<\/h3><\/dt>\n<dd><p>In the WordPress options table on your own site, under the AI Client's connector option\n(<code>connectors_ai_stepfun_api_key<\/code>), or in an environment variable or PHP constant if you set one. It is\nnever transmitted anywhere except to the StepFun API when fulfilling a request.<\/p><\/dd>\n<dt id=\"what%20data%20leaves%20my%20site%3F\"><h3>What data leaves my site?<\/h3><\/dt>\n<dd><p>Only what you send to the AI: your prompts, and whatever the calling plugin or theme adds to them\n(system instructions, conversation history, tool definitions, a JSON schema, or attached files). See\nExternal services below for the exact endpoints.<\/p><\/dd>\n<dt id=\"is%20there%20a%20settings%20page%3F\"><h3>Is there a settings page?<\/h3><\/dt>\n<dd><p>Yes, one: <strong>Settings \u2192 Bestony AI Provider for StepFun<\/strong>, which chooses the API host (see Settings above). The\nAPI key still lives on Settings \u2192 Connectors, and the remaining optional behaviour is controlled by\nenvironment variables or constants.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>New plugin icon and refreshed banners for the WordPress.org directory listing. The distributed\nplugin files are otherwise unchanged.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fixed the Terms of Service and Privacy Policy links: StepFun moved its legal pages from\n  \/docs\/zh\/terms\/* to <code>\/docs\/zh\/agreement\/*<\/code>, so the previous links returned 404.<\/li>\n<li>The release zip no longer includes the <code>.wordpress-org<\/code> directory, which is only used for the\nWordPress.org plugin directory listing.<\/li>\n<li>Added screenshots for picking StepFun as a provider and for the API host setting.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Changed the plugin slug and text domain to <code>bestony-ai-provider-for-stepfun<\/code> and the plugin name to\n<strong>Bestony AI Provider for StepFun<\/strong>. The release zip and the plugin folder use the new slug, so an\nexisting install must be replaced and reactivated. The settings page keeps working as before, under\nits new title.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: Settings \u2192 Bestony AI Provider for StepFun, to choose between the StepFun and Step Plan API hosts on\nthe mainland-China and international platforms. The choice applies to the model list and every\ngeneration request, and is stored per site.<\/li>\n<li>New: a <strong>Setup Step Plan<\/strong> link in the plugin's row on the Plugins screen.<\/li>\n<li>Added English, Simplified Chinese (<code>zh_CN<\/code>) and Traditional Chinese (<code>zh_TW<\/code>) translations for the\nadmin screens.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Stop reading the <code>connectors_ai_stepfun_api_key<\/code> option directly. Whether a StepFun credential is\nconfigured is now asked of the AI Client, so the plugin never handles the key the user saved in\nSettings \u2192 Connectors. Behaviour is unchanged: the <code>STEPFUN_API_KEY<\/code> constant and environment\nvariable still work.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: text generation, chat history, tool calling, structured output, vision input and\ntext-to-image generation with StepFun (\u9636\u8dc3\u661f\u8fb0) models.<\/li>\n<\/ul>","raw_excerpt":"StepFun (\u9636\u8dc3\u661f\u8fb0) provider for the PHP AI Client: text, vision and image generation with Step models.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/373678","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=373678"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bestony"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=373678"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=373678"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=373678"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=373678"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=373678"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=373678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}