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…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
