venv uvicorn python 虚拟服务器外网无法访问
python -m venv .venv
source ./.venv/bin/activate
pip install -r requirements.txt
./run.sh
source ./.venv/bin/activate
uvicorn main:app --reload
虚拟web服务器外网访问控制台启动命令用以下代码启动
uvicorn main:app --host 0.0.0.0 --port 8501 --reload
启动到后台
nohup uvicorn main:app --host 0.0.0.0 --port 8501 --reload &
main.py
import xmltodict
import anthropic
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse, StreamingResponsefrom prompt_constructors import *from claude import ClaudeLlm # claude.py から ClaudeLlm クラスをインポート
import os
import base64app = FastAPI()
api_key = "your key"
client = anthropic.Anthropic(api_key=api_key)# @app.middleware("http")
# async def log_body(request: Request, call_next):
# body = await request.body()
# print("HTTP REQUEST BODY: ", body)
# return await call_next(request)# The anthropic API does not have a method to list models, so we are hard coding the models here
@app.get("/models")
async def list_models() -> JSONResponse:return JSONResponse(content={"data": [{"id": "claude-3-sonnet-20240229", "name": "Anthropic Claude 3 Sonnet"},{"id": "anthropic.claude-3-sonnet-20240229-v1:0", "name": "AWS Bedrock Anthropic Claude 3 Sonnet"},{"id": "claude-3-opus-20240229", "name": "Anthropic Claude 3 Opus"},]})def map_req(req: dict) -> dict:messages = req["messages"]mapped_req = {"messages": messages,}return mapped_req@app.post("/chat/completions")
async def completions(request: Request) -> StreamingResponse:data = await request.body()req = map_req(json.loads(data))messages=req["messages"]claude = ClaudeLlm(client, messages)resp = claude.generate_responses("claude-3-opus-20240229")return StreamingResponse(resp, media_type="application/x-ndjson")def map_resp(response) -> str:data = json.loads(response)finish_reason = Noneparsed_tool_calls = []for message in data["content"]:if 'text' in message.keys() and message["text"].startswith("<function_calls>"):xml_tool_calls = message["text"] + "</function_calls>"tool_calls = xmltodict.parse(xml_tool_calls)if tool_calls["function_calls"]["invoke"] is list:for key, value in tool_calls["function_calls"]["invoke"].items():parsed_tool_calls.append({"index": 0,"id": value['tool_name'],"type": "function","function": {"name": value["tool_name"],"arguments": str(value["parameters"]),},})else:parsed_tool_calls.append({"index": 0,"id": tool_calls["function_calls"]["invoke"]["tool_name"],"type": "function","function": {"name": tool_calls["function_calls"]["invoke"]["tool_name"],"arguments": json.dumps(tool_calls["function_calls"]["invoke"]["parameters"]),},})message.pop("text", None)message.pop("type", None)message["tool_calls"] = parsed_tool_callsmessage["content"] = Nonemessage["role"] = "assistant"if 'text' in message.keys():message["content"] = message["text"]if "stop_reason" in data.keys() and data["stop_reason"] == "stop_sequence":finish_reason = "tool_calls"if "stop_reason" in data.keys() and data["stop_reason"] == "end_turn":finish_reason = "stop"translated = {"id": data["id"],"object": "chat.completion.chunk","created": 0,"model": data["model"],"system_fingerprint": "TEMP","choices": [{"index": 0,"delta": data["content"][0],},],"finish_reason": finish_reason,}return json.dumps(translated)
claude.py
import pandas as pd
from forex_python.converter import CurrencyRates
import time
import anthropic
from anthropic.types.message_stream_event import MessageStartEvent, MessageDeltaEvent, ContentBlockDeltaEventclass ClaudeLlm:def __init__(self, client, user_input):self.client = clientself.user_input = user_inputself.cost_df = pd.DataFrame(columns=["Model", "Input Tokens", "Output Tokens", "Input Cost", "Output Cost", "Total Cost", "総計_円換算", "処理時間"])def convert_usd_to_jpy(self, usd_amount):c = CurrencyRates()try:rate = c.get_rate('USD', 'JPY')jpy_rate = (f"為替レート: {rate:.2f}円/ドル")return usd_amount * rate, jpy_rateexcept Exception as e:rate = 150 # フォールバックとして使用する為替レートjpy_rate = (f"為替レート: {rate:.2f}円/ドル想定")return usd_amount * rate, jpy_ratedef calculate_cost(self, model, input_tokens, output_tokens):token_costs = {"claude-3-opus-20240229": {"input": 0.000015, "output": 0.000075},"claude-3-sonnet-20240229": {"input": 0.000003, "output": 0.000015},}model_costs = token_costs[model]input_cost = input_tokens * model_costs["input"]output_cost = output_tokens * model_costs["output"]total_cost = input_cost + output_costreturn input_cost, output_cost, total_costdef generate_responses(self, model_name):start_time = time.time()input_tokens = 0output_tokens = 0try:with self.client.messages.stream(model=model_name,max_tokens=1024,messages=[{"role": "user", "content": self.user_input}],) as stream:for event in stream:if isinstance(event, MessageStartEvent):usage_info = event.message.usageinput_tokens = usage_info.input_tokenselif isinstance(event, MessageDeltaEvent):output_tokens = event.usage.output_tokenselif isinstance(event, ContentBlockDeltaEvent):return_text = event.delta.textyield return_textexcept anthropic.APIStatusError as e:error_response = e.response.json()if 'error' in error_response and error_response['error'].get('type') == 'overloaded_error':return "APIが過負荷状態です。しばらくしてから再試行してください。"input_cost, output_cost, total_cost = self.calculate_cost(model_name, input_tokens, output_tokens)jpy_total_cost, _ = self.convert_usd_to_jpy(total_cost)end_time = time.time()response_time = end_time - start_timenew_row = {"Model": model_name,"Input Tokens": input_tokens,"Output Tokens": output_tokens,"Input Cost": f"${input_cost:.6f}","Output Cost": f"${output_cost:.6f}","Total Cost": f"${total_cost:.6f}","総計_円換算": f"¥{jpy_total_cost:.3f}","処理時間": f"{response_time:.2f}秒"}new_row_df = pd.DataFrame([new_row])self.cost_df = pd.concat([self.cost_df, new_row_df], ignore_index=True)return self.cost_df
curl -H “Content-Type: application/json” -X POST -d ‘{“user_id”: “123”, “coin”:100, “success”:1, “msg”:“OK!” }’ “http://192.168.0.1:8001/test”
netstat -ntulp
lsof -i:8000
相关文章:
venv uvicorn python 虚拟服务器外网无法访问
python -m venv .venv source ./.venv/bin/activate pip install -r requirements.txt ./run.sh source ./.venv/bin/activate uvicorn main:app --reload 虚拟web服务器外网访问控制台启动命令用以下代码启动 uvicorn main:app --host 0.0.0.0 --port 8501 --reload 启动到后…...
一款博客网站源码
一款博客网站源码 源码软件库 为大家内置了主题 清爽又强大真正的永久可用的一条源码,该版本为整合版本,内置了Joe主题,搭建后直接启用即可~ 安装环境要求: PHP 7.2 以上 MySQL, PostgreSQL, SQLite 任意一种数据库支持ÿ…...
Mr-Robot1靶场练习靶场推荐小白入门练习靶场渗透靶场bp爆破wordpress
下载链接: Mr-Robot: 1 ~ VulnHub 安装: 打开vxbox,菜单栏----管理----导入虚拟电脑 选择下载完的ova文件,并修改想要保存的位置(也可以保持默认位置) 导入完成后可以根据自己的情况去配置网络链接方式 完成…...
数据仓库的设计开发应用(三)
目录 五、数据仓库的实施(一)数据仓库的创建(二)数据抽取转换加载 六、数据仓库系统的开发(一)开发任务(二)开发方法(三)系统测试 七、数据仓库系统的应用&am…...
【04】WebAPI
WebAPI 和标准库不同,WebAPI 是浏览器提供的一套 API,用于操作浏览器窗口和界面 WebAPI 中包含两个部分: BOM:Browser Object Model,浏览器模型,提供和浏览器相关的操作DOM:Document Object Model,文档模型,提供和页面相关的操作BOM BOM 提供了一系列的对象和函数,…...
数据预处理在数据挖掘中的重要性
数据挖掘作为从大量数据中提取有用信息和知识的过程,其结果的准确性和可靠性直接受到数据质量的影响。因此,数据预处理在数据挖掘中扮演着至关重要的角色。让我们探讨数据质量对数据挖掘结果的影响,并介绍常见的数据预处理方法以及它们如何提…...
Java并发编程—JUC线程池架构
Java并发编程(JUC,Java Utilities Concurrency)中的线程池架构是Java提供的一种用于管理和复用线程的机制。线程池的主要目标是减少线程创建和销毁的开销,提高系统的响应速度,并通过合理的线程管理和资源分配ÿ…...
Android input输入子系统
一.Android input输入子系统简介 Input系统是Android系统中负责处理用户输入操作的核心组件,它负责从各种输入设备(如屏幕、键盘、鼠标等)获取原始的输入事件(如按键、触摸、滑动等),并将其转换为Android应…...
如何在webapp中于动发布一个应用
目录 第一步:在webapp文件夹内自定义文件夹第二步:生成一个文本,并把后缀改为 .html第三步:进入bin文件夹打开服务第四步:打开方式选择java第六步:输入你想输出的东西第七步:双击运行即可 第一步…...
部署一个本地的ChatGPT(Ollama)
一 下载Ollama Ollama下载地址:https://ollama.com/download 下载完后 二 安装运行 双击下载好的OllamaSetup.exe开发 安装Ollama: 安装完成后,多了一个Ollama的菜单如下图 : Ollama安装好默认是配置开机运行,如果没有运行可以在…...
Vue 3中的reactive:响应式状态的全面管理
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
【网络】详解HTTPS及探究加密过程
目录 一、什么是HTTPS1、加密解密是什么2、为什么要加密3、常见的加密方式1、对称加密2、非对称加密 二、探究HTTPS如何实现加密1、方案一----只使用对称加密2、方案二----只使用非对称加密3、方案三----双方都使用非对称加密4、方案四----非对称加密 对称加密5、中间人攻击6、…...
【C语言】字符与字符串---从入门到入土级详解
🦄个人主页:修修修也 🎏所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.字符类型和字符数组(串)简介 1.ASCII 2.定义,初始化,使用 1>字符的定义及初始化 2>字符串的定义及初始化 二.…...
Github Copilot 工具,无需账号,一键激活
① 无需账号,100%认证成功!0风险,可联网可更新,,支持copilot版本升级,支持chat ② 支持windows、mac、linux系统等设备 ③一号通用,支持所有IDE(AppCode,CLion,DataGrip,GoLand,IntelliJ IDEA …...
node: -max-old-space-size=xxx is not allowed in NODE_OPTIONS
问题描述 在启动node项目时,出现了OOM参照网上的处理方案,设置了环境变量: export NODE_OPTIONS"–max-old-space-size8192"当再次通过npm run docs:dev运行node项目的时候出现了如下错误: node: -max-old-space-siz…...
k8s编排系统
Kubernetes(简称K8s)是一个开源的容器编排系统,由Google基于其内部的Borg项目开发,并于2014年正式对外发布。目前,Kubernetes已成为云原生计算基金会(Cloud Native Computing Foundation, CNCF)…...
samba服务器的配置
需求:在Linux上搭建一个文件共享服务,创建不同的账号给予不同的权限,在windows可以直接访问该共享目录 介绍 Samba 是一个强大的工具,使得不同操作系统之间可以无缝地共享文件和资源,促进了跨平台环境下的协作和通信…...
H12-821_279
279.第三类LSA的Link ID是: A.所描述的ABR的Router ID B.所在网段上DR的端口IP地址 C.所描述的目的网段 D.生成这条LSA的路由器的Router ID 答案:C 注释: OSPF的LSA可以单独描述网络信息、拓扑信息,也可以同时描述网络信息和拓扑信息。 LSA3…...
Stable Diffusion科普文章【附升级gpt4.0秘笈】
随着人工智能技术的飞速发展,我们越来越多地看到计算机生成的艺术作品出现在我们的生活中。其中,Stable Diffusion作为一种创新的图像生成技术,正在引领一场艺术创作的革命。本文将为您科普Stable Diffusion的相关知识,带您走进这…...
Lua 如何在Lua中调用C/C++函数
Lua调用C函数有两种方式 程序主体在C中运行,C函数注册到Lua中。C调用Lua,Lua调用C注册的函数,C或者Lua得到函数的执行结果。程序主体在Lua中运行,C函数作为库函数供Lua使用。 C的代码如下 如何在Lua脚本中调用这个C语言函数(ad…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
