PHP code example of jonaspauleta / laravel-ai-moonshot
1. Go to this page and download the library: Download jonaspauleta/laravel-ai-moonshot library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
jonaspauleta / laravel-ai-moonshot example snippets
use function Laravel\Ai\agent;
$response = agent('You are a helpful assistant.')
->prompt('Explain Moonshot Kimi K2 in one sentence.', provider: 'moonshot');
echo $response->text;
use function Laravel\Ai\agent;
$response = agent('You are a helpful assistant.')
->prompt('Explain Moonshot Kimi K2 in one sentence.', provider: 'moonshot');
echo $response->text;
namespace App\Ai\Agents;
use Laravel\Ai\Attributes\Provider;
use Laravel\Ai\Contracts\Agent;
use Laravel\Ai\Contracts\Conversational;
use Laravel\Ai\Contracts\HasTools;
use Laravel\Ai\Promptable;
use Stringable;
#[Provider('moonshot')]
class RaceEngineer implements Agent, Conversational, HasTools
{
use Promptable;
public function instructions(): Stringable|string
{
return 'You are a Formula 1 race engineer. Be concise and technical.';
}
public function messages(): iterable
{
return [];
}
public function tools(): iterable
{
return [];
}
}
$response = RaceEngineer::make()
->prompt('Best dry setup for the Nordschleife in a GT3?');
echo $response->text;
$stream = RaceEngineer::make()
->stream('Walk me through a flying lap at Spa.', provider: 'moonshot');
foreach ($stream as $event) {
// TextStart, TextDelta, TextEnd, ReasoningStart, ReasoningDelta, ReasoningEnd, ...
}
use Illuminate\Broadcasting\PrivateChannel;
RaceEngineer::make()
->broadcastOnQueue(
'What is the best setup for the Nordschleife?',
new PrivateChannel("agent.{$user->id}.{$requestId}"),
provider: 'moonshot',
model: 'kimi-k2.6',
);
use Illuminate\Contracts\JsonSchema\JsonSchema;
use Laravel\Ai\Contracts\Tool;
use Laravel\Ai\Tools\Request;
class GetWeather implements Tool
{
public function description(): string
{
return 'Get the current weather for a city.';
}
public function schema(JsonSchema $schema): array
{
return [
'city' => $schema->string()->description('City name')->
use function Laravel\Ai\agent;
$response = agent(
instructions: 'Use tools when needed.',
tools: [new GetWeather],
)->prompt('What is the weather in Lisbon?', provider: 'moonshot');
namespace App\Ai\Agents;
use Illuminate\Contracts\JsonSchema\JsonSchema;
use Laravel\Ai\Attributes\Provider;
use Laravel\Ai\Contracts\Agent;
use Laravel\Ai\Contracts\HasStructuredOutput;
use Laravel\Ai\Promptable;
#[Provider('moonshot')]
final class ExtractPerson implements Agent, HasStructuredOutput
{
use Promptable;
public function instructions(): string
{
return 'Extract the person mentioned in the text.';
}
public function schema(JsonSchema $schema): array
{
return [
'name' => $schema->string()->description('Full name')->
$response = ExtractPerson::make()
->prompt('Ada Lovelace was 36 when she died.');
$response->structured; // ['name' => 'Ada Lovelace', 'age' => 36]
use function Laravel\Ai\agent;
use Laravel\Ai\Providers\Tools\WebSearch;
$response = agent(
instructions: 'Cite the sources you find on the web.',
tools: [new WebSearch],
)->prompt('Latest F1 driver standings.', provider: 'moonshot');
use Laravel\Ai\Files\RemoteImage;
use function Laravel\Ai\agent;
$response = agent('Describe the image.')
->prompt(
prompt: 'What do you see?',
attachments: [new RemoteImage('https://example.com/photo.jpg')],
provider: 'moonshot',
);
namespace App\Ai\Agents;
use Jonaspauleta\LaravelAiMoonshot\Concerns\InjectsMoonshotFiles;
use Laravel\Ai\Attributes\Provider;
use Laravel\Ai\Contracts\Agent;
use Laravel\Ai\Contracts\HasMiddleware;
use Laravel\Ai\Promptable;
#[Provider('moonshot')]
final class ContractAnalyst implements Agent, HasMiddleware
{
use Promptable;
use InjectsMoonshotFiles;
public function instructions(): string
{
return 'You analyze contracts and surface risky clauses.';
}
}
$response = ContractAnalyst::make()
->withMoonshotFile('storage/app/contracts/2026-renewal.pdf')
->withMoonshotFile($uploadedFile, label: 'Refund Policy')
->prompt('What are the riskiest clauses?');
use InjectsMoonshotFiles {
middleware as moonshotFilesMiddlewareDefault;
}
public function middleware(): array
{
return [...$this->moonshotFilesMiddlewareDefault(), new MyOtherMiddleware()];
}
use Jonaspauleta\LaravelAiMoonshot\Files\MoonshotFiles;
$files = app(MoonshotFiles::class);
$file = $files->upload('contract.pdf');
$text = $files->content($file->id);
// Later: list / delete
foreach ($files->list() as $entry) {
$files->delete($entry->id);
}
namespace App\Ai\Agents;
use Laravel\Ai\Attributes\Provider;
use Laravel\Ai\Contracts\Agent;
use Laravel\Ai\Contracts\Conversational;
use Laravel\Ai\Contracts\HasProviderOptions;
use Laravel\Ai\Contracts\HasTools;
use Laravel\Ai\Enums\Lab;
use Laravel\Ai\Promptable;
use Stringable;
#[Provider('moonshot')]
class ThinkingAgent implements Agent, Conversational, HasProviderOptions, HasTools
{
use Promptable;
public function instructions(): Stringable|string
{
return 'Think step by step before answering.';
}
public function messages(): iterable
{
return [];
}
public function tools(): iterable
{
return [];
}
public function providerOptions(Lab|string $provider): array
{
return $provider === 'moonshot'
// type: 'enabled' | 'disabled'
// keep: 'all' — kimi-k2.6 only, preserves reasoning across multi-turn conversations
? ['thinking' => ['type' => 'enabled', 'keep' => 'all']]
: [];
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.