当前位置: 首页 > article >正文

为什么92%的Laravel项目在AI集成后Q3运维成本翻倍?——Laravel Octane+Vector DB冷热分离计费策略全公开

更多请点击 https://intelliparadigm.com第一章Laravel 12 AI集成成本失控的根源诊断当 Laravel 12 引入原生异步任务调度与内置 OpenAI 客户端抽象层后许多团队在未评估资源边界的情况下直接启用 ai:generate Artisan 命令批量处理用户请求导致 API 调用频次激增、模型降级失败重试、以及隐式 token 溢出——这些正是成本失控的核心诱因。高频无缓冲调用模式Laravel 12 的 AiManager 默认不启用请求节流与本地缓存。若在控制器中直接调用// 危险示例每请求触发一次远程 AI 调用 $result Ai::driver(openai)-chat()-create([ messages [[role user, content $input]], model gpt-4-turbo, ]);该代码将绕过队列与熔断机制造成并发峰值下 OpenAI 接口限流HTTP 429并触发 Laravel 默认重试策略3 次指数退避实际调用量达理论值的 3–5 倍。Token 管理缺失引发隐性扩容以下为典型误配置导致的 token 膨胀链路前端未截断长文本输入如上传整份 PDF 提取内容中间件未注入 TrimAiInput 或 LimitTokenLength 自定义逻辑响应未启用 stream: false导致服务端维持长连接等待流式返回成本驱动因素对比表因素默认行为Laravel 12.0推荐加固措施API 调用重试启用 3 次自动重试无退避策略配置 retry_after 60 自定义 RetryableAiException上下文缓存完全禁用每次新建 ChatCompletion 实例集成 laravel-pennant 实现 prompt 版本化缓存模型降级策略硬编码指定 gpt-4-turbo失败即报错注册多驱动 fallback 链gpt-4-turbo → gpt-3.5-turbo → local-llm第二章Laravel Octane高性能运行时的成本陷阱与规避策略2.1 Octane进程模型与AI推理请求并发冲突的量化建模并发冲突的本质来源Octane采用固定工作线程池默认8线程绑定GPU设备而AI推理请求具有不规则计算密度与动态显存需求导致线程阻塞与资源争用。关键参数建模公式符号含义典型值λ请求到达率req/s12.5μ单请求服务率req/s3.2ρ λ/(n·μ)系统负载强度n线程数0.49线程阻塞状态检测逻辑// 检测GPU上下文是否被非抢占式推理长期占用 func isBlocked(ctx context.Context, deviceID int) bool { timeout : time.Second * 2.5 // 超过2.5s视为阻塞 select { case -time.After(timeout): return true // 超时未释放 case -ctx.Done(): return false } }该函数通过上下文超时机制识别长时GPU占用2.5s阈值源于ResNet-50平均推理耗时1.8s加2σ抖动容忍返回true即触发线程迁移调度。2.2 Swoole/PM2模式下内存泄漏与冷启动复用失效的实测对比内存增长趋势对比1000次请求运行模式初始内存(MB)终态内存(MB)内存增量Swoole常驻进程18.242.724.5 MBPM2集群模式15.616.10.5 MB冷启动复用验证代码// Swoole WorkerStart事件中注册静态资源缓存 Swoole\Server::on(WorkerStart, function ($server, $workerId) { if (!isset($GLOBALS[redis_pool])) { $GLOBALS[redis_pool] new RedisPool(); // ❌ 全局变量未清理持续累积 } });该代码在每次Worker重启时重复初始化全局池对象但未执行析构或重置逻辑导致连接句柄与内存块无法回收而PM2通过进程级隔离天然规避此问题。关键差异归因Swoole依赖单进程长生命周期静态变量/全局引用易形成隐式内存持有PM2以子进程为单位启停每次冷启动均释放全部上下文内存2.3 基于Request Lifecycle Hook的AI调用熔断与降级实践Hook注入时机选择在请求生命周期的pre-handle阶段注入熔断逻辑可避免无效请求穿透至下游AI服务。需结合当前QPS、错误率及响应延迟三维度动态决策。熔断器状态机实现// 熔断器核心状态判断逻辑 func (c *CircuitBreaker) Allow() bool { switch c.state { case StateClosed: return c.failureCount c.maxFailures time.Since(c.lastFailure) c.timeout // 半开窗口期 case StateOpen: return time.Since(c.openedAt) c.timeout } return false }该逻辑确保仅在半开或关闭状态下放行请求maxFailures控制失败阈值timeout定义恢复观察窗口。降级策略映射表场景触发条件降级动作高延迟95%分位响应2s返回缓存摘要模型不可用HTTP 503 熔断开启启用规则引擎兜底2.4 Octane事件监听器中异步向量计算任务的资源隔离方案基于 Goroutine 池的任务调度隔离var vectorPool sync.Pool{ New: func() interface{} { return VectorTask{ctx: context.Background(), result: make([]float64, 1024)} }, }该池复用向量计算任务对象避免高频 GCresult预分配固定长度切片防止运行时扩容导致内存抖动ctx独立绑定确保超时与取消信号不跨任务泄漏。CPU 与内存配额控制表任务类型CPU Quota (ms/s)Mem Limit (MB)实时相似度50128批量聚类200512资源边界校验流程内核级 cgroup v2 资源约束链EventListener → TaskWrapper → VectorExecutor2.5 面向生产环境的Octane内存占用压测与GC调优手册压测基准配置使用 JMeter 模拟 2000 QPS 持续负载请求体含 16KB JSON payloadJVM 启动参数-Xms4g -Xmx4g -XX:UseG1GC -XX:MaxGCPauseMillis100G1 GC 关键调优参数-XX:G1HeapRegionSize2M \ -XX:G1NewSizePercent30 \ -XX:G1MaxNewSizePercent60 \ -XX:G1MixedGCCountTarget8 \ -XX:G1OldCSetRegionThresholdPercent20上述参数将年轻代弹性区间扩大至堆的 30%–60%避免频繁 Young GC混合回收目标设为 8 轮配合老年代区域阈值 20%精准控制并发标记后清理节奏。内存分配热点对比压测 10 分钟组件平均对象创建速率/ms晋升至老年代占比EventDecoder12718.3%JsonSerializer945.1%OctaneRouter210.7%第三章Vector DB冷热分离架构的成本效益分析框架3.1 向量相似度查询频次-热度分布的Laravel Telescope埋点建模埋点设计原则聚焦向量检索上下文捕获query_vector_hash、top_k、响应延迟及结果集稀疏度避免全量日志膨胀。Telescope 自定义记录器class VectorQueryWatcher implements WatcherInterface { public function register(Application $app) { $app[events]-listen(VectorSearchExecuted::class, function ($event) { Telescope::recordMetric(vector_query, heatmap, [ hash $event-hash, k $event-topK, latency_ms $event-latency, hit_ratio $event-hitCount / $event-topK, ], now()); }); } }该监听器将每次向量查询映射为热力指标事件hash实现去重聚合hit_ratio反映语义匹配质量为热度分布建模提供归一化维度。热度分桶统计表延迟区间(ms)查询频次平均 hit_ratio5012,4860.8950–2003,7120.722008410.413.2 Pinecone/Milvus/Weaviate在Laravel Eloquent层的按需路由策略动态向量库路由机制通过Eloquent模型的$vectorStore属性与运行时上下文如租户ID、查询意图联动实现向量引擎的透明切换。基于请求头X-Vector-Engine: pinecone强制路由按数据敏感度自动降级高敏数据→本地Milvus公开向量→Weaviate云实例路由配置表场景PineconeMilvusWeaviate实时语义搜索✓低延迟△需GPU✗冷启慢离线批量索引✗配额限制✓批处理优化✓自动分片路由中间件示例// app/Http/Middleware/VectorStoreRouter.php public function handle($request, Closure $next) { // 根据请求特征选择向量后端 $engine $request-header(X-Vector-Engine) ?? config(vector.default, weaviate); app()-instance(vector.engine, $engine); return $next($request); }该中间件将引擎标识注入服务容器供后续Eloquent模型的vectorQuery()构建器消费。$engine值直接影响VectorQueryBuilder中connect()方法的驱动加载逻辑确保同一查询接口可无缝切换底层向量数据库。3.3 热数据本地缓存RedisJSONHNSW索引与冷数据云向量库的自动分级同步架构分层设计热数据驻留于本地 Redis 实例利用RedisJSON存储结构化向量元信息同时通过RedisSearch的 HNSW 索引加速近邻检索冷数据则异步归档至云向量库如 Pinecone 或 Weaviate实现容量与性能的平衡。同步触发策略写入时单条向量在本地缓存命中率 95% 且 TTL 1h触发延迟同步批量时每 5 分钟聚合变更集按 cosine 相似度聚类后批量上传同步代码示例// 同步决策逻辑Go func shouldSync(vec *Vector) bool { return vec.AccessCount 100 // 热度阈值 time.Since(vec.LastAccess) 5*time.Minute // 冷却窗口 vec.Dimension 64 // 高维才需云侧索引优化 }该函数基于访问频次、时间衰减与维度特征三重判断避免低维/低频向量冗余上云降低带宽与存储成本。参数AccessCount来自 RedisJSON 的嵌套字段.stats.access_count由 Lua 脚本原子更新。同步状态映射表状态码含义重试策略SYNC_OK本地与云库向量一致无SYNC_PENDING已入队但未提交指数退避1s→4s→16s第四章全链路AI计费感知型运维体系构建4.1 基于Laravel Horizon Metrics的AI Token消耗与向量距离计算双维度计费看板双指标采集架构Horizon Metrics 通过自定义 Metric 类同时捕获 LLM API 调用的 input_tokens/output_tokens 与向量相似度服务返回的 cosine_distanceclass AiUsageMetric extends Metric { public function value(): int { return $this-job-payload()[metrics][tokens] ?? 0; } public function tags(): array { return [ model $this-job-payload()[model] ?? unknown, distance round($this-job-payload()[metrics][distance] ?? 1.0, 3), ]; } }该实现将 token 数作为主计量值同时将余弦距离0~2 范围作为标签注入支持按距离区间聚合计费。实时计费维度映射距离区间Token单价¥适用场景[0.0, 0.3)0.012高精度检索[0.3, 0.7)0.008常规语义匹配[0.7, 2.0]0.005模糊召回4.2 按租户/模块/Endpoint粒度的AI服务配额控制器RateLimit BudgetGuard多维配额协同策略RateLimit 负责请求频次控制BudgetGuard 管理 token 消耗预算二者在统一配额上下文中联动决策。核心配置示例tenant: acme-corp module: summarization-v2 endpoint: /v1/summarize rate_limit: { rps: 50, burst: 100 } budget_limit: { tokens_per_day: 2_000_000, soft_cap: 0.9 }该配置为租户 acme-corp 的摘要模块设定每秒 50 次调用、突发 100 次并限制日 token 消耗上限为 200 万软阈值设为 90% 触发降级告警。配额决策优先级首先校验 Endpoint 级 RateLimit毫秒级响应再检查 Module 级 BudgetGuard 剩余 token 余额需原子读-扣减最后回溯 Tenant 总预算池作兜底约束4.3 Vector DB查询成本预估中间件基于nprobe、ef_construction与向量维数的实时开销拦截核心参数敏感度建模向量检索开销高度依赖nprobeHNSW/IVF中候选簇数量、ef_construction图构建时邻域扩展上限及向量维度d。三者呈近似乘性关系O(nprobe × ef_construction × d)。实时拦截策略// 成本阈值校验逻辑单位毫秒估算 func EstimateQueryCost(nprobe, ef, dim int) float64 { base : 0.02 // 基础每维每邻点开销ms return base * float64(nprobe) * float64(ef) * float64(dim) }该函数将硬件实测基准映射为可配置的线性模型支持动态熔断高维1024、大nprobe64或超大ef256组合。典型参数影响对照参数组合维度 dnprobeef_construction预估耗时ms常规检索768166415.7暴力调参20481285122684.04.4 Laravel Envoy驱动的跨云向量服务弹性伸缩AWS OpenSearch Serverless ↔ Neon VectorEnvoy任务编排核心逻辑servers([cloud [useraws-opensearch, userneon-vector]]) task(scale-vector, [on cloud]) # 动态读取负载指标并触发双云协同伸缩 php artisan vector:scale --target{{ $target }} --modehybrid endtask该脚本通过Laravel Envoy统一调度跨云节点--modehybrid启用双引擎协同策略{{ $target }}由Prometheus告警Webhook实时注入。伸缩决策对比表维度AWS OpenSearch ServerlessNeon Vector扩缩粒度按QPS自动分片按向量索引内存配额冷启延迟2s800ms第五章面向2025的Laravel AI成本治理演进路线图AI模型调用的按需熔断机制在 Laravel 11 中我们通过 AiCostMiddleware 实现请求级成本拦截。当单次 OpenAI API 调用预估费用超 $0.03基于 token 数与模型定价实时计算自动降级至本地 Phi-3-mini 量化模型class AiCostMiddleware { public function handle($request, Closure $next) { $estimation AiCostEstimator::fromRequest($request); if ($estimation-exceeds(0.03)) { // 切换至低成本推理栈 config([ai.driver llama-cpp]); } return $next($request); } }多模型服务网格成本看板集成 Prometheus Grafana采集每类 AI 任务摘要、分类、生成的 token-in/token-out 及 USD 成本通过 Laravel Horizon 的自定义 metric hook将 ai_cost_usd 标签注入 Redis Streams训练数据生命周期成本追踪阶段成本动因Laravel 实现方式标注人工标注平台 API 调用使用 Spatie\Tags\HasTags 关联 cost_center_id清洗EC2 Spot 实例时长Carbon::now()-diffInMinutes($start) × $spot_rate边缘推理网关部署实践用户请求 → Cloudflare Worker路由决策→ Laravel Octane负载均衡→ ONNX Runtime 容器ARM64128MB 内存

相关文章:

为什么92%的Laravel项目在AI集成后Q3运维成本翻倍?——Laravel Octane+Vector DB冷热分离计费策略全公开

更多请点击: https://intelliparadigm.com 第一章:Laravel 12 AI集成成本失控的根源诊断 当 Laravel 12 引入原生异步任务调度与内置 OpenAI 客户端抽象层后,许多团队在未评估资源边界的情况下直接启用 ai:generate Artisan 命令批量处理用…...

3D智能体指令驱动与跨场景泛化技术解析

1. 项目背景与核心价值 在3D开放世界环境中构建具备任务执行与泛化能力的智能体,一直是人工智能领域的重要挑战。传统方法往往需要针对特定场景进行大量训练,而Lumine-Instruct模型通过指令驱动的学习范式,展现出在复杂环境中的强大适应能力。…...

Swoole多租户LLM会话管理全解析,深度解读连接复用率提升3.8倍与内存泄漏根因定位

更多请点击: https://intelliparadigm.com 第一章:Swoole多租户LLM会话管理全解析,深度解读连接复用率提升3.8倍与内存泄漏根因定位 在高并发LLM服务场景中,Swoole协程服务器需同时承载数百个租户的独立会话上下文,传…...

基于Webhook的代码变更通知工具:设计原理与实战部署指南

1. 项目概述:一个轻量级的代码变更通知工具最近在折腾一个跨团队协作的项目,代码仓库分散在好几个地方,每次有同事提交了关键代码或者合并了重要的PR,我总是后知后觉,等发现问题时可能已经过去半天了。手动刷提交记录太…...

DV 工程架构中,多态(Polymorphism)的应用

SystemVerilog (SV) 中的 多态(Polymorphism) 是面向对象编程(OOP)的核心特性之一。在芯片验证(DV)中,它主要用于构建灵活、可扩展的验证环境(如 UVM),允许我…...

AI全栈实战:从模型训练到部署的完整工程化指南

1. 项目概述:一个面向实践者的AI全栈学习营最近几年,AI领域的热度居高不下,从大语言模型到AIGC应用,几乎每天都有新的工具和概念涌现。对于很多想进入这个领域,或者希望将AI能力整合到自己项目中的开发者、产品经理甚至…...

基于NLP与Python的智能邮件处理系统:从原理到部署实战

1. 项目概述:一个为邮件处理而生的AI技能如果你每天需要处理大量的邮件,无论是客户咨询、内部沟通还是订阅通知,你肯定体会过那种被信息淹没的无力感。手动分类、回复、提取关键信息,这些重复性工作不仅耗时,还容易出错…...

谈谈一款 .NET 客服系统是如何建立客户信任的

我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统。陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户,在这个过程中,我也积累了不少如何开发运营一款独…...

开源技能库构建指南:从个人工具箱到团队知识沉淀

1. 项目概述:一个开源技能库的诞生与价值在技术社区里,我们常常会看到各种专注于单一领域的“明星”项目,比如一个高性能的Web框架,或者一个精巧的算法库。但你是否想过,一个开发者日常积累的那些看似零散、不成体系&a…...

AI智能体文件处理框架:从多格式解析到语义检索的工程实践

1. 项目概述:从“文件”到“智能体”的进化在AI智能体开发领域,我们常常面临一个看似简单却异常棘手的问题:如何让智能体高效、可靠地处理文件?无论是读取一份PDF合同来提取关键条款,还是分析一个CSV数据集来生成业务洞…...

Vue Router 核心知识汇总

Vue Router 是 Vue3 官方路由管理器,负责页面跳转、路由参数传递、权限控制等核心功能,也是 CRM 系统 “多页面结构” 的基础。结合你之前关注的 Pinia onActivated,下面从「核心定位→基础用法→高级实战→与 Pinia/onActivated 协同」全维…...

Lean 4自动形式化与证明检测技术解析

1. 项目背景与核心挑战 在形式化验证领域,Lean 4作为新一代定理证明辅助工具,正在改变数学验证和程序验证的工作方式。这个项目聚焦于两个关键痛点:如何将非形式化的数学描述自动转换为Lean 4可处理的形式化代码,以及如何检测证明…...

Midscene.js终极指南:5大核心优势解析,如何用AI视觉模型实现真正的跨平台UI自动化

Midscene.js终极指南:5大核心优势解析,如何用AI视觉模型实现真正的跨平台UI自动化 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 在当今…...

六相永磁同步电机匝间短路故障诊断【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。 ✅ 如需沟通交流,扫描文章底部二维码。(1)考虑故障线圈位置的匝间短路故障动态建模与电感解析&#xf…...

BeagleBone Black开源硬件开发板全解析

1. BeagleBone Black:开源硬件的创新引擎当一块信用卡大小的电路板能够驱动3D打印机、控制潜水机器人甚至酿造啤酒时,这意味着硬件开发的游戏规则正在被改写。BeagleBone Black(简称BBB)正是这样一款颠覆传统的开源硬件平台&#…...

【Laravel 12+ AI集成终极指南】:从零部署LangChain+Llama3到生产级API,附12个已验证性能优化陷阱清单

更多请点击: https://intelliparadigm.com 第一章:Laravel 12 AI集成架构全景与演进趋势 Laravel 12 引入了原生异步任务调度、内置 HTTP client 增强、以及对现代 AI 工作流的深度适配能力,标志着 PHP 生态正式迈入“AI-ready”时代。其核心…...

ARM CCI-400 PMU架构与性能监控实战

1. ARM CCI-400 PMU架构解析在现代多核SoC设计中,互连架构的性能直接影响整个系统的效率。ARM CCI-400作为广泛应用的Cache一致性互连方案,其集成的Performance Monitoring Unit(PMU)为开发者提供了关键的硬件级性能观测能力。这个…...

【VSCode 2026启动性能优化白皮书】:实测冷启提速317%,附官方未公开的5大内核级调优参数

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026启动性能优化白皮书导论 随着 VSCode 2026 正式版发布,其底层架构已全面迁移至 Electron 30 V8 13.2,并引入基于 WebAssembly 的预加载沙箱机制。启动性能成为开发者…...

别再死磕手册了!用Vivado 2023.1手把手配置Xilinx SRIO IP核(附Buffer深度选择避坑指南)

实战指南:Vivado 2023.1下Xilinx SRIO IP核高效配置与性能调优 第一次在Vivado中配置SRIO IP核时,面对密密麻麻的选项和参数,大多数工程师都会感到无从下手。手册上的技术说明虽然详尽,但缺乏实际工程视角的解读——为什么这个Buf…...

2kW车载充电机Boost_PFC+全桥LLC两级式AC-DC变换器控制Psim仿真(Mathcad设计书+参考文献)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

观察 Taotoken 在流量高峰期的请求路由与容灾表现

观察 Taotoken 在流量高峰期的请求路由与容灾表现 1. 测试背景与场景设定 近期某电商平台在促销活动期间,其智能客服系统面临流量激增的挑战。该系统通过 Taotoken 平台接入多个大模型 API,用于处理用户咨询、商品推荐等任务。我们记录了活动期间&…...

Harbor镜像仓库安全加固:手把手教你删除swagger.json文件(附Docker命令详解)

Harbor镜像仓库安全加固实战:彻底清除Swagger未授权访问风险 最近在帮客户做容器镜像仓库安全审计时,发现一个容易被忽视但相当普遍的问题——Harbor默认暴露的Swagger UI接口。这个看似无害的功能文档,实际上可能成为攻击者收集系统信息的入…...

终极免费抖音下载工具:快速实现批量下载与去水印的完整指南

终极免费抖音下载工具:快速实现批量下载与去水印的完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...

XShell隐藏玩法:除了SSH远程,它还是你Windows上的串口调试神器(附详细配置截图)

XShell隐藏玩法:串口调试的高效解决方案 作为一名常年与服务器打交道的开发者,我们早已习惯XShell作为SSH客户端的稳定表现。但鲜为人知的是,这款工具在串口调试领域同样展现出令人惊喜的专业能力。当你在调试嵌入式设备时,无需在…...

什么是泄爆门?适用于哪些地方?

泄爆门(又称泄压门)是易燃易爆、粉尘超压场景专用特种安全门,核心原理是爆炸/超压瞬间自动开启泄压,定向释放冲击波、保护厂房主体结构,是化工、粉尘车间、锅炉房的必备安全设施,沧州任丘本地有成熟生产厂家…...

Agent 一接浏览器剪贴板就开始贴错内容:从 Clipboard Claim 到 Paste Confirmation 的工程实战

很多团队把浏览器 Agent 接进真实后台后,最先暴露的隐患往往不是不会复制粘贴,而是把上一次任务的内容贴进了这一次页面。⚠️ 这类事故很少当场报错,却会在链接和工单备注里悄悄放大。图 1:浏览器自动化里最危险的状态之一&#…...

MediaTek Kompanio 1380处理器性能与优化全解析

1. MediaTek Kompanio 1380处理器深度解析作为专为高端Chromebook设计的移动处理器,MediaTek Kompanio 1380(MT8195T)采用了台积电6nm制程工艺,其核心架构由4个Cortex-A78性能核心(最高3.0GHz)和4个Cortex-…...

VSCode 2026智能体编排实战:从零搭建可审计、可回滚、支持LLM-RAG双引擎的协同开发工作流

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026多智能体协同编程全景概览 VSCode 2026正式引入原生多智能体(Multi-Agent)协同编程架构,将编辑器从单用户工具升级为分布式编程协同时空。核心引擎基于轻…...

软件工程师在TVA产业化浪潮中的角色定位与机遇(4)

重磅预告:本专栏将独家连载新书《AI视觉技术:从入门到进阶》精华内容。本书是《AI视觉技术:从进阶到专家》的权威前导篇,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan师从美国三院院士、“AI教母”…...

MCP 2026动态沙箱隔离调整深度拆解(含ASM级指令重定向原理+eBPF Hook点清单)

更多请点击: https://intelliparadigm.com 第一章:MCP 2026动态沙箱隔离调整的演进背景与核心目标 随着云原生应用规模持续扩张与零信任架构落地深化,传统静态沙箱机制在资源调度粒度、跨域策略协同及实时威胁响应方面已显疲态。MCP&#x…...